Apply kjk's change to thread.c too

svn path=/trunk/; revision=16132
This commit is contained in:
Alex Ionescu 2005-06-20 04:07:19 +00:00
parent 3bfd20f396
commit 4a0a216d3e

View file

@ -20,46 +20,27 @@
/* FUNCTIONS *****************************************************************/ /* FUNCTIONS *****************************************************************/
_SEH_FILTER(BaseThreadExceptionFilter)
/* FIXME: please put this in some header */
static EXCEPTION_DISPOSITION __cdecl
_except_handler(EXCEPTION_RECORD *ExceptionRecord,
void * EstablisherFrame,
CONTEXT *ContextRecord,
void * DispatcherContext)
{ {
EXCEPTION_POINTERS ExceptionInfo; EXCEPTION_POINTERS * ExceptionInfo = _SEH_GetExceptionPointers();
EXCEPTION_DISPOSITION ExceptionDisposition = EXCEPTION_EXECUTE_HANDLER; LONG ExceptionDisposition = EXCEPTION_EXECUTE_HANDLER;
ExceptionInfo.ExceptionRecord = ExceptionRecord;
ExceptionInfo.ContextRecord = ContextRecord;
if (GlobalTopLevelExceptionFilter != NULL) if (GlobalTopLevelExceptionFilter != NULL)
{ {
_SEH_TRY _SEH_TRY
{ {
ExceptionDisposition = GlobalTopLevelExceptionFilter(&ExceptionInfo); ExceptionDisposition = GlobalTopLevelExceptionFilter(ExceptionInfo);
} }
_SEH_HANDLE _SEH_HANDLE
{ {
ExceptionDisposition = UnhandledExceptionFilter(&ExceptionInfo); ExceptionDisposition = UnhandledExceptionFilter(ExceptionInfo);
} }
_SEH_END; _SEH_END;
} }
if (ExceptionDisposition == EXCEPTION_EXECUTE_HANDLER) return ExceptionDisposition;
ExitThread(ExceptionRecord->ExceptionCode);
/* translate EXCEPTION_XXX defines into EXCEPTION_DISPOSITION enum values */
if (ExceptionDisposition == EXCEPTION_CONTINUE_EXECUTION)
return ExceptionContinueExecution;
else if (ExceptionDisposition == EXCEPTION_CONTINUE_SEARCH)
return ExceptionContinueSearch;
return -1; /* unknown return from UnhandledExceptionFilter */
} }
__declspec(noreturn) void STDCALL __declspec(noreturn) void STDCALL
ThreadStartup ThreadStartup
( (
@ -69,13 +50,16 @@ ThreadStartup
{ {
volatile UINT uExitCode = 0; volatile UINT uExitCode = 0;
__try1(_except_handler) _SEH_TRY
{ {
/* FIXME: notify csrss of thread creation ?? */ uExitCode = (lpStartAddress)((PVOID)lpParameter);
uExitCode = (lpStartAddress)(lpParameter); }
} _SEH_EXCEPT(BaseThreadExceptionFilter)
__except1 {
uExitCode = _SEH_GetExceptionCode();
}
_SEH_END;
ExitThread(uExitCode); ExitThread(uExitCode);
} }