summaryrefslogtreecommitdiff
path: root/Source/Core
diff options
context:
space:
mode:
authorJohn Peterson <jpeterson57@gmail.com>2009-02-03 09:28:15 +0000
committerJohn Peterson <jpeterson57@gmail.com>2009-02-03 09:28:15 +0000
commit328b2f34ba2bdb0f27b9ef173d7dec93b7369edf (patch)
treeee88dda88484f5d1339cc2447c9aa02da9ddc9b9 /Source/Core
parent5972f886ab622e4cb8acb1d71f1be06882ab923d (diff)
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
Diffstat (limited to 'Source/Core')
-rw-r--r--Source/Core/Core/Src/PluginManager.cpp47
1 files changed, 31 insertions, 16 deletions
diff --git a/Source/Core/Core/Src/PluginManager.cpp b/Source/Core/Core/Src/PluginManager.cpp
index 80f607ba40..b7cc630bdd 100644
--- a/Source/Core/Core/Src/PluginManager.cpp
+++ b/Source/Core/Core/Src/PluginManager.cpp
@@ -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