]> git.netwichtig.de Git - user/henk/code/inspircd.git/commitdiff
Only call events on modules which aren't dying.
authorPeter Powell <petpow@saberuk.com>
Thu, 6 Jun 2019 13:14:09 +0000 (14:14 +0100)
committerPeter Powell <petpow@saberuk.com>
Thu, 6 Jun 2019 13:14:46 +0000 (14:14 +0100)
include/event.h
include/modules.h

index 92bb4ffec604f0d1f36024d3e3e50fa6a5dae970..b00e44e3847cc04b9526703a6345d0f3b5720bdd 100644 (file)
@@ -122,6 +122,9 @@ class Events::ModuleEventListener : private dynamic_reference_base::CaptureHook
                        prov->subscribers.erase(this);
        }
 
+       /** Retrieves the module which created this listener. */
+       const Module* GetModule() const { return prov.creator; }
+
        friend struct ModuleEventProvider::Comp;
 };
 
@@ -140,7 +143,9 @@ inline bool Events::ModuleEventProvider::Comp::operator()(Events::ModuleEventLis
        for (::Events::ModuleEventProvider::SubscriberList::const_iterator _i = _handlers.begin(); _i != _handlers.end(); ++_i) \
        { \
                listenerclass* _t = static_cast<listenerclass*>(*_i); \
-               _t->func params ; \
+               const Module* _m = _t->GetModule(); \
+               if (_m && !_m->dying) \
+                       _t->func params ; \
        } \
 } while (0);
 
@@ -157,6 +162,9 @@ inline bool Events::ModuleEventProvider::Comp::operator()(Events::ModuleEventLis
        for (::Events::ModuleEventProvider::SubscriberList::const_iterator _i = _handlers.begin(); _i != _handlers.end(); ++_i) \
        { \
                listenerclass* _t = static_cast<listenerclass*>(*_i); \
+               const Module* _m = _t->GetModule(); \
+               if (!_m || _m->dying) \
+                       continue; \
                result = _t->func params ; \
                if (result != MOD_RES_PASSTHRU) \
                        break; \
index 86d9d067ded94efd53fd65632aeb5398a869878e..45d2dd492e82479c40172aba51652f177bcf41b0 100644 (file)
@@ -121,7 +121,8 @@ struct ModResult {
                _next = _i+1; \
                try \
                { \
-                       (*_i)->y x ; \
+                       if (!(*_i)->dying) \
+                               (*_i)->y x ; \
                } \
                catch (CoreException& modexcept) \
                { \
@@ -144,7 +145,8 @@ do { \
                _next = _i+1; \
                try \
                { \
-                       v = (*_i)->n args;
+                       if (!(*_i)->dying) \
+                               v = (*_i)->n args;
 
 #define WHILE_EACH_HOOK(n) \
                } \