[Scummvm-cvs-logs] CVS: scummvm/base main.cpp,1.47,1.48 plugins.cpp,1.34,1.35 plugins.h,1.21,1.22

Marcus Comstedt marcus_c at users.sourceforge.net
Sun Aug 29 12:09:07 CEST 2004


Update of /cvsroot/scummvm/scummvm/base
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv17118

Modified Files:
	main.cpp plugins.cpp plugins.h 
Log Message:
Provide unloading of unneeded plugins.

Index: main.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/base/main.cpp,v
retrieving revision 1.47
retrieving revision 1.48
diff -u -d -r1.47 -r1.48
--- main.cpp	26 Aug 2004 21:51:18 -0000	1.47
+++ main.cpp	29 Aug 2004 19:08:08 -0000	1.48
@@ -381,8 +381,14 @@
 	//while(1) {
 		// Verify the given game name is a valid supported game
 		if (detector.detectMain()) {
+			// Unload all plugins not needed for this game,
+			// to save memory
+			PluginManager::instance().unloadPluginsExcept(detector._plugin);
+
 			runGame(detector, system);
 
+			// PluginManager::instance().unloadPlugins();
+			// PluginManager::instance().loadPlugins();
                 	 // launcherDialog(detector, system);
 		}
 	//}

Index: plugins.cpp
===================================================================
RCS file: /cvsroot/scummvm/scummvm/base/plugins.cpp,v
retrieving revision 1.34
retrieving revision 1.35
diff -u -d -r1.34 -r1.35
--- plugins.cpp	22 Aug 2004 21:41:22 -0000	1.34
+++ plugins.cpp	29 Aug 2004 19:08:08 -0000	1.35
@@ -265,12 +265,24 @@
 }
 
 void PluginManager::unloadPlugins() {
+	unloadPluginsExcept(NULL);
+}
+
+void PluginManager::unloadPluginsExcept(const Plugin *plugin) {
+	Plugin *found = NULL;
 	uint i;
 	for (i = 0; i < _plugins.size(); i++) {
-		_plugins[i]->unloadPlugin();
-		delete _plugins[i];
+		if (_plugins[i] == plugin) {
+			found = _plugins[i];
+		} else {
+			_plugins[i]->unloadPlugin();
+			delete _plugins[i];
+		}
 	}
 	_plugins.clear();
+	if (found != NULL) {
+		_plugins.push_back(found);
+	}
 }
 
 bool PluginManager::tryLoadPlugin(Plugin *plugin) {

Index: plugins.h
===================================================================
RCS file: /cvsroot/scummvm/scummvm/base/plugins.h,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -d -r1.21 -r1.22
--- plugins.h	9 May 2004 13:12:18 -0000	1.21
+++ plugins.h	29 Aug 2004 19:08:08 -0000	1.22
@@ -123,6 +123,7 @@
 
 	void loadPlugins();
 	void unloadPlugins();
+	void unloadPluginsExcept(const Plugin *plugin);
 	
 	const PluginList &getPlugins()	{ return _plugins; }
 





More information about the Scummvm-git-logs mailing list