diff options
Diffstat (limited to 'include')
-rw-r--r-- | include/inspircd.h | 25 | ||||
-rw-r--r-- | include/modules.h | 2 |
2 files changed, 26 insertions, 1 deletions
diff --git a/include/inspircd.h b/include/inspircd.h index 74678b206..8cce5513a 100644 --- a/include/inspircd.h +++ b/include/inspircd.h @@ -727,6 +727,31 @@ class InspIRCd : public classbase */ bool PublishInterface(const std::string &InterfaceName, Module* Mod); + /** Return a pair saying how many other modules are currently using the + * interfaces provided by module m. + * @param m The module to count usage for + * @return A pair, where the first value is the number of uses of the interface, + * and the second value is the interface name being used. + */ + std::pair<int,std::string> GetInterfaceInstanceCount(Module* m); + + /** Mark your module as using an interface. + * If you mark your module as using an interface, then that interface + * module may not unload until your module has unloaded first. + * This can be used to prevent crashes by ensuring code you depend on + * is always in memory while your module is active. + * @param InterfaceName The interface to use + */ + void UseInterface(const std::string &InterfaceName); + + /** Mark your module as finished with an interface. + * If you used UseInterface() above, you should use this method when + * your module is finished with the interface (usually in its destructor) + * to allow the modules which implement the given interface to be unloaded. + * @param InterfaceName The interface you are finished with using. + */ + void DoneWithInterface(const std::string &InterfaceName); + /** Unpublish a 'feature'. * When your module exits, it must call this method for every feature it * is providing so that the feature table is cleaned up. diff --git a/include/modules.h b/include/modules.h index 9ace806b7..df8c03e3b 100644 --- a/include/modules.h +++ b/include/modules.h @@ -107,7 +107,7 @@ typedef std::deque<Module*> modulelist; /** Holds a list of all modules which implement interfaces, by interface name */ -typedef std::map<std::string, modulelist> interfacelist; +typedef std::map<std::string, std::pair<int, modulelist> > interfacelist; /** * This #define allows us to call a method in all |