summaryrefslogtreecommitdiff
path: root/lib/isc/task.c
diff options
context:
space:
mode:
Diffstat (limited to 'lib/isc/task.c')
-rw-r--r--lib/isc/task.c11
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);