diff options
| -rw-r--r-- | backends/plugins/elf/elf-provider.cpp | 16 | ||||
| -rw-r--r-- | backends/plugins/elf/memory-manager.cpp | 6 | ||||
| -rw-r--r-- | base/plugins.cpp | 28 | 
3 files changed, 27 insertions, 23 deletions
| diff --git a/backends/plugins/elf/elf-provider.cpp b/backends/plugins/elf/elf-provider.cpp index 6d461c79df..d06c4c1ca1 100644 --- a/backends/plugins/elf/elf-provider.cpp +++ b/backends/plugins/elf/elf-provider.cpp @@ -181,15 +181,15 @@ PluginList ELFPluginProvider::getPlugins() {  	PluginList pl = FilePluginProvider::getPlugins();  #if defined(UNCACHED_PLUGINS) && !defined(ELF_NO_MEM_MANAGER) -	if (!pl.empty()) { -		// This static downcast is safe because all of the plugins must -		// be ELF plugins -		for (PluginList::iterator p = pl.begin(); p != pl.end(); ++p) { -			(static_cast<ELFPlugin *>(*p))->trackSize(); -		} +	// This static downcast is safe because all of the plugins must +	// be ELF plugins +	for (PluginList::iterator p = pl.begin(); p != pl.end(); ++p) { +		(static_cast<ELFPlugin *>(*p))->trackSize(); +	} -		// The Memory Manager should now allocate space based on the information -		// it collected +	// The Memory Manager should now allocate space based on the information +	// it collected +	if (!pl.empty()) {  		ELFMemMan.allocateHeap();  	}  #endif diff --git a/backends/plugins/elf/memory-manager.cpp b/backends/plugins/elf/memory-manager.cpp index 5014718ae8..6e54cb8e29 100644 --- a/backends/plugins/elf/memory-manager.cpp +++ b/backends/plugins/elf/memory-manager.cpp @@ -78,9 +78,13 @@ void ELFMemoryManager::trackAlloc(uint32 align, uint32 size) {  }  void ELFMemoryManager::allocateHeap() { +	if (!_heapSize) { +		warning("ELFMemoryManager: Unable to allocate the heap as its size could not be determined."); +		return; +	} +  	// The memory manager should only allocate once  	assert (!_heap); -	assert (_heapSize);  	// clear the list  	_allocList.clear(); diff --git a/base/plugins.cpp b/base/plugins.cpp index 490ca33821..cb9d172d0b 100644 --- a/base/plugins.cpp +++ b/base/plugins.cpp @@ -357,6 +357,9 @@ void PluginManagerUncached::loadFirstPlugin() {  bool PluginManagerUncached::loadNextPlugin() {  	unloadPluginsExcept(PLUGIN_TYPE_ENGINE, NULL, false); +	if (!_currentPlugin) +		return false; +  	for (++_currentPlugin; _currentPlugin != _allEnginePlugins.end(); ++_currentPlugin) {  		if ((*_currentPlugin)->loadPlugin()) {  			addToPluginsInMemList(*_currentPlugin); @@ -533,7 +536,7 @@ DetectionResults EngineManager::detectGames(const Common::FSList &fslist) const  	DetectedGames candidates;  	PluginList plugins;  	PluginList::const_iterator iter; -	PluginManager::instance().loadFirstPlugin(); +	PluginMan.loadFirstPlugin();  	do {  		plugins = getPlugins();  		// Iterate over all known games and for each check if it might be @@ -549,7 +552,7 @@ DetectionResults EngineManager::detectGames(const Common::FSList &fslist) const  			}  		} -	} while (PluginManager::instance().loadNextPlugin()); +	} while (PluginMan.loadNextPlugin());  	return DetectionResults(candidates);  } @@ -641,18 +644,15 @@ const Plugin *EngineManager::findPlugin(const Common::String &engineId) const {  	}  	// We failed to find it using the engine ID. Scan the list of plugins -	const PluginList &plugins = getPlugins(); -	if (!plugins.empty()) { -		PluginMan.loadFirstPlugin(); -		do { -			plugin = findLoadedPlugin(engineId); -			if (plugin) { -				// Update with new plugin file name -				PluginMan.updateConfigWithFileName(engineId); -				return plugin; -			} -		} while (PluginMan.loadNextPlugin()); -	} +	PluginMan.loadFirstPlugin(); +	do { +		plugin = findLoadedPlugin(engineId); +		if (plugin) { +			// Update with new plugin file name +			PluginMan.updateConfigWithFileName(engineId); +			return plugin; +		} +	} while (PluginMan.loadNextPlugin());  	return 0;  } | 
