if (ring != NULL)
refs++;
ret = isc_refcount_init(&tkey->refs, refs);
- if (ret != ISC_R_SUCCESS)
+ if (ret != ISC_R_SUCCESS) {
goto cleanup_creator;
+ }
tkey->generated = generated;
tkey->inception = inception;
cleanup_refs:
tkey->magic = 0;
- while (refs-- > 0)
+ while (refs-- > 0) {
isc_refcount_decrement(&tkey->refs, NULL);
+ }
isc_refcount_destroy(&tkey->refs);
cleanup_creator:
if (tkey->key != NULL)
ring = *ringp;
*ringp = NULL;
- RWLOCK(&ring->lock, isc_rwlocktype_write);
- INSIST(ring->references > 0);
- ring->references--;
- references = ring->references;
- RWUNLOCK(&ring->lock, isc_rwlocktype_write);
-
- if (references != 0)
+ isc_refcount_decrement(&ring->references, &references);
+ if (references > 0) {
return (DNS_R_CONTINUE);
+ }
isc_stdtime_get(&now);
dns_name_init(&foundname, NULL);
ring->maxgenerated = DNS_TSIG_MAXGENERATEDKEYS;
ISC_LIST_INIT(ring->lru);
isc_mem_attach(mctx, &ring->mctx);
- ring->references = 1;
+ isc_refcount_init(&ring->references, 1);
*ringp = ring;
return (ISC_R_SUCCESS);
isc_result_t result;
result = keyring_add(ring, name, tkey);
- if (result == ISC_R_SUCCESS)
+ if (result == ISC_R_SUCCESS) {
isc_refcount_increment(&tkey->refs, NULL);
+ }
return (result);
}
REQUIRE(source != NULL);
REQUIRE(target != NULL && *target == NULL);
- RWLOCK(&source->lock, isc_rwlocktype_write);
- INSIST(source->references > 0);
- source->references++;
- INSIST(source->references > 0);
+ isc_refcount_increment(&source->references, NULL);
+
*target = source;
- RWUNLOCK(&source->lock, isc_rwlocktype_write);
}
void
ring = *ringp;
*ringp = NULL;
- RWLOCK(&ring->lock, isc_rwlocktype_write);
- INSIST(ring->references > 0);
- ring->references--;
- references = ring->references;
- RWUNLOCK(&ring->lock, isc_rwlocktype_write);
-
- if (references == 0)
+ isc_refcount_decrement(&ring->references, &references);
+ if (references == 0) {
destroyring(ring);
+ }
}
void