fix crash handler deadlock
This commit is contained in:
@@ -151,15 +151,6 @@ long __stdcall CrashHandler(EXCEPTION_POINTERS *pExc)
|
|||||||
return EXCEPTION_CONTINUE_EXECUTION;
|
return EXCEPTION_CONTINUE_EXECUTION;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* If we're fullscreen, the fullscreen d3d window will obscure
|
|
||||||
* the crash dialog. Do this before we suspend threads, or it'll
|
|
||||||
* deadlock if the thread controlling this window has been stopped. */
|
|
||||||
/* XXX problem: If the sound thread crashes at the same time the main
|
|
||||||
* thread tells it to shut down, the main thread will be blocking waiting
|
|
||||||
* for the sound thread to finish; we'll come here and deadlock waiting for
|
|
||||||
* it to hide. Hmmmmm. */
|
|
||||||
ShowWindow( g_hWndMain, SW_HIDE );
|
|
||||||
|
|
||||||
RageThread::HaltAllThreads( false );
|
RageThread::HaltAllThreads( false );
|
||||||
|
|
||||||
static bool InHere = false;
|
static bool InHere = false;
|
||||||
@@ -211,6 +202,14 @@ long __stdcall CrashHandler(EXCEPTION_POINTERS *pExc)
|
|||||||
* dump, save it now. */
|
* dump, save it now. */
|
||||||
DoSave(pExc);
|
DoSave(pExc);
|
||||||
|
|
||||||
|
/* Now things get more risky. If we're fullscreen, the window will obscure the
|
||||||
|
* crash dialog. Try to hide the window. We stopped threads above; we need to
|
||||||
|
* resume them now, or ShowWindow will deadlock. Things might blow up here;
|
||||||
|
* do this after DoSave, so we always write a crash dump. */
|
||||||
|
RageThread::ResumeAllThreads();
|
||||||
|
ShowWindow( g_hWndMain, SW_HIDE );
|
||||||
|
RageThread::HaltAllThreads( false );
|
||||||
|
|
||||||
if( g_bAutoRestart )
|
if( g_bAutoRestart )
|
||||||
Win32RestartProgram();
|
Win32RestartProgram();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user