Fixes issue 2331, plugins won't cause a crash/hang on stop anymore if their config dialog was opened, note that stopping a game while a config dialog is open still causes a crash (that should not be possible in the first place since the dialogs are modals, but heh...).

git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@5109 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
sl1nk3.s 2010-02-22 04:59:57 +00:00
parent ae945ec90e
commit ffdf087aad
8 changed files with 45 additions and 76 deletions

View File

@ -1,5 +1,5 @@
/* XPM */
static char *Flag_Korea_xpm[] = {
static const char *const Flag_Korea_xpm[] = {
/* columns rows colors chars-per-pixel */
"96 32 210 2",
". c Black",

View File

@ -89,18 +89,14 @@ BOOL APIENTRY DllMain(HINSTANCE hinstDLL, // DLL module handle
{
#if defined(HAVE_WX) && HAVE_WX
wxSetInstance((HINSTANCE)hinstDLL);
int argc = 0;
char **argv = NULL;
wxEntryStart(argc, argv);
if (!wxTheApp || !wxTheApp->CallOnInit())
return FALSE;
wxInitialize();
#endif
}
break;
case DLL_PROCESS_DETACH:
#if defined(HAVE_WX) && HAVE_WX
wxEntryCleanup();
wxUninitialize();
#endif
break;
default:
@ -191,13 +187,12 @@ void DllConfig(HWND _hParent)
// Only allow one open at a time
m_ConfigFrame->ShowModal();
delete m_ConfigFrame;
m_ConfigFrame->Destroy();
m_ConfigFrame = NULL;
#ifdef _WIN32
frame->SetHWND(NULL);
#endif
delete frame;
m_ConfigFrame = 0;
}
#endif
}

View File

@ -76,18 +76,14 @@ BOOL APIENTRY DllMain(HINSTANCE hinstDLL, // DLL module handle
{
#if defined(HAVE_WX) && HAVE_WX
wxSetInstance((HINSTANCE)hinstDLL);
int argc = 0;
char **argv = NULL;
wxEntryStart(argc, argv);
if (!wxTheApp || !wxTheApp->CallOnInit())
return FALSE;
wxInitialize();
#endif
}
break;
case DLL_PROCESS_DETACH:
#if defined(HAVE_WX) && HAVE_WX
wxEntryCleanup();
wxUninitialize();
#endif
break;
default:
@ -155,9 +151,8 @@ void DllConfig(HWND _hParent)
// Only allow one open at a time
m_ConfigFrame->ShowModal();
delete m_ConfigFrame;
m_ConfigFrame = 0;
m_ConfigFrame->Destroy();
m_ConfigFrame = NULL;
}
#endif
}

View File

@ -73,7 +73,7 @@ class wxDLLApp : public wxApp
}
};
IMPLEMENT_APP_NO_MAIN(wxDLLApp)
WXDLLIMPEXP_BASE void wxSetInstance(HINSTANCE hInst);
WXDLLIMPEXP_BASE void wxSetInstance(HINSTANCE hInst);
#endif
BOOL APIENTRY DllMain(HINSTANCE hinstDLL, // DLL module handle
@ -86,18 +86,14 @@ BOOL APIENTRY DllMain(HINSTANCE hinstDLL, // DLL module handle
{
#if defined(HAVE_WX) && HAVE_WX
wxSetInstance((HINSTANCE)hinstDLL);
int argc = 0;
char **argv = NULL;
wxEntryStart(argc, argv);
if (!wxTheApp || !wxTheApp->CallOnInit())
return FALSE;
wxInitialize();
#endif
}
break;
case DLL_PROCESS_DETACH:
#if defined(HAVE_WX) && HAVE_WX
wxEntryCleanup();
wxUninitialize();
#endif
break;
default:

View File

@ -37,15 +37,15 @@
HINSTANCE g_hInstance;
#if defined(HAVE_WX) && HAVE_WX
class wxDLLApp : public wxApp
{
class wxDLLApp : public wxApp
{
bool OnInit()
{
return true;
}
};
IMPLEMENT_APP_NO_MAIN(wxDLLApp)
WXDLLIMPEXP_BASE void wxSetInstance(HINSTANCE hInst);
};
IMPLEMENT_APP_NO_MAIN(wxDLLApp)
WXDLLIMPEXP_BASE void wxSetInstance(HINSTANCE hInst);
#endif
// ------------------
@ -57,24 +57,17 @@ BOOL APIENTRY DllMain(HINSTANCE hinstDLL, // DLL module handle
{
case DLL_PROCESS_ATTACH:
{
#if defined(HAVE_WX) && HAVE_WX
// Use wxInitialize() if you don't want GUI instead of the following 12 lines
#if defined(HAVE_WX) && HAVE_WX
wxSetInstance((HINSTANCE)hinstDLL);
int argc = 0;
char **argv = NULL;
wxEntryStart(argc, argv);
if (!wxTheApp || !wxTheApp->CallOnInit())
return FALSE;
#endif
wxInitialize();
#endif
}
break;
case DLL_PROCESS_DETACH:
#if defined(HAVE_WX) && HAVE_WX
// This causes a "stop hang", if the gfx config dialog has been opened.
// Old comment: "Use wxUninitialize() if you don't want GUI"
wxEntryCleanup();
#endif
#if defined(HAVE_WX) && HAVE_WX
wxUninitialize();
#endif
break;
default:
break;

View File

@ -298,13 +298,12 @@ void DllConfig(HWND _hParent)
allowConfigShow = false;
m_ConfigFrame->CreateGUIControls();
allowConfigShow = m_ConfigFrame->ShowModal() == 1 ? true : false;
delete m_ConfigFrame;
m_ConfigFrame->Destroy();
m_ConfigFrame = NULL;
#ifdef _WIN32
frame->SetHWND(NULL);
#endif
delete frame;
m_ConfigFrame = 0;
}
#endif
}

View File

@ -33,15 +33,15 @@
HINSTANCE g_hInstance;
#if defined(HAVE_WX) && HAVE_WX
class wxDLLApp : public wxApp
{
class wxDLLApp : public wxApp
{
bool OnInit()
{
return true;
}
};
IMPLEMENT_APP_NO_MAIN(wxDLLApp)
WXDLLIMPEXP_BASE void wxSetInstance(HINSTANCE hInst);
};
IMPLEMENT_APP_NO_MAIN(wxDLLApp)
WXDLLIMPEXP_BASE void wxSetInstance(HINSTANCE hInst);
#endif
// ------------------
@ -53,22 +53,17 @@ BOOL APIENTRY DllMain(HINSTANCE hinstDLL, // DLL module handle
{
case DLL_PROCESS_ATTACH:
{
#if defined(HAVE_WX) && HAVE_WX
// Use wxInitialize() if you don't want GUI instead of the following 12 lines
#if defined(HAVE_WX) && HAVE_WX
wxSetInstance((HINSTANCE)hinstDLL);
int argc = 0;
char **argv = NULL;
wxEntryStart(argc, argv);
if (!wxTheApp || !wxTheApp->CallOnInit())
return FALSE;
#endif
wxInitialize();
#endif
}
break;
case DLL_PROCESS_DETACH:
#if defined(HAVE_WX) && HAVE_WX
wxEntryCleanup();
#endif
#if defined(HAVE_WX) && HAVE_WX
wxUninitialize();
#endif
break;
default:
break;

View File

@ -98,18 +98,14 @@ BOOL APIENTRY DllMain(HINSTANCE hinstDLL, // DLL module handle
{
#if defined(HAVE_WX) && HAVE_WX
wxSetInstance((HINSTANCE)hinstDLL);
int argc = 0;
char **argv = NULL;
wxEntryStart(argc, argv);
if (!wxTheApp || !wxTheApp->CallOnInit())
return FALSE;
wxInitialize();
#endif
}
break;
case DLL_PROCESS_DETACH:
#if defined(HAVE_WX) && HAVE_WX
wxEntryCleanup();
wxUninitialize();
#endif
break;
default: