From d3b735ca3a4e3eff157164057131e2a911d3db29 Mon Sep 17 00:00:00 2001 From: Fish <> Date: Sat, 21 Feb 2004 07:22:02 +0000 Subject: [PATCH] canx any pending dns queries when we unload a module --- dl.c | 3 +++ dns.c | 24 ++++++++++++++++++++++++ dns.h | 1 + 3 files changed, 28 insertions(+) diff --git a/dl.c b/dl.c index 9acbc0bc..6baecbf8 100644 --- a/dl.c +++ b/dl.c @@ -35,6 +35,7 @@ #include "hash.h" #include "config.h" #include "log.h" +#include "dns.h" #ifdef SQLSRV #include "sqlsrv/rta.h" #endif @@ -1591,6 +1592,8 @@ unload_module (char *module_name, User * u) return NS_FAILURE; } + /* canx any DNS queries running */ + canx_dns(module_name); /* Check to see if this Module has any timers registered.... */ del_mod_timers (module_name); diff --git a/dns.c b/dns.c index 5a768c43..62f80373 100644 --- a/dns.c +++ b/dns.c @@ -171,6 +171,30 @@ fini_adns() { list_destroy_nodes(dnslist); free(ads); } +/** @brief Canx any DNS queries for modules we might be unloading + * + * @param module name + * @return Nothing + */ +void +canx_dns(const char *modname) { + lnode_t *dnsnode; + DnsLookup *dnsdata; + + SET_SEGV_LOCATION(); + + dnsnode = list_first (dnslist); + while (dnsnode) { + dnsdata = lnode_get(dnsnode); + if (!ircstrcasecmp(dnsdata->mod_name, modname)) { + adns_cancel(dnsdata->q); + free (dnsdata->a); + free (dnsdata); + } + } +} + + /** @brief Checks for Completed DNS queries * diff --git a/dns.h b/dns.h index fd05c76c..ed8edff9 100644 --- a/dns.h +++ b/dns.h @@ -27,4 +27,5 @@ int init_dns (void); void do_dns (void); void fini_adns(); +void canx_dns(const char *modname); #endif /* _DNS_H_ */