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;
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:"
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) {
REQUIRE(initialize_done == false);
+ isc_refcount_init(&references, 0);
+
result = isc_mem_create(0, 0, &dns_g_mctx);
if (result != ISC_R_SUCCESS)
return;
unsigned int i;
alternate_t *a;
- REQUIRE(res->references == 0);
+ REQUIRE(atomic_load(&res->references) == 0);
REQUIRE(!res->priming);
REQUIRE(res->primefetch == NULL);
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++;
}
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--;
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;
}
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,
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");
* 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)
{
* 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)
{
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);
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);