diff options
-rw-r--r-- | include/modules.h | 12 | ||||
-rw-r--r-- | src/inspircd.cpp | 2 | ||||
-rw-r--r-- | src/modules.cpp | 1 |
3 files changed, 15 insertions, 0 deletions
diff --git a/include/modules.h b/include/modules.h index 0737f9e17..91f9604e5 100644 --- a/include/modules.h +++ b/include/modules.h @@ -491,6 +491,18 @@ class Module : public classbase */ virtual void OnLoadModule(Module* mod,std::string name); + /** Called whenever a module is unloaded. + * mod will contain a pointer to the module, and string will contain its name, + * for example m_widgets.so. This function is primary for dependency checking, + * your module may decide to enable some extra features if it sees that you have + * for example loaded "m_killwidgets.so" with "m_makewidgets.so". It is highly + * recommended that modules do *NOT* bail if they cannot satisfy dependencies, + * but instead operate under reduced functionality, unless the dependency is + * absolutely neccessary (e.g. a module that extends the features of another + * module). + */ + virtual void OnUnloadModule(Module* mod,std::string name); + /** Called once every five seconds for background processing. * This timer can be used to control timed features. Its period is not accurate * enough to be used as a clock, but it is gauranteed to be called at least once in diff --git a/src/inspircd.cpp b/src/inspircd.cpp index 4d7c933c6..9523e13ca 100644 --- a/src/inspircd.cpp +++ b/src/inspircd.cpp @@ -2480,6 +2480,7 @@ bool UnloadModule(const char* filename) snprintf(MODERR,MAXBUF,"Module not unloadable (marked static)"); return false; } + FOREACH_MOD OnUnloadModule(modules[j],module_names[j]); // found the module log(DEBUG,"Deleting module..."); erase_module(j); @@ -2541,6 +2542,7 @@ bool LoadModule(const char* filename) { Module* m = factory[MODCOUNT+1]->factory->CreateModule(); modules[MODCOUNT+1] = m; + FOREACH_MOD OnLoadModule(m,filename_str); /* save the module and the module's classfactory, if * this isnt done, random crashes can occur :/ */ module_names.push_back(filename); diff --git a/src/modules.cpp b/src/modules.cpp index 6f2fc82ec..35372a71e 100644 --- a/src/modules.cpp +++ b/src/modules.cpp @@ -330,6 +330,7 @@ string_list Module::OnChannelSync(chanrec* chan) { string_list empty; return emp void Module::On005Numeric(std::string &output) { }; int Module::OnKill(userrec* source, userrec* dest, std::string reason) { return 0; }; void Module::OnLoadModule(Module* mod,std::string name) { }; +void Module::OnUnloadModule(Module* mod,std::string name) { }; void Module::OnBackgroundTimer(time_t curtime) { }; void Module::OnSendList(userrec* user, chanrec* channel, char mode) { }; int Module::OnPreCommand(std::string command, char **parameters, int pcnt, userrec *user) { return 0; }; |