mirror of
https://github.com/isc-projects/bind9.git
synced 2026-05-28 04:34:54 -04:00
Fix a few broken atomics initializations
This commit is contained in:
parent
81faafd508
commit
e56cc07f50
5 changed files with 24 additions and 17 deletions
|
|
@ -156,8 +156,8 @@ static unsigned char *gsalt = saltbuf;
|
|||
static size_t salt_length = 0;
|
||||
static isc_task_t *master = NULL;
|
||||
static unsigned int ntasks = 0;
|
||||
static atomic_bool shuttingdown = ATOMIC_VAR_INIT(false);
|
||||
static atomic_bool finished = ATOMIC_VAR_INIT(false);
|
||||
static atomic_bool shuttingdown;
|
||||
static atomic_bool finished;
|
||||
static bool nokeys = false;
|
||||
static bool removefile = false;
|
||||
static bool generateds = false;
|
||||
|
|
@ -3216,6 +3216,9 @@ main(int argc, char *argv[]) {
|
|||
bool set_iter = false;
|
||||
bool nonsecify = false;
|
||||
|
||||
atomic_init(&shuttingdown, false);
|
||||
atomic_init(&finished, false);
|
||||
|
||||
/* Unused letters: Bb G J q Yy (and F is reserved). */
|
||||
#define CMDLINE_FLAGS \
|
||||
"3:AaCc:Dd:E:e:f:FghH:i:I:j:K:k:L:l:m:M:n:N:o:O:PpQRr:s:ST:tuUv:VX:xzZ:"
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ static isc_once_t init_once = ISC_ONCE_INIT;
|
|||
static isc_mem_t *dns_g_mctx = NULL;
|
||||
static dns_dbimplementation_t *dbimp = NULL;
|
||||
static bool initialize_done = false;
|
||||
static isc_refcount_t references = 0;
|
||||
static isc_refcount_t references;
|
||||
|
||||
static void
|
||||
initialize(void) {
|
||||
|
|
@ -52,6 +52,8 @@ initialize(void) {
|
|||
|
||||
REQUIRE(initialize_done == false);
|
||||
|
||||
isc_refcount_init(&references, 0);
|
||||
|
||||
result = isc_mem_create(0, 0, &dns_g_mctx);
|
||||
if (result != ISC_R_SUCCESS)
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -9814,7 +9814,7 @@ destroy(dns_resolver_t *res) {
|
|||
unsigned int i;
|
||||
alternate_t *a;
|
||||
|
||||
REQUIRE(res->references == 0);
|
||||
REQUIRE(atomic_load(&res->references) == 0);
|
||||
REQUIRE(!res->priming);
|
||||
REQUIRE(res->primefetch == NULL);
|
||||
|
||||
|
|
@ -10039,7 +10039,7 @@ dns_resolver_create(dns_view_t *view,
|
|||
isc_mem_setname(res->buckets[i].mctx, name, NULL);
|
||||
isc_task_setname(res->buckets[i].task, name, res);
|
||||
ISC_LIST_INIT(res->buckets[i].fctxs);
|
||||
atomic_store_release(&res->buckets[i].exiting, false);
|
||||
atomic_init(&res->buckets[i].exiting, false);
|
||||
buckets_created++;
|
||||
}
|
||||
|
||||
|
|
@ -10362,7 +10362,7 @@ dns_resolver_shutdown(dns_resolver_t *res) {
|
|||
dns_dispatchset_cancelall(res->dispatches6,
|
||||
res->buckets[i].task);
|
||||
}
|
||||
res->buckets[i].exiting = true;
|
||||
atomic_store(&res->buckets[i].exiting, true);
|
||||
if (ISC_LIST_EMPTY(res->buckets[i].fctxs)) {
|
||||
INSIST(res->activebuckets > 0);
|
||||
res->activebuckets--;
|
||||
|
|
@ -10583,7 +10583,7 @@ dns_resolver_createfetch(dns_resolver_t *res, const dns_name_t *name,
|
|||
UNLOCK(&res->lock);
|
||||
LOCK(&res->buckets[bucketnum].lock);
|
||||
|
||||
if (res->buckets[bucketnum].exiting) {
|
||||
if (atomic_load(&res->buckets[bucketnum].exiting)) {
|
||||
result = ISC_R_SHUTTINGDOWN;
|
||||
goto unlock;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -17392,7 +17392,7 @@ dns_zonemgr_unreachable(dns_zonemgr_t *zmgr, isc_sockaddr_t *remote,
|
|||
|
||||
RWLOCK(&zmgr->urlock, isc_rwlocktype_read);
|
||||
for (i = 0; i < UNREACH_CACHE_SIZE; i++) {
|
||||
if (zmgr->unreachable[i].expire >= seconds &&
|
||||
if (atomic_load(&zmgr->unreachable[i].expire) >= seconds &&
|
||||
isc_sockaddr_equal(&zmgr->unreachable[i].remote, remote) &&
|
||||
isc_sockaddr_equal(&zmgr->unreachable[i].local, local)) {
|
||||
atomic_store_relaxed(&zmgr->unreachable[i].last,
|
||||
|
|
|
|||
|
|
@ -229,7 +229,7 @@ task_finished(isc__task_t *task) {
|
|||
REQUIRE(EMPTY(task->events));
|
||||
REQUIRE(task->nevents == 0);
|
||||
REQUIRE(EMPTY(task->on_shutdown));
|
||||
REQUIRE(task->references == 0);
|
||||
REQUIRE(atomic_load(&task->references) == 0);
|
||||
REQUIRE(task->state == task_state_done);
|
||||
|
||||
XTRACE("task_finished");
|
||||
|
|
@ -1243,7 +1243,8 @@ dispatch(isc__taskmgr_t *manager, unsigned int threadid) {
|
|||
* we're stuck. Automatically drop privileges at that
|
||||
* point and continue with the regular ready queue.
|
||||
*/
|
||||
if (manager->mode != isc_taskmgrmode_normal &&
|
||||
if (atomic_load_relaxed(&manager->mode) !=
|
||||
isc_taskmgrmode_normal &&
|
||||
atomic_load_explicit(&manager->tasks_running,
|
||||
memory_order_acquire) == 0)
|
||||
{
|
||||
|
|
@ -1256,7 +1257,8 @@ dispatch(isc__taskmgr_t *manager, unsigned int threadid) {
|
|||
* we'll end up in a deadlock over queue locks.
|
||||
*
|
||||
*/
|
||||
if (manager->mode != isc_taskmgrmode_normal &&
|
||||
if (atomic_load(&manager->mode) !=
|
||||
isc_taskmgrmode_normal &&
|
||||
atomic_load_explicit(&manager->tasks_running,
|
||||
memory_order_acquire) == 0)
|
||||
{
|
||||
|
|
@ -1360,10 +1362,10 @@ isc_taskmgr_create(isc_mem_t *mctx, unsigned int workers,
|
|||
manager->queues = isc_mem_get(mctx, workers * sizeof(isc__taskqueue_t));
|
||||
RUNTIME_CHECK(manager->queues != NULL);
|
||||
|
||||
manager->tasks_running = 0;
|
||||
manager->tasks_ready = 0;
|
||||
manager->curq = 0;
|
||||
manager->exiting = false;
|
||||
atomic_init(&manager->tasks_running, 0);
|
||||
atomic_init(&manager->tasks_ready, 0);
|
||||
atomic_init(&manager->curq, 0);
|
||||
atomic_init(&manager->exiting, false);
|
||||
manager->excl = NULL;
|
||||
manager->halted = 0;
|
||||
atomic_store_relaxed(&manager->exclusive_req, false);
|
||||
|
|
@ -1529,8 +1531,8 @@ void
|
|||
isc__taskmgr_resume(isc_taskmgr_t *manager0) {
|
||||
isc__taskmgr_t *manager = (isc__taskmgr_t *)manager0;
|
||||
LOCK(&manager->halt_lock);
|
||||
if (manager->pause_req) {
|
||||
manager->pause_req = false;
|
||||
if (atomic_load(&manager->pause_req)) {
|
||||
atomic_store(&manager->pause_req, false);
|
||||
while (manager->halted > 0) {
|
||||
BROADCAST(&manager->halt_cond);
|
||||
WAIT(&manager->halt_cond, &manager->halt_lock);
|
||||
|
|
|
|||
Loading…
Reference in a new issue