INSIST(!FIND_EVENTSENT(find));
- find->status = astat;
+ atomic_store(&find->status, astat);
DP(DEF_LEVEL, "cfan: sending find %p to caller", find);
if (want_event) {
INSIST((find->flags & DNS_ADBFIND_ADDRESSMASK) != 0);
find->loop = loop;
- find->status = DNS_ADB_UNSET;
+ atomic_store(&find->status, DNS_ADB_UNSET);
find->cb = cb;
find->cbarg = cbarg;
}
static void
find_sendevent(dns_adbfind_t *find) {
if (!FIND_EVENTSENT(find)) {
- find->status = DNS_ADB_CANCELED;
+ atomic_store(&find->status, DNS_ADB_CANCELED);
DP(DEF_LEVEL, "sending find %p to caller", find);
unsigned int
dns_adb_findstatus(dns_adbfind_t *find) {
- unsigned int status;
REQUIRE(DNS_ADBFIND_VALID(find));
- UNLOCK(&find->lock);
- status = find->status;
- UNLOCK(&find->lock);
-
- return (status);
+ return (atomic_load(&find->status));
}
void
ISC_LINK(dns_adbfind_t) publink; /*%< RW: client use */
/* Private */
- isc_mutex_t lock; /* locks all below */
- in_port_t port;
- unsigned int flags;
- dns_adbname_t *adbname;
- dns_adb_t *adb;
- isc_loop_t *loop;
- dns_adbstatus_t status;
- isc_job_cb cb;
- void *cbarg;
+ isc_mutex_t lock; /* locks all below */
+ in_port_t port;
+ unsigned int flags;
+ dns_adbname_t *adbname;
+ dns_adb_t *adb;
+ isc_loop_t *loop;
+ _Atomic(dns_adbstatus_t) status;
+ isc_job_cb cb;
+ void *cbarg;
ISC_LINK(dns_adbfind_t) plink;
};