summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/inspircd.h25
-rw-r--r--include/modules.h2
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