trying to clean all plugins on shutdown
git-svn-id: https://dolphin-emu.googlecode.com/svn/trunk@2047 8ced0084-cf51-0410-be5f-012b33b47a6e
This commit is contained in:
parent
f8064316b1
commit
529bf35d6a
|
@ -92,13 +92,13 @@ int DynamicLibrary::Load(const char* filename)
|
||||||
return 2;
|
return 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Console::Print("LoadLibrary: %s", filename);
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
Console::Print("LoadLibrary: %s\n", filename);
|
|
||||||
library = LoadLibrary(filename);
|
library = LoadLibrary(filename);
|
||||||
#else
|
#else
|
||||||
library = dlopen(filename, RTLD_NOW | RTLD_LOCAL);
|
library = dlopen(filename, RTLD_NOW | RTLD_LOCAL);
|
||||||
#endif
|
#endif
|
||||||
|
Console::Print(" %p\n", library);
|
||||||
if (!library) {
|
if (!library) {
|
||||||
LOG(MASTER_LOG, "Error loading DLL %s: %s", filename, GetLastErrorAsString().c_str());
|
LOG(MASTER_LOG, "Error loading DLL %s: %s", filename, GetLastErrorAsString().c_str());
|
||||||
PanicAlert("Error loading DLL %s: %s\n", filename, GetLastErrorAsString().c_str());
|
PanicAlert("Error loading DLL %s: %s\n", filename, GetLastErrorAsString().c_str());
|
||||||
|
@ -116,15 +116,15 @@ int DynamicLibrary::Unload()
|
||||||
PanicAlert("Error unloading DLL %s: not loaded", library_file.c_str());
|
PanicAlert("Error unloading DLL %s: not loaded", library_file.c_str());
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Console::Print("FreeLibrary: %s %p\n", library_file.c_str(), library);
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
Console::Print("FreeLibrary: %i\n", library_file.c_str());
|
retval = FreeLibrary(library);
|
||||||
retval = FreeLibrary(library);
|
|
||||||
#else
|
#else
|
||||||
Console::Print("FreeLibrary: %i\n", library_file.c_str());
|
retval = dlclose(library)?0:1;
|
||||||
retval = dlclose(library)?0:1;
|
|
||||||
#endif
|
#endif
|
||||||
if (!retval) {
|
|
||||||
|
if (! retval) {
|
||||||
PanicAlert("Error unloading DLL %s: %s", library_file.c_str(),
|
PanicAlert("Error unloading DLL %s: %s", library_file.c_str(),
|
||||||
GetLastErrorAsString().c_str());
|
GetLastErrorAsString().c_str());
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,14 +17,9 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// =======================================================
|
/* This file is a simpler version of Plugin_...cpp found in Core. This file
|
||||||
// File description
|
only loads the config and debugging windows and works with all plugins. */
|
||||||
// -------------
|
|
||||||
/* This file is a simpler version of Plugin_...cpp found in Core. This file only loads
|
|
||||||
the config and debugging windows and works with all plugins. */
|
|
||||||
// =============
|
|
||||||
|
|
||||||
|
|
||||||
#include "Plugin.h"
|
#include "Plugin.h"
|
||||||
|
|
||||||
namespace Common
|
namespace Common
|
||||||
|
@ -35,7 +30,7 @@ CPlugin::~CPlugin()
|
||||||
m_hInstLib.Unload();
|
m_hInstLib.Unload();
|
||||||
}
|
}
|
||||||
|
|
||||||
CPlugin::CPlugin(const char* _szName) : valid(false)
|
CPlugin::CPlugin(const char* _szName) : valid(false)
|
||||||
{
|
{
|
||||||
|
|
||||||
m_GetDllInfo = NULL;
|
m_GetDllInfo = NULL;
|
||||||
|
@ -82,7 +77,7 @@ void *CPlugin::LoadSymbol(const char *sym) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// ______________________________________________________________________________________
|
|
||||||
// GetInfo: Get DLL info
|
// GetInfo: Get DLL info
|
||||||
bool CPlugin::GetInfo(PLUGIN_INFO& _pluginInfo) {
|
bool CPlugin::GetInfo(PLUGIN_INFO& _pluginInfo) {
|
||||||
if (m_GetDllInfo != NULL) {
|
if (m_GetDllInfo != NULL) {
|
||||||
|
@ -93,7 +88,7 @@ bool CPlugin::GetInfo(PLUGIN_INFO& _pluginInfo) {
|
||||||
return(false);
|
return(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
// ______________________________________________________________________________________
|
|
||||||
// Config: Open the Config window
|
// Config: Open the Config window
|
||||||
void CPlugin::Config(HWND _hwnd)
|
void CPlugin::Config(HWND _hwnd)
|
||||||
{
|
{
|
||||||
|
@ -102,7 +97,7 @@ void CPlugin::Config(HWND _hwnd)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
// ______________________________________________________________________________________
|
|
||||||
// Debug: Open the Debugging window
|
// Debug: Open the Debugging window
|
||||||
void CPlugin::Debug(HWND _hwnd, bool Show)
|
void CPlugin::Debug(HWND _hwnd, bool Show)
|
||||||
{
|
{
|
||||||
|
|
|
@ -3,6 +3,14 @@
|
||||||
namespace Common {
|
namespace Common {
|
||||||
PluginVideo::PluginVideo(const char *_Filename) : CPlugin(_Filename), validVideo(false) {
|
PluginVideo::PluginVideo(const char *_Filename) : CPlugin(_Filename), validVideo(false) {
|
||||||
|
|
||||||
|
Video_Prepare = 0;
|
||||||
|
Video_SendFifoData = 0;
|
||||||
|
Video_UpdateXFB = 0;
|
||||||
|
Video_EnterLoop = 0;
|
||||||
|
Video_Screenshot = 0;
|
||||||
|
Video_AddMessage = 0;
|
||||||
|
Video_Stop = 0;
|
||||||
|
|
||||||
Video_Prepare = reinterpret_cast<TVideo_Prepare>
|
Video_Prepare = reinterpret_cast<TVideo_Prepare>
|
||||||
(LoadSymbol("Video_Prepare"));
|
(LoadSymbol("Video_Prepare"));
|
||||||
Video_SendFifoData = reinterpret_cast<TVideo_SendFifoData>
|
Video_SendFifoData = reinterpret_cast<TVideo_SendFifoData>
|
||||||
|
@ -28,6 +36,5 @@ namespace Common {
|
||||||
validVideo = true;
|
validVideo = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
PluginVideo::~PluginVideo() {
|
PluginVideo::~PluginVideo() {}
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -316,7 +316,6 @@ THREAD_RETURN EmuThread(void *pArg)
|
||||||
VideoInitialize.pKeyPress = Callback_KeyPress;
|
VideoInitialize.pKeyPress = Callback_KeyPress;
|
||||||
VideoInitialize.bWii = _CoreParameter.bWii;
|
VideoInitialize.bWii = _CoreParameter.bWii;
|
||||||
VideoInitialize.bUseDualCore = _CoreParameter.bUseDualCore;
|
VideoInitialize.bUseDualCore = _CoreParameter.bUseDualCore;
|
||||||
Plugins.FreeVideo(); // This is needed for Stop and Start
|
|
||||||
Plugins.GetVideo()->Initialize(&VideoInitialize); // Call the dll
|
Plugins.GetVideo()->Initialize(&VideoInitialize); // Call the dll
|
||||||
|
|
||||||
// Under linux, this is an X11 Display, not an HWND!
|
// Under linux, this is an X11 Display, not an HWND!
|
||||||
|
|
|
@ -133,24 +133,32 @@ bool CPluginManager::InitPlugins()
|
||||||
|
|
||||||
void CPluginManager::ShutdownPlugins()
|
void CPluginManager::ShutdownPlugins()
|
||||||
{
|
{
|
||||||
// Check if we can shutdown the plugin
|
|
||||||
for (int i = 0; i < MAXPADS; i++) {
|
for (int i = 0; i < MAXPADS; i++) {
|
||||||
if (m_pad[i] && OkayToInitPlugin(i)) {
|
if (m_pad[i] && OkayToInitPlugin(i)) {
|
||||||
//Console::Print("Shutdown: %i\n", i);
|
Console::Print("Delete: %i\n", i);
|
||||||
m_pad[i]->Shutdown();
|
delete m_pad[i];
|
||||||
//delete m_pad[i];
|
}
|
||||||
}
|
m_pad[i] = NULL;
|
||||||
//m_pad[i] = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < MAXWIIMOTES; i++)
|
for (int i = 0; i < MAXWIIMOTES; i++) {
|
||||||
if (m_wiimote[i]) m_wiimote[i]->Shutdown();
|
if (m_wiimote[i]) m_wiimote[i]->Shutdown();
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < MAXWIIMOTES; i++) {
|
||||||
|
delete m_wiimote[i];
|
||||||
|
m_wiimote[i] = NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if (m_video)
|
if (m_video)
|
||||||
m_video->Shutdown();
|
m_video->Shutdown();
|
||||||
|
delete m_video;
|
||||||
|
m_video = NULL;
|
||||||
|
|
||||||
if (m_dsp)
|
if (m_dsp)
|
||||||
m_dsp->Shutdown();
|
m_dsp->Shutdown();
|
||||||
|
delete m_dsp;
|
||||||
|
m_dsp = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Supporting functions
|
// Supporting functions
|
||||||
|
@ -266,9 +274,9 @@ Common::PluginPAD *CPluginManager::GetPad(int controller)
|
||||||
Console::Print("LoadPlugin: %i\n", controller);
|
Console::Print("LoadPlugin: %i\n", controller);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
Console::Print("Pointed: %i to %i\n", controller, OkayToInitPlugin(controller));
|
Console::Print("Pointed: %i to %i\n", controller, OkayToInitPlugin(controller));
|
||||||
m_pad[controller] = m_pad[OkayToInitPlugin(controller)];
|
m_pad[controller] = m_pad[OkayToInitPlugin(controller)];
|
||||||
}
|
}
|
||||||
return m_pad[controller];
|
return m_pad[controller];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -295,10 +303,13 @@ Common::PluginDSP *CPluginManager::GetDSP()
|
||||||
|
|
||||||
Common::PluginVideo *CPluginManager::GetVideo()
|
Common::PluginVideo *CPluginManager::GetVideo()
|
||||||
{
|
{
|
||||||
if (m_video != NULL)
|
if (m_video != NULL && m_video->IsValid()) {
|
||||||
if (m_video->GetFilename() == m_params.m_strVideoPlugin)
|
if (m_video->GetFilename() == m_params.m_strVideoPlugin) {
|
||||||
return m_video;
|
return m_video;
|
||||||
|
} else
|
||||||
|
FreeVideo();
|
||||||
|
}
|
||||||
|
|
||||||
// Else load a new plugin
|
// Else load a new plugin
|
||||||
m_video = (Common::PluginVideo*)LoadPlugin(m_params.m_strVideoPlugin.c_str());
|
m_video = (Common::PluginVideo*)LoadPlugin(m_params.m_strVideoPlugin.c_str());
|
||||||
return m_video;
|
return m_video;
|
||||||
|
|
Loading…
Reference in New Issue