X-Git-Url: https://git.netwichtig.de/gitweb/?a=blobdiff_plain;f=src%2Fcoremods%2Fcore_dns.cpp;h=753b41f430531103556321df6f5b5f190d03ae5a;hb=23f30d75fa4375e8818016367df6d0851c7651ac;hp=c95d42ea3b7349009487d4b6ba2063681f3d909b;hpb=14556541bb12fda6e7af8273458f680386e9c438;p=user%2Fhenk%2Fcode%2Finspircd.git diff --git a/src/coremods/core_dns.cpp b/src/coremods/core_dns.cpp index c95d42ea3..753b41f43 100644 --- a/src/coremods/core_dns.cpp +++ b/src/coremods/core_dns.cpp @@ -338,6 +338,7 @@ class MyManager : public Manager, public Timer, public EventHandler cache_map cache; irc::sockets::sockaddrs myserver; + bool unloading; /** Maximum number of entries in cache */ @@ -402,6 +403,7 @@ class MyManager : public Manager, public Timer, public EventHandler DNS::Request* requests[MAX_REQUEST_ID+1]; MyManager(Module* c) : Manager(c), Timer(5*60, true) + , unloading(false) { for (unsigned int i = 0; i <= MAX_REQUEST_ID; ++i) requests[i] = NULL; @@ -410,6 +412,9 @@ class MyManager : public Manager, public Timer, public EventHandler ~MyManager() { + // Ensure Process() will fail for new requests + unloading = true; + for (unsigned int i = 0; i <= MAX_REQUEST_ID; ++i) { DNS::Request* request = requests[i]; @@ -426,6 +431,9 @@ class MyManager : public Manager, public Timer, public EventHandler void Process(DNS::Request* req) { + if ((unloading) || (req->creator->dying)) + throw Exception("Module is being unloaded"); + ServerInstance->Logs->Log(MODNAME, LOG_DEBUG, "Processing request to lookup " + req->question.name + " of type " + ConvToStr(req->question.type) + " to " + this->myserver.addr()); /* Create an id */