[Scummvm-cvs-logs] SF.net SVN: scummvm: [30785] scummvm/trunk/backends/plugins

fingolfin at users.sourceforge.net fingolfin at users.sourceforge.net
Mon Feb 4 08:38:42 CET 2008


Revision: 30785
          http://scummvm.svn.sourceforge.net/scummvm/?rev=30785&view=rev
Author:   fingolfin
Date:     2008-02-03 23:38:42 -0800 (Sun, 03 Feb 2008)

Log Message:
-----------
Fix plugin unloading / cleanup

Modified Paths:
--------------
    scummvm/trunk/backends/plugins/dc/dc-provider.cpp
    scummvm/trunk/backends/plugins/dynamic-plugin.h
    scummvm/trunk/backends/plugins/posix/posix-provider.cpp
    scummvm/trunk/backends/plugins/sdl/sdl-provider.cpp
    scummvm/trunk/backends/plugins/win32/win32-provider.cpp

Modified: scummvm/trunk/backends/plugins/dc/dc-provider.cpp
===================================================================
--- scummvm/trunk/backends/plugins/dc/dc-provider.cpp	2008-02-04 02:50:41 UTC (rev 30784)
+++ scummvm/trunk/backends/plugins/dc/dc-provider.cpp	2008-02-04 07:38:42 UTC (rev 30785)
@@ -76,6 +76,7 @@
 		return ret;
 	}
 	void unloadPlugin() {
+		DynamicPlugin::unloadPlugin();
 		if (_dlHandle) {
 			if (dlclose(_dlHandle) != 0)
 				warning("Failed unloading plugin '%s' (%s)", _filename.c_str(), dlerror());

Modified: scummvm/trunk/backends/plugins/dynamic-plugin.h
===================================================================
--- scummvm/trunk/backends/plugins/dynamic-plugin.h	2008-02-04 02:50:41 UTC (rev 30784)
+++ scummvm/trunk/backends/plugins/dynamic-plugin.h	2008-02-04 07:38:42 UTC (rev 30785)
@@ -42,11 +42,6 @@
 
 public:
 	DynamicPlugin() : _metaengine(0) {}
-	~DynamicPlugin() {
-		// FIXME: The plugin has already been unloaded, so _metaengine isn't
-		// a valid pointer anymore, and you can't call unloadPlugin from here.
-		//delete _metaengine;
-	}
 
 	const char *getName() const {
 		return _metaengine->getName();
@@ -88,6 +83,10 @@
 
 		return true;
 	}
+	
+	virtual void unloadPlugin() {
+		delete _metaengine;
+	}
 };
 
 #endif

Modified: scummvm/trunk/backends/plugins/posix/posix-provider.cpp
===================================================================
--- scummvm/trunk/backends/plugins/posix/posix-provider.cpp	2008-02-04 02:50:41 UTC (rev 30784)
+++ scummvm/trunk/backends/plugins/posix/posix-provider.cpp	2008-02-04 07:38:42 UTC (rev 30785)
@@ -69,6 +69,7 @@
 		return DynamicPlugin::loadPlugin();
 	}
 	void unloadPlugin() {
+		DynamicPlugin::unloadPlugin();
 		if (_dlHandle) {
 			if (dlclose(_dlHandle) != 0)
 				warning("Failed unloading plugin '%s' (%s)", _filename.c_str(), dlerror());

Modified: scummvm/trunk/backends/plugins/sdl/sdl-provider.cpp
===================================================================
--- scummvm/trunk/backends/plugins/sdl/sdl-provider.cpp	2008-02-04 02:50:41 UTC (rev 30784)
+++ scummvm/trunk/backends/plugins/sdl/sdl-provider.cpp	2008-02-04 07:38:42 UTC (rev 30785)
@@ -70,6 +70,7 @@
 		return DynamicPlugin::loadPlugin();
 	}
 	void unloadPlugin() {
+		DynamicPlugin::unloadPlugin();
 		if (_dlHandle) {
 			SDL_UnloadObject(_dlHandle);
 			_dlHandle = 0;

Modified: scummvm/trunk/backends/plugins/win32/win32-provider.cpp
===================================================================
--- scummvm/trunk/backends/plugins/win32/win32-provider.cpp	2008-02-04 02:50:41 UTC (rev 30784)
+++ scummvm/trunk/backends/plugins/win32/win32-provider.cpp	2008-02-04 07:38:42 UTC (rev 30785)
@@ -95,6 +95,7 @@
 		return DynamicPlugin::loadPlugin();
 	}
 	void unloadPlugin() {
+		DynamicPlugin::unloadPlugin();
 		if (_dlHandle) {
 			if (!FreeLibrary((HMODULE)_dlHandle))
 				debug("Failed unloading plugin '%s'", _filename.c_str());


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.




More information about the Scummvm-git-logs mailing list