X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fmodules.cpp;h=8396866578e0aaa15a4d16e07b7b0cd89bf7baf9;hb=5ebb49de65a3f53730177665b5922dc3a62a94eb;hp=a4b5ae4bc37653dbfdd04a869187adc08550c817;hpb=6fbfdcc3f3d20ca978246cd2c051c7f05601d055;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/modules.cpp b/src/modules.cpp index a4b5ae4bc..839686657 100644 --- a/src/modules.cpp +++ b/src/modules.cpp @@ -36,7 +36,7 @@ #include #endif -static std::vector* dynrefs = NULL; +static intrusive_list* dynrefs = NULL; static bool dynref_init_complete = false; void dynamic_reference_base::reset_all() @@ -44,8 +44,8 @@ void dynamic_reference_base::reset_all() dynref_init_complete = true; if (!dynrefs) return; - for(unsigned int i = 0; i < dynrefs->size(); i++) - (*dynrefs)[i]->resolve(); + for (intrusive_list::iterator i = dynrefs->begin(); i != dynrefs->end(); ++i) + (*i)->resolve(); } // Version is a simple class for holding a modules version number @@ -151,7 +151,7 @@ void Module::OnBuildNeighborList(User*, IncludeChanList&, std::map& void Module::OnGarbageCollect() { DetachEvent(I_OnGarbageCollect); } ModResult Module::OnSetConnectClass(LocalUser* user, ConnectClass* myclass) { DetachEvent(I_OnSetConnectClass); return MOD_RES_PASSTHRU; } void Module::OnText(User*, void*, int, const std::string&, char, CUList&) { DetachEvent(I_OnText); } -void Module::OnNamesListItem(User*, Membership*, std::string&, std::string&) { DetachEvent(I_OnNamesListItem); } +ModResult Module::OnNamesListItem(User*, Membership*, std::string&, std::string&) { DetachEvent(I_OnNamesListItem); return MOD_RES_PASSTHRU; } ModResult Module::OnNumeric(User*, unsigned int, const std::string&) { DetachEvent(I_OnNumeric); return MOD_RES_PASSTHRU; } ModResult Module::OnAcceptConnection(int, ListenSocket*, irc::sockets::sockaddrs*, irc::sockets::sockaddrs*) { DetachEvent(I_OnAcceptConnection); return MOD_RES_PASSTHRU; } void Module::OnSendWhoLine(User*, const std::vector&, User*, Membership*, std::string&) { DetachEvent(I_OnSendWhoLine); } @@ -676,29 +676,19 @@ dynamic_reference_base::dynamic_reference_base(Module* Creator, const std::strin : name(Name), value(NULL), creator(Creator) { if (!dynrefs) - dynrefs = new std::vector; - dynrefs->push_back(this); + dynrefs = new intrusive_list; + dynrefs->push_front(this); if (dynref_init_complete) resolve(); } dynamic_reference_base::~dynamic_reference_base() { - for(unsigned int i = 0; i < dynrefs->size(); i++) + dynrefs->erase(this); + if (dynrefs->empty()) { - if (dynrefs->at(i) == this) - { - unsigned int last = dynrefs->size() - 1; - if (i != last) - dynrefs->at(i) = dynrefs->at(last); - dynrefs->erase(dynrefs->begin() + last); - if (dynrefs->empty()) - { - delete dynrefs; - dynrefs = NULL; - } - return; - } + delete dynrefs; + dynrefs = NULL; } }