static void
maybeshutdown(void) {
+ /* when called from getinput, doshutdown might be already finished */
+ if (requestmgr == NULL)
+ return;
+
ddebug("Shutting down request manager");
dns_requestmgr_shutdown(requestmgr);
isc_sockaddr_t *srcaddr;
debug("send_gssrequest");
+ REQUIRE(destaddr != NULL);
+
reqinfo = isc_mem_get(gmctx, sizeof(nsu_gssinfo_t));
reqinfo->msg = msg;
reqinfo->addr = destaddr;
ddebug("Detaching GSS-TSIG keyring");
dns_tsigkeyring_detach(&gssring);
}
- if (kserver != NULL) {
- isc_mem_put(gmctx, kserver, sizeof(isc_sockaddr_t));
- kserver = NULL;
- }
- if (realm != NULL) {
- isc_mem_free(gmctx, realm);
- realm = NULL;
- }
- if (dns_name_dynamic(&tmpzonename)) {
- dns_name_free(&tmpzonename, gmctx);
- }
- if (dns_name_dynamic(&restart_master)) {
- dns_name_free(&restart_master, gmctx);
- }
-#endif /* HAVE_GSSAPI */
+#endif /* ifdef HAVE_GSSAPI */
if (sig0key != NULL) {
dst_key_free(&sig0key);
ddebug("Shutting down timer manager");
isc_timermgr_destroy(&timermgr);
+#ifdef HAVE_GSSAPI
+ /*
+ * Cleanup GSSAPI resources after taskmgr has been destroyed.
+ */
+ if (kserver != NULL) {
+ isc_mem_put(gmctx, kserver, sizeof(isc_sockaddr_t));
+ kserver = NULL;
+ }
+ if (realm != NULL) {
+ isc_mem_free(gmctx, realm);
+ realm = NULL;
+ }
+ if (dns_name_dynamic(&tmpzonename)) {
+ dns_name_free(&tmpzonename, gmctx);
+ }
+ if (dns_name_dynamic(&restart_master)) {
+ dns_name_free(&restart_master, gmctx);
+ }
+#endif /* ifdef HAVE_GSSAPI */
+
ddebug("Removing log context");
isc_log_destroy(&glctx);