X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;ds=sidebyside;f=include%2Fevent.h;h=b00e44e3847cc04b9526703a6345d0f3b5720bdd;hb=9b35c4c78cb15bdae0431f1425983bc41150fee5;hp=92bb4ffec604f0d1f36024d3e3e50fa6a5dae970;hpb=87b1461e2a4710a38b32186c2582da9fe9bb3804;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/include/event.h b/include/event.h index 92bb4ffec..b00e44e38 100644 --- a/include/event.h +++ b/include/event.h @@ -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(*_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(*_i); \ + const Module* _m = _t->GetModule(); \ + if (!_m || _m->dying) \ + continue; \ result = _t->func params ; \ if (result != MOD_RES_PASSTHRU) \ break; \