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 <stenn@ntp.org>
* [Bug 1839] 4.2.7p135 still installs libevent ev*.h headers.
(4.2.7p135) 2011/03/02 Released by Harlan Stenn <stenn@ntp.org>
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);
task->tag = NULL;
INIT_LINK(task, link);
INIT_LINK(task, ready_link);
+ UNLOCK(&task->lock);
exiting = ISC_FALSE;
LOCK(&manager->lock);
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;
isc_mem_attach(mctx, &manager->mctx);
#ifdef ISC_PLATFORM_USETHREADS
- LOCK(&manager->lock);
/*
* Start workers.
*/
isc_thread_setconcurrency(workers);
#else /* ISC_PLATFORM_USETHREADS */
manager->refs = 1;
+ UNLOCK(&manager->lock);
taskmgr = manager;
#endif /* ISC_PLATFORM_USETHREADS */
cleanup_threads:
isc_mem_free(mctx, manager->threads);
cleanup_lock:
+ UNLOCK(&manager->lock);
DESTROYLOCK(&manager->lock);
#endif
cleanup_mgr: