diff options
Diffstat (limited to 'lib/isc/task.c')
-rw-r--r-- | lib/isc/task.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/lib/isc/task.c b/lib/isc/task.c index 54a3051d..411eda16 100644 --- a/lib/isc/task.c +++ b/lib/isc/task.c @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: task.c,v 1.115 2010-12-22 05:19:01 marka Exp $ */ +/* $Id: task.c,v 1.115.14.1 2011-02-03 05:50:07 marka Exp $ */ /*! \file * \author Principal Author: Bob Halley @@ -1210,6 +1210,8 @@ isc__taskmgr_create(isc_mem_t *mctx, unsigned int workers, #ifdef USE_SHARED_MANAGER if (taskmgr != NULL) { + if (taskmgr->refs == 0) + return (ISC_R_SHUTTINGDOWN); taskmgr->refs++; *managerp = (isc_taskmgr_t *)taskmgr; return (ISC_R_SUCCESS); @@ -1325,8 +1327,8 @@ isc__taskmgr_destroy(isc_taskmgr_t **managerp) { #endif /* USE_WORKER_THREADS */ #ifdef USE_SHARED_MANAGER - if (manager->refs > 1) { - manager->refs--; + manager->refs--; + if (manager->refs > 0) { *managerp = NULL; return; } @@ -1396,6 +1398,9 @@ isc__taskmgr_destroy(isc_taskmgr_t **managerp) { isc_mem_printallactive(stderr); #endif INSIST(ISC_LIST_EMPTY(manager->tasks)); +#ifdef USE_SHARED_MANAGER + taskmgr = NULL; +#endif #endif /* USE_WORKER_THREADS */ manager_free(manager); |