daemon shutdown time with large zones (bind 9.2.4)

JINMEI Tatuya / 神明達哉 jinmei at isl.rdc.toshiba.co.jp
Fri Oct 1 22:20:07 UTC 2004


>>>>> On Fri, 1 Oct 2004 13:48:42 -0700 (PDT), 
>>>>> Chris Timmons <cwt at networks.cwu.edu> said:

> Yes - that is right.  The daemon shuts down in ~6:36 now.

Hmm, okay.  If you have time for an experimental, more-aggressive
solution, could you try the attached patch to see how it works (either
with or without ISC_MEM_USE_INTERNAL_MALLOC)?  It will completely skip
freeing actual memory at the shutdown procedure.

					JINMEI, Tatuya
					Communication Platform Lab.
					Corporate R&D Center, Toshiba Corp.
					jinmei at isl.rdc.toshiba.co.jp

diff -r -u bind-9.2.4.orig/bin/named/server.c bind-9.2.4/bin/named/server.c
--- bind-9.2.4.orig/bin/named/server.c	Fri May 14 10:04:46 2004
+++ bind-9.2.4/bin/named/server.c	Sat Oct  2 07:16:24 2004
@@ -2368,6 +2368,7 @@
 	     view = view_next) {
 		view_next = ISC_LIST_NEXT(view, link);
 		ISC_LIST_UNLINK(server->viewlist, view, link);
+		isc_mem_setshutdown(view->mctx);
 		if (flush)
 			dns_view_flushanddetach(&view);
 		else
diff -r -u bind-9.2.4.orig/lib/isc/include/isc/mem.h bind-9.2.4/lib/isc/include/isc/mem.h
--- bind-9.2.4.orig/lib/isc/include/isc/mem.h	Tue Mar  9 15:11:58 2004
+++ bind-9.2.4/lib/isc/include/isc/mem.h	Sat Oct  2 07:16:24 2004
@@ -410,6 +410,8 @@
  *	limit > 0
  */
 
+void
+isc_mem_setshutdown(isc_mem_t *ctx);
 
 /*
  * Pseudo-private functions for use via macros.  Do not call directly.
diff -r -u bind-9.2.4.orig/lib/isc/mem.c bind-9.2.4/lib/isc/mem.c
--- bind-9.2.4.orig/lib/isc/mem.c	Tue Mar  9 15:11:48 2004
+++ bind-9.2.4/lib/isc/mem.c	Sat Oct  2 07:16:24 2004
@@ -146,6 +146,8 @@
 #endif
 
 	unsigned int		memalloc_failures;
+
+	isc_boolean_t		shuttingdown;
 };
 
 #define MEMPOOL_MAGIC		ISC_MAGIC('M', 'E', 'M', 'p')
@@ -616,7 +618,8 @@
 #else
 	UNUSED(size);
 #endif
-	(ctx->memfree)(ctx->arg, mem);
+	if (!ctx->shuttingdown)
+		(ctx->memfree)(ctx->arg, mem);
 }
 
 /*
@@ -1723,4 +1726,13 @@
 		UNLOCK(mpctx->lock);
 
 	return (fillcount);
+}
+
+void
+isc_mem_setshutdown(isc_mem_t *ctx) {
+	REQUIRE(VALID_CONTEXT(ctx));
+
+	LOCK(&ctx->lock);
+	ctx->shuttingdown = ISC_TRUE;
+	UNLOCK(&ctx->lock);
 }


More information about the bind-users mailing list