From: Dave Hart Date: Mon, 7 Mar 2011 10:19:45 +0000 (+0000) Subject: Lock under-construction task, taskmgr objects to satisfy Coverity's X-Git-Tag: NTP_4_2_7P138~3^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=00fe9f97b38e7f893b720ab1aa2001ab087d62f0;p=thirdparty%2Fntp.git Lock under-construction task, taskmgr objects to satisfy Coverity's mostly-correct assumptions about which variables are protected by which locks. bk: 4d74b141yLbyC8XHcSlkIGgvXXD1dQ --- diff --git a/ChangeLog b/ChangeLog index 88b19f462..d37bfa8bf 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,9 @@ use the "debug" variable regardless of #ifdef DEBUG. * Declare debug in libntp instead of each program. Expose extern declaration to utilities, libntp, and DEBUG ntpd. +* Lock under-construction task, taskmgr objects to satisfy Coverity's + mostly-correct assumptions about which variables are protected by + which locks. (4.2.7p136) 2011/03/02 Released by Harlan Stenn * [Bug 1839] 4.2.7p135 still installs libevent ev*.h headers. (4.2.7p135) 2011/03/02 Released by Harlan Stenn diff --git a/lib/isc/task.c b/lib/isc/task.c index a630173d9..47f978371 100644 --- a/lib/isc/task.c +++ b/lib/isc/task.c @@ -186,12 +186,13 @@ isc_task_create(isc_taskmgr_t *manager, unsigned int quantum, if (task == NULL) return (ISC_R_NOMEMORY); XTRACE("isc_task_create"); - task->manager = manager; result = isc_mutex_init(&task->lock); if (result != ISC_R_SUCCESS) { isc_mem_put(manager->mctx, task, sizeof(*task)); return (result); } + LOCK(&task->lock); /* helps coverity analysis noise ratio */ + task->manager = manager; task->state = task_state_idle; task->references = 1; INIT_LIST(task->events); @@ -203,6 +204,7 @@ isc_task_create(isc_taskmgr_t *manager, unsigned int quantum, task->tag = NULL; INIT_LINK(task, link); INIT_LINK(task, ready_link); + UNLOCK(&task->lock); exiting = ISC_FALSE; LOCK(&manager->lock); @@ -1057,11 +1059,12 @@ isc_taskmgr_create(isc_mem_t *mctx, unsigned int workers, manager = isc_mem_get(mctx, sizeof(*manager)); if (manager == NULL) return (ISC_R_NOMEMORY); - manager->magic = TASK_MANAGER_MAGIC; - manager->mctx = NULL; result = isc_mutex_init(&manager->lock); if (result != ISC_R_SUCCESS) goto cleanup_mgr; + LOCK(&manager->lock); + manager->magic = TASK_MANAGER_MAGIC; + manager->mctx = NULL; #ifdef ISC_PLATFORM_USETHREADS manager->workers = 0; @@ -1100,7 +1103,6 @@ isc_taskmgr_create(isc_mem_t *mctx, unsigned int workers, isc_mem_attach(mctx, &manager->mctx); #ifdef ISC_PLATFORM_USETHREADS - LOCK(&manager->lock); /* * Start workers. */ @@ -1121,6 +1123,7 @@ isc_taskmgr_create(isc_mem_t *mctx, unsigned int workers, isc_thread_setconcurrency(workers); #else /* ISC_PLATFORM_USETHREADS */ manager->refs = 1; + UNLOCK(&manager->lock); taskmgr = manager; #endif /* ISC_PLATFORM_USETHREADS */ @@ -1134,6 +1137,7 @@ isc_taskmgr_create(isc_mem_t *mctx, unsigned int workers, cleanup_threads: isc_mem_free(mctx, manager->threads); cleanup_lock: + UNLOCK(&manager->lock); DESTROYLOCK(&manager->lock); #endif cleanup_mgr: