#include <isc/magic.h>
#include <isc/mutex.h>
#include <isc/net.h>
-#include <isc/refcount.h>
#include <isc/types.h>
#define NETADDR_TO_PREFIX_T(na, pt, bits) \
(pt).family = AF_UNSPEC; \
(pt).bitlen = 0; \
} \
- isc_refcount_init(&(pt).refcount, 0); \
} while (0)
typedef struct isc_prefix {
isc_mem_t *mctx;
unsigned int family; /* AF_INET | AF_INET6, or AF_UNSPEC for
* "any" */
- unsigned int bitlen; /* 0 for "any" */
- isc_refcount_t refcount;
+ unsigned int bitlen; /* 0 for "any" */
union {
struct in_addr sin;
struct in6_addr sin6;
prefix->mctx = NULL;
isc_mem_attach(mctx, &prefix->mctx);
- isc_refcount_init(&prefix->refcount, 1);
-
*target = prefix;
return ISC_R_SUCCESS;
}
static void
_deref_prefix(isc_prefix_t *prefix) {
if (prefix != NULL) {
- if (isc_refcount_decrement(&prefix->refcount) == 1) {
- isc_refcount_destroy(&prefix->refcount);
- isc_mem_putanddetach(&prefix->mctx, prefix,
- sizeof(isc_prefix_t));
- }
+ isc_mem_putanddetach(&prefix->mctx, prefix,
+ sizeof(isc_prefix_t));
}
}
(prefix->family == AF_UNSPEC && prefix->bitlen == 0));
REQUIRE(target != NULL && *target == NULL);
- /*
- * If this prefix is a static allocation, copy it into new memory.
- * (Note, the refcount still has to be destroyed by the calling
- * routine.)
- */
- if (isc_refcount_current(&prefix->refcount) == 0) {
- isc_result_t ret;
- ret = _new_prefix(mctx, target, prefix->family, &prefix->add,
- prefix->bitlen);
- return ret;
- }
-
- isc_refcount_increment(&prefix->refcount);
-
- *target = prefix;
- return ISC_R_SUCCESS;
+ return _new_prefix(mctx, target, prefix->family, &prefix->add,
+ prefix->bitlen);
}
static int
result = isc_radix_insert(radix, &node, NULL, &prefix);
assert_int_equal(result, ISC_R_SUCCESS);
node->data[0] = (void *)32;
- isc_refcount_destroy(&prefix.refcount);
in_addr.s_addr = inet_addr("1.0.0.0");
isc_netaddr_fromin(&netaddr, &in_addr);
result = isc_radix_insert(radix, &node, NULL, &prefix);
assert_int_equal(result, ISC_R_SUCCESS);
node->data[0] = (void *)8;
- isc_refcount_destroy(&prefix.refcount);
in_addr.s_addr = inet_addr("1.1.1.0");
isc_netaddr_fromin(&netaddr, &in_addr);
result = isc_radix_insert(radix, &node, NULL, &prefix);
assert_int_equal(result, ISC_R_SUCCESS);
node->data[0] = (void *)24;
- isc_refcount_destroy(&prefix.refcount);
isc_radix_remove(radix, node);
result = isc_radix_insert(radix, &node, NULL, &prefix);
assert_int_equal(result, ISC_R_SUCCESS);
node->data[0] = (void *)1;
- isc_refcount_destroy(&prefix.refcount);
in_addr.s_addr = inet_addr("3.3.0.0");
isc_netaddr_fromin(&netaddr, &in_addr);
result = isc_radix_insert(radix, &node, NULL, &prefix);
assert_int_equal(result, ISC_R_SUCCESS);
node->data[0] = (void *)2;
- isc_refcount_destroy(&prefix.refcount);
in_addr.s_addr = inet_addr("3.3.3.3");
isc_netaddr_fromin(&netaddr, &in_addr);
assert_int_equal(result, ISC_R_SUCCESS);
assert_ptr_equal(node->data[0], (void *)2);
- isc_refcount_destroy(&prefix.refcount);
-
isc_radix_destroy(radix, NULL);
}