From: Mark Andrews Date: Wed, 26 May 2021 07:55:43 +0000 (+1000) Subject: Add missing initialisations X-Git-Tag: v9.17.14~22^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=715a2c7fc137b7b89f949d25f8143c6f498931c1;p=thirdparty%2Fbind9.git Add missing initialisations configuring with --enable-mutex-atomics flagged these incorrectly initialised variables on systems where pthread_mutex_init doesn't just zero out the structure. --- diff --git a/bin/named/controlconf.c b/bin/named/controlconf.c index 69a4cfad703..6139799fb87 100644 --- a/bin/named/controlconf.c +++ b/bin/named/controlconf.c @@ -1466,6 +1466,7 @@ named_controls_create(named_server_t *server, named_controls_t **ctrlsp) { ISC_LIST_INIT(controls->listeners); + atomic_init(&controls->shuttingdown, false); isc_mutex_init(&controls->symtab_lock); LOCK(&controls->symtab_lock); result = isccc_cc_createsymtab(&controls->symtab); diff --git a/lib/dns/rbtdb.c b/lib/dns/rbtdb.c index c16e811babd..98f88e29de9 100644 --- a/lib/dns/rbtdb.c +++ b/lib/dns/rbtdb.c @@ -766,7 +766,7 @@ static char FILE_VERSION[32] = "\0"; * that indicates that the database does not implement cyclic * processing. */ -static atomic_uint_fast32_t init_count; +static atomic_uint_fast32_t init_count = ATOMIC_VAR_INIT(0); /* * Locking diff --git a/lib/dns/xfrin.c b/lib/dns/xfrin.c index 426aa17fa1a..0d2930506bb 100644 --- a/lib/dns/xfrin.c +++ b/lib/dns/xfrin.c @@ -879,6 +879,12 @@ xfrin_create(isc_mem_t *mctx, dns_zone_t *zone, dns_db_t *db, isc_nm_t *netmgr, dns_zone_iattach(zone, &xfr->zone); dns_name_init(&xfr->name, NULL); + isc_refcount_init(&xfr->connects, 0); + isc_refcount_init(&xfr->sends, 0); + isc_refcount_init(&xfr->recvs, 0); + + atomic_init(&xfr->shuttingdown, false); + if (db != NULL) { dns_db_attach(db, &xfr->db); } diff --git a/lib/dns/zone.c b/lib/dns/zone.c index 9084a434b98..64243436137 100644 --- a/lib/dns/zone.c +++ b/lib/dns/zone.c @@ -18132,6 +18132,9 @@ dns_zonemgr_create(isc_mem_t *mctx, isc_taskmgr_t *taskmgr, ISC_LIST_INIT(zmgr->waiting_for_xfrin); ISC_LIST_INIT(zmgr->xfrin_in_progress); memset(zmgr->unreachable, 0, sizeof(zmgr->unreachable)); + for (size_t i = 0; i < UNREACH_CACHE_SIZE; i++) { + atomic_init(&zmgr->unreachable[i].expire, 0); + } isc_rwlock_init(&zmgr->rwlock, 0, 0); zmgr->transfersin = 10; diff --git a/lib/isc/app.c b/lib/isc/app.c index 04f47124347..6a9e40acdf4 100644 --- a/lib/isc/app.c +++ b/lib/isc/app.c @@ -50,7 +50,7 @@ */ static isc_thread_t blockedthread; -static atomic_bool is_running; +static atomic_bool is_running = ATOMIC_VAR_INIT(0); #ifdef WIN32 /* diff --git a/lib/isc/mem.c b/lib/isc/mem.c index 740bffcc153..d129809fa77 100644 --- a/lib/isc/mem.c +++ b/lib/isc/mem.c @@ -491,7 +491,15 @@ mem_create(isc_mem_t **ctxp, unsigned int flags) { atomic_init(&ctx->maxinuse, 0); atomic_init(&ctx->malloced, sizeof(*ctx)); atomic_init(&ctx->maxmalloced, sizeof(*ctx)); + atomic_init(&ctx->hi_water, 0); + atomic_init(&ctx->lo_water, 0); + atomic_init(&ctx->hi_called, false); + atomic_init(&ctx->is_overmem, false); + for (size_t i = 0; i < STATS_BUCKETS + 1; i++) { + atomic_init(&ctx->stats[i].gets, 0); + atomic_init(&ctx->stats[i].totalgets, 0); + } ISC_LIST_INIT(ctx->pools); #if ISC_MEM_TRACKLINES @@ -1211,6 +1219,7 @@ isc_mempool_create(isc_mem_t *mctx, size_t size, isc_mempool_t **mpctxp) { atomic_init(&mpctx->freecount, 0); atomic_init(&mpctx->freemax, 1); atomic_init(&mpctx->fillcount, 1); + atomic_init(&mpctx->gets, 0); *mpctxp = (isc_mempool_t *)mpctx; diff --git a/lib/isc/netmgr/netmgr.c b/lib/isc/netmgr/netmgr.c index 479e11e4ab1..9692be6a4bb 100644 --- a/lib/isc/netmgr/netmgr.c +++ b/lib/isc/netmgr/netmgr.c @@ -278,6 +278,14 @@ isc__netmgr_create(isc_mem_t *mctx, uint32_t workers, isc_nm_t **netmgrp) { atomic_init(&mgr->maxudp, 0); atomic_init(&mgr->interlocked, ISC_NETMGR_NON_INTERLOCKED); atomic_init(&mgr->workers_paused, 0); + atomic_init(&mgr->paused, false); + atomic_init(&mgr->closing, false); + atomic_init(&mgr->idle, false); + atomic_init(&mgr->keepalive, false); + atomic_init(&mgr->recv_tcp_buffer_size, 0); + atomic_init(&mgr->send_tcp_buffer_size, 0); + atomic_init(&mgr->recv_udp_buffer_size, 0); + atomic_init(&mgr->send_udp_buffer_size, 0); #ifdef NETMGR_TRACE ISC_LIST_INIT(mgr->active_sockets); @@ -1554,8 +1562,16 @@ isc___nmsocket_init(isc_nmsocket_t *sock, isc_nm_t *mgr, isc_nmsocket_type type, atomic_init(&sock->sequential, false); atomic_init(&sock->readpaused, false); atomic_init(&sock->closing, false); - - atomic_store(&sock->active_child_connections, 0); + atomic_init(&sock->listening, 0); + atomic_init(&sock->closed, 0); + atomic_init(&sock->destroying, 0); + atomic_init(&sock->ah, 0); + atomic_init(&sock->client, 0); + atomic_init(&sock->connecting, false); + atomic_init(&sock->keepalive, false); + atomic_init(&sock->connected, false); + + atomic_init(&sock->active_child_connections, 0); isc__nm_http_initsocket(sock); diff --git a/lib/isc/stats.c b/lib/isc/stats.c index 7fee22e29ae..6084310a910 100644 --- a/lib/isc/stats.c +++ b/lib/isc/stats.c @@ -52,7 +52,9 @@ create_stats(isc_mem_t *mctx, int ncounters, isc_stats_t **statsp) { counters_alloc_size = sizeof(isc__atomic_statcounter_t) * ncounters; stats->counters = isc_mem_get(mctx, counters_alloc_size); isc_refcount_init(&stats->references, 1); - memset(stats->counters, 0, counters_alloc_size); + for (int i = 0; i < ncounters; i++) { + atomic_init(&stats->counters[i], 0); + } stats->mctx = NULL; isc_mem_attach(mctx, &stats->mctx); stats->ncounters = ncounters; diff --git a/lib/isc/task.c b/lib/isc/task.c index 937164e93f5..c85ac761974 100644 --- a/lib/isc/task.c +++ b/lib/isc/task.c @@ -960,7 +960,8 @@ isc__taskmgr_create(isc_mem_t *mctx, unsigned int default_quantum, isc_nm_t *nm, INIT_LIST(manager->tasks); atomic_init(&manager->exiting, false); atomic_init(&manager->mode, isc_taskmgrmode_normal); - atomic_store_relaxed(&manager->exclusive_req, false); + atomic_init(&manager->exclusive_req, false); + atomic_init(&manager->tasks_count, 0); isc_mem_attach(mctx, &manager->mctx); diff --git a/lib/ns/client.c b/lib/ns/client.c index ba3c3116731..24e244a3d23 100644 --- a/lib/ns/client.c +++ b/lib/ns/client.c @@ -114,9 +114,11 @@ #endif /* ifndef NS_CLIENT_DROPPORT */ #if defined(_WIN32) && !defined(_WIN64) -LIBNS_EXTERNAL_DATA atomic_uint_fast32_t ns_client_requests; +LIBNS_EXTERNAL_DATA atomic_uint_fast32_t ns_client_requests = + ATOMIC_VAR_INIT(0); #else /* if defined(_WIN32) && !defined(_WIN64) */ -LIBNS_EXTERNAL_DATA atomic_uint_fast64_t ns_client_requests; +LIBNS_EXTERNAL_DATA atomic_uint_fast64_t ns_client_requests = + ATOMIC_VAR_INIT(0); #endif /* if defined(_WIN32) && !defined(_WIN64) */ static void