mirror of
https://github.com/reactos/reactos.git
synced 2024-10-21 21:23:59 +00:00
Apply kjk's change to thread.c too
svn path=/trunk/; revision=16132
This commit is contained in:
parent
3bfd20f396
commit
4a0a216d3e
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue