Ignore:
Timestamp:
Apr 15, 2011, 9:37:36 PM (14 years ago)
Author:
dmik
Message:

kernel32: To complete the Win32 exception chain unwind support, make sure it is unwound when the thread terminates itself with ExitThread/ExitProcess etc. before removing its exception handlers from stack.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/kernel32/initkernel32.cpp

    r21583 r21626  
    7373}
    7474
     75// borrowed from ntddk.h
     76extern "C"
     77void WIN32API RtlUnwind(
     78        LPVOID,
     79        LPVOID,
     80        LPVOID,DWORD);
     81
    7582extern PFN pfnImSetMsgQueueProperty;
    7683
     
    275282    dprintf(("kernel32 exit %d\n", ulReason));
    276283
     284    TEB *teb = GetThreadTEB();
     285
     286    if (teb)
     287    {
     288        // make sure the Win32 exception stack (if there is still any) is unwound
     289        // before we destroy internal structures including the Win32 TEB
     290        RtlUnwind(NULL, 0, 0, 0);
     291    }
     292
    277293    if( IsDBCSEnv() && imHandle )
    278294        DosFreeModule( imHandle );
     
    288304    OSLibLVMExit();
    289305
    290     TEB *teb = GetThreadTEB();
    291306    if(teb) DestroyTEB(teb);
    292307    DestroySharedHeap();
Note: See TracChangeset for help on using the changeset viewer.