]> git.ipfire.org Git - thirdparty/bind9.git/commitdiff
lib/dns/tsig.c: use isc_refcount_t
authorOndřej Surý <ondrej@sury.org>
Mon, 20 May 2019 14:55:42 +0000 (16:55 +0200)
committerWitold Kręcicki <wpk@isc.org>
Tue, 9 Jul 2019 14:11:14 +0000 (16:11 +0200)
lib/dns/include/dns/tsig.h
lib/dns/tsig.c

index 62660fd676376e6baa2e7235c355bbab1d9816f3..1aeaa3461b6c02538ea862892ad85828539a45b9 100644 (file)
@@ -67,7 +67,7 @@ struct dns_tsig_keyring {
        unsigned int generated;
        unsigned int maxgenerated;
        ISC_LIST(dns_tsigkey_t) lru;
-       unsigned int references;
+       isc_refcount_t references;
 };
 
 struct dns_tsigkey {
index 29ccd33ef055ac3bbf01d4ca97c95b2a1620eb91..8e41bd963ae64b9f32dea8094ffd988721f0c9ab 100644 (file)
@@ -611,21 +611,15 @@ dns_tsigkeyring_dumpanddetach(dns_tsig_keyring_t **ringp, FILE *fp) {
        dns_rbtnode_t *node;
        dns_tsigkey_t *tkey;
        dns_tsig_keyring_t *ring;
-       unsigned int references;
 
        REQUIRE(ringp != NULL && *ringp != 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)
+       if (isc_refcount_decrement(&ring->references) > 1) {
                return (DNS_R_CONTINUE);
+       }
 
        isc_stdtime_get(&now);
        dns_name_init(&foundname, NULL);
@@ -1804,7 +1798,7 @@ dns_tsigkeyring_create(isc_mem_t *mctx, dns_tsig_keyring_t **ringp) {
        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);
@@ -1829,18 +1823,14 @@ dns_tsigkeyring_attach(dns_tsig_keyring_t *source, dns_tsig_keyring_t **target)
        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);
+
        *target = source;
-       RWUNLOCK(&source->lock, isc_rwlocktype_write);
 }
 
 void
 dns_tsigkeyring_detach(dns_tsig_keyring_t **ringp) {
        dns_tsig_keyring_t *ring;
-       unsigned int references;
 
        REQUIRE(ringp != NULL);
        REQUIRE(*ringp != NULL);
@@ -1848,14 +1838,9 @@ dns_tsigkeyring_detach(dns_tsig_keyring_t **ringp) {
        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)
+       if (isc_refcount_decrement(&ring->references) == 1) {
                destroyring(ring);
+       }
 }
 
 void