mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-02-10 14:39:01 +01:00
PluginManager: Disabled LoadLibrary() and FreeLibrary() between Stop and Start for the Pad and Wiimote plugins. It's still present for the video and sound plugins as I explained in the comment in PluginManager.cpp.
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@2084 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
parent
5972f886ab
commit
328b2f34ba
@ -54,10 +54,19 @@ CPluginManager::CPluginManager() :
|
||||
FreeLibrary() Called from: In an attempt to avoid the crash that occurs when
|
||||
the use LoadLibrary() and FreeLibrary() often (every game a game is stopped
|
||||
and started) these functions will only be used when
|
||||
1. Dolphin is started
|
||||
2. A plugin is changed
|
||||
3. Dolphin is closed
|
||||
it will not be used when we Start and Stop games.
|
||||
1. Dolphin is started
|
||||
2. A plugin is changed
|
||||
3. Dolphin is closed
|
||||
it will not be used when we Start and Stop games. With these exceptions:
|
||||
1. Video plugin: If FreeLibrary() is not called between Stop and Start it will fail for
|
||||
several games on the next Start, but not for all games.
|
||||
2. Sond plugin: If FreeLibrary() is not called between Stop and Start I got the "Tried to
|
||||
"get pointer for unknown address ffffffff" message for all games I tried.
|
||||
If it was not for the crash I always got earlier after several (perhaps as many as twenty) Stop and Start
|
||||
I would be indifferent about how often FreeLibrary() i used, but since it seems like it can fail
|
||||
infrequently, at least for nJoy, I'd rather use FreeLibrary() more sparingly. However, I could not
|
||||
reproduce any crash now after several Stop and Start so maybe it has gone away or I was lucky. In any case
|
||||
if it works I'd rather be without FreeLibrary() between Start and Stop.
|
||||
*/
|
||||
CPluginManager::~CPluginManager()
|
||||
{
|
||||
@ -75,7 +84,6 @@ CPluginManager::~CPluginManager()
|
||||
m_pad[i] = NULL;
|
||||
}
|
||||
|
||||
|
||||
for (int i = 0; i < MAXWIIMOTES; i++)
|
||||
if (m_wiimote[i]) delete m_wiimote[i];
|
||||
|
||||
@ -143,13 +151,26 @@ void CPluginManager::ShutdownPlugins()
|
||||
}
|
||||
|
||||
if (m_video)
|
||||
{
|
||||
m_video->Shutdown();
|
||||
// This is needed for Stop and Start to work
|
||||
delete m_video;
|
||||
m_video = NULL;
|
||||
}
|
||||
|
||||
if (m_dsp)
|
||||
{
|
||||
m_dsp->Shutdown();
|
||||
// This is needed for Stop and Start to work
|
||||
delete m_dsp;
|
||||
m_dsp = NULL;
|
||||
}
|
||||
|
||||
|
||||
for (int i = 0; i < MAXPADS; i++) {
|
||||
// Disabled FreeLibrary() for these plugins. See comment above PluginManager::~CPluginManager()
|
||||
// for an explanation about the current LoadLibrary() and FreeLibrary() behavior.
|
||||
/*
|
||||
for (int i = 0; i < MAXPADS; i++)
|
||||
{
|
||||
if (m_pad[i] && OkayToInitPlugin(i)) {
|
||||
Console::Print("Delete: %i\n", i);
|
||||
delete m_pad[i];
|
||||
@ -157,17 +178,11 @@ void CPluginManager::ShutdownPlugins()
|
||||
m_pad[i] = NULL;
|
||||
}
|
||||
|
||||
for (int i = 0; i < MAXWIIMOTES; i++) {
|
||||
for (int i = 0; i < MAXWIIMOTES; i++)
|
||||
{
|
||||
delete m_wiimote[i];
|
||||
m_wiimote[i] = NULL;
|
||||
}
|
||||
|
||||
delete m_dsp;
|
||||
m_dsp = NULL;
|
||||
|
||||
delete m_video;
|
||||
m_video = NULL;
|
||||
|
||||
}*/
|
||||
}
|
||||
|
||||
// Supporting functions
|
||||
|
Loading…
x
Reference in New Issue
Block a user