- Timestamp:
- Jun 22, 2011, 11:43:22 PM (14 years ago)
- Location:
- trunk/src/kernel32
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kernel32/exceptions.cpp
r21623 r21645 468 468 dprintf(("KERNEL32: RtlUnwind pEndFrame=%08X, unusedEip=%08X, pRecord=%08X, returnEax=%#x\n", pEndFrame, unusedEip, pRecord, returnEax)); 469 469 470 TEB *winteb = GetThreadTEB(); 471 if (!winteb) 472 { 473 /* We're being called from __seh_handler called upon unwinding the OS/2 474 * exception chain after the Win32 TIB structure is destroyed. This for 475 * example happens when we terminate the thread or the process from within 476 * the __try block. Just ignore this call retur (note that the Win32 477 * exception chain should be already unwound by this moment). */ 478 dprintf(("KERNEL32: RtlUnwind returning due to zero Win32 TEB.\n")); 479 return 0; 480 } 470 481 471 482 memset(&context, 0, sizeof(context)); … … 504 515 505 516 /* get chain of exception frames */ 506 TEB *winteb = GetThreadTEB();507 517 frame = (PWINEXCEPTION_FRAME)winteb->except; 508 518 -
trunk/src/kernel32/seh/sehutil.s
r21633 r21645 76 76 popl %fs 77 77 78 /* check if we could successfully switch to Win32 FS. A failure means the79 * Win32 thread is about to exit and TIB has been already destroyed. */80 movl (%esp), %ecx /* (%esp) is OS/2 FS pushed above */81 movl %fs, %eax82 cmpw %cx, %ax83 je ___seh_handler_Skip_Win32_Unwind84 85 78 pushl $0 /* DWORD (unused) */ 86 79 pushl $0 /* PEXCEPTION_RECORD */ … … 89 82 call _RtlUnwind@16 /* _stdcall, rtl, callee cleans stack */ 90 83 91 ___seh_handler_Skip_Win32_Unwind:92 84 popl %fs 93 85
Note:
See TracChangeset
for help on using the changeset viewer.