XInitThreads() must be the very first Xlib function called or else
some X state will have initialized mutexes and some won't, leading to unpredictable results depending on the feature set compiled into wxWidgets and so on. wxGTK starts by calling Xlib functions indirectly through gdk very early on, so we must hook into wxApp::Initialize(). I believe this should properly fix issue 1540. In case of problems, please reopen that issue. If you see XLockMutex in a backtrace, that's a pretty good indication. git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@7205 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
parent
d93a548983
commit
d2910912a4
|
@ -89,6 +89,14 @@ LONG WINAPI MyUnhandledExceptionFilter(LPEXCEPTION_POINTERS e) {
|
|||
}
|
||||
#endif
|
||||
|
||||
bool DolphinApp::Initialize(int& c, wxChar **v)
|
||||
{
|
||||
#if defined HAVE_X11 && HAVE_X11
|
||||
XInitThreads();
|
||||
#endif
|
||||
return wxApp::Initialize(c, v);
|
||||
}
|
||||
|
||||
// The `main program' equivalent that creates the main window and return the main frame
|
||||
|
||||
bool DolphinApp::OnInit()
|
||||
|
@ -328,10 +336,6 @@ bool DolphinApp::OnInit()
|
|||
SetTopWindow(main_frame);
|
||||
main_frame->SetMinSize(wxSize(400, 300));
|
||||
|
||||
#if defined HAVE_X11 && HAVE_X11
|
||||
XInitThreads();
|
||||
#endif
|
||||
|
||||
// Postpone final actions until event handler is running.
|
||||
// Updating the game list makes use of wxProgressDialog which may
|
||||
// only be run after OnInit() when the event handler is running.
|
||||
|
|
|
@ -31,6 +31,7 @@ private:
|
|||
bool OnInit();
|
||||
int OnExit();
|
||||
void OnFatalException();
|
||||
bool Initialize(int& c, wxChar **v);
|
||||
void InitLanguageSupport();
|
||||
void MacOpenFile(const wxString &fileName);
|
||||
|
||||
|
|
|
@ -489,7 +489,7 @@ bool OpenGL_Create(int _iwidth, int _iheight)
|
|||
if (GLWin.vi == NULL)
|
||||
{
|
||||
ERROR_LOG(VIDEO, "Could not choose visual (glXChooseVisual)");
|
||||
exit(0);
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -501,7 +501,7 @@ bool OpenGL_Create(int _iwidth, int _iheight)
|
|||
if (!GLWin.ctx)
|
||||
{
|
||||
PanicAlert("Couldn't Create GLX context.Quit");
|
||||
exit(0); // TODO: Don't bring down entire Emu
|
||||
return false;
|
||||
}
|
||||
|
||||
GLWin.x = _tx;
|
||||
|
|
Loading…
Reference in New Issue