- Timestamp:
 - Jun 22, 2011, 11:43:22 PM (14 years ago)
 - Location:
 - trunk/src/kernel32
 - Files:
 - 
      
- 2 edited
 
- 
          
  exceptions.cpp (modified) (2 diffs)
 - 
          
  seh/sehutil.s (modified) (2 diffs)
 
 
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.
  