summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/modmanager_dynamic.cpp1
-rw-r--r--src/modmanager_static.cpp1
-rw-r--r--src/modules.cpp4
3 files changed, 5 insertions, 1 deletions
diff --git a/src/modmanager_dynamic.cpp b/src/modmanager_dynamic.cpp
index dab1143ad..7dae49a18 100644
--- a/src/modmanager_dynamic.cpp
+++ b/src/modmanager_dynamic.cpp
@@ -66,6 +66,7 @@ bool ModuleManager::Load(const std::string& filename, bool defer)
{
newmod->ModuleSourceFile = filename;
newmod->ModuleDLLManager = newhandle;
+ newmod->dying = false;
Modules[filename] = newmod;
std::string version = newhandle->GetVersion();
if (defer)
diff --git a/src/modmanager_static.cpp b/src/modmanager_static.cpp
index d2a2f2c09..8f532ee80 100644
--- a/src/modmanager_static.cpp
+++ b/src/modmanager_static.cpp
@@ -93,6 +93,7 @@ bool ModuleManager::Load(const std::string& name, bool defer)
mod = (*it->second->init)();
mod->ModuleSourceFile = name;
mod->ModuleDLLManager = NULL;
+ mod->dying = false;
Modules[name] = mod;
if (defer)
{
diff --git a/src/modules.cpp b/src/modules.cpp
index 4e4d20c70..a7b3364ae 100644
--- a/src/modules.cpp
+++ b/src/modules.cpp
@@ -328,7 +328,7 @@ bool ModuleManager::CanUnload(Module* mod)
{
std::map<std::string, Module*>::iterator modfind = Modules.find(mod->ModuleSourceFile);
- if (modfind == Modules.end() || modfind->second != mod)
+ if ((modfind == Modules.end()) || (modfind->second != mod) || (mod->dying))
{
LastModuleError = "Module " + mod->ModuleSourceFile + " is not loaded, cannot unload it!";
ServerInstance->Logs->Log("MODULE", DEFAULT, LastModuleError);
@@ -340,6 +340,8 @@ bool ModuleManager::CanUnload(Module* mod)
ServerInstance->Logs->Log("MODULE", DEFAULT, LastModuleError);
return false;
}
+
+ mod->dying = true;
return true;
}