From: Arran Cudbard-Bell Date: Mon, 1 Mar 2021 20:21:03 +0000 (+0000) Subject: Cleanup rbtree functions X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=71ddb888c22ef35f3e27225fc13a8db4e1650c17;p=thirdparty%2Ffreeradius-server.git Cleanup rbtree functions Bump return and element count to uint64_t --- diff --git a/src/bin/radsniff.c b/src/bin/radsniff.c index 4548144b9d5..ec7ca0d14f1 100644 --- a/src/bin/radsniff.c +++ b/src/bin/radsniff.c @@ -980,12 +980,12 @@ static int _request_free(rs_request_t *request) * something has gone very badly wrong. */ if (request->in_request_tree) { - ret = rbtree_deletebydata(request_tree, request); + ret = rbtree_delete_by_data(request_tree, request); RS_ASSERT(ret); } if (request->in_link_tree) { - ret = rbtree_deletebydata(link_tree, request); + ret = rbtree_delete_by_data(link_tree, request); RS_ASSERT(ret); } @@ -1390,7 +1390,7 @@ static void rs_packet_process(uint64_t count, rs_event_t *event, struct pcap_pkt { /* look for a matching request and use it for decoding */ search.expect = packet; - original = rbtree_finddata(request_tree, &search); + original = rbtree_find_data(request_tree, &search); /* * Verify this code is allowed @@ -1608,8 +1608,8 @@ static void rs_packet_process(uint64_t count, rs_event_t *event, struct pcap_pkt if (!fr_pair_list_empty(&search.link_vps)) { rs_request_t *tuple; - original = rbtree_finddata(link_tree, &search); - tuple = rbtree_finddata(request_tree, &search); + original = rbtree_find_data(link_tree, &search); + tuple = rbtree_find_data(request_tree, &search); /* * If the packet we matched using attributes is not the same @@ -1623,7 +1623,7 @@ static void rs_packet_process(uint64_t count, rs_event_t *event, struct pcap_pkt * Detect duplicates using the normal 5-tuple of src/dst ips/ports id */ } else { - original = rbtree_finddata(request_tree, &search); + original = rbtree_find_data(request_tree, &search); if (original && (memcmp(original->expect->vector, packet->vector, sizeof(original->expect->vector)) != 0)) { /* @@ -1673,7 +1673,7 @@ static void rs_packet_process(uint64_t count, rs_event_t *event, struct pcap_pkt /* Request may need to be reinserted as the 5 tuple of the response may of changed */ if (rs_packet_cmp(original, &search) != 0) { - rbtree_deletebydata(request_tree, original); + rbtree_delete_by_data(request_tree, original); } /* replace expected packets and vps */ diff --git a/src/lib/io/master.c b/src/lib/io/master.c index da066ea9b18..a94a27fe17c 100644 --- a/src/lib/io/master.c +++ b/src/lib/io/master.c @@ -158,9 +158,9 @@ static int track_free(fr_io_track_t *track) static int track_dedup_free(fr_io_track_t *track) { fr_assert(track->client->table != NULL); - fr_assert(rbtree_finddata(track->client->table, track) != NULL); + fr_assert(rbtree_find_data(track->client->table, track) != NULL); - if (!rbtree_deletebydata(track->client->table, track)) { + if (!rbtree_delete_by_data(track->client->table, track)) { fr_assert(0); } @@ -895,7 +895,7 @@ static fr_io_track_t *fr_io_track_add(fr_io_client_t *client, /* * No existing duplicate. Return the new tracking entry. */ - old = rbtree_finddata(client->table, track); + old = rbtree_find_data(client->table, track); if (!old) goto do_insert; fr_assert(old->client == client); @@ -964,7 +964,7 @@ static fr_io_track_t *fr_io_track_add(fr_io_client_t *client, } else { fr_assert(client == old->client); - if (!rbtree_deletebydata(client->table, old)) { + if (!rbtree_delete_by_data(client->table, old)) { fr_assert(0); } if (old->ev) (void) fr_event_timer_delete(&old->ev); diff --git a/src/lib/io/network.c b/src/lib/io/network.c index 3db18144b3a..abf97efda06 100644 --- a/src/lib/io/network.c +++ b/src/lib/io/network.c @@ -243,7 +243,7 @@ int fr_network_socket_delete(fr_network_t *nr, fr_listen_t *li) { fr_network_socket_t *s; - s = rbtree_finddata(nr->sockets, &(fr_network_socket_t){ .listen = li }); + s = rbtree_find_data(nr->sockets, &(fr_network_socket_t){ .listen = li }); if (!s) return -1; fr_network_socket_dead(nr, s); @@ -296,7 +296,7 @@ void fr_network_listen_read(fr_network_t *nr, fr_listen_t *li) (void) talloc_get_type_abort(nr, fr_network_t); (void) talloc_get_type_abort_const(li, fr_listen_t); - s = rbtree_finddata(nr->sockets, &(fr_network_socket_t){ .listen = li }); + s = rbtree_find_data(nr->sockets, &(fr_network_socket_t){ .listen = li }); if (!s) return; /* @@ -1045,8 +1045,8 @@ static int _network_socket_free(fr_network_socket_t *s) fr_network_t *nr = s->nr; fr_channel_data_t *cd; - rbtree_deletebydata(nr->sockets, s); - rbtree_deletebydata(nr->sockets_by_num, s); + rbtree_delete_by_data(nr->sockets, s); + rbtree_delete_by_data(nr->sockets_by_num, s); fr_event_fd_delete(nr->el, s->listen->fd, s->filter); @@ -1283,7 +1283,7 @@ static void fr_network_inject_callback(void *ctx, void const *data, size_t data_ fr_assert(data_size == sizeof(my_inject)); memcpy(&my_inject, data, data_size); - s = rbtree_finddata(nr->sockets, &(fr_network_socket_t){ .listen = my_inject.listen }); + s = rbtree_find_data(nr->sockets, &(fr_network_socket_t){ .listen = my_inject.listen }); if (!s) { talloc_free(my_inject.packet); /* MUST be it's own TALLOC_CTX */ return; @@ -1345,7 +1345,7 @@ static void fr_network_post_event(UNUSED fr_event_list_t *el, UNUSED fr_time_t n * @todo - cache this somewhere so we don't need * to do an rbtree lookup for every packet. */ - s = rbtree_finddata(nr->sockets, &(fr_network_socket_t){ .listen = li }); + s = rbtree_find_data(nr->sockets, &(fr_network_socket_t){ .listen = li }); /* * This shouldn't happen, but be safe... @@ -1415,7 +1415,8 @@ int fr_network_destroy(fr_network_t *nr) size_t len; size_t i; - len = rbtree_flatten(nr, (void ***)&sockets, nr->sockets, RBTREE_IN_ORDER); + if (rbtree_flatten_inorder(nr, (void ***)&sockets, nr->sockets) < 0) return -1; + len = talloc_array_length(sockets); for (i = 0; i < len; i++) talloc_free(sockets[i]); @@ -1744,7 +1745,7 @@ static int cmd_stats_self(FILE *fp, UNUSED FILE *fp_err, void *ctx, UNUSED fr_cm fprintf(fp, "count.out\t%" PRIu64 "\n", nr->stats.out); fprintf(fp, "count.dup\t%" PRIu64 "\n", nr->stats.dup); fprintf(fp, "count.dropped\t%" PRIu64 "\n", nr->stats.dropped); - fprintf(fp, "count.sockets\t%u\n", rbtree_num_elements(nr->sockets)); + fprintf(fp, "count.sockets\t%"PRIu64"\n", rbtree_num_elements(nr->sockets)); return 0; } @@ -1774,7 +1775,7 @@ static int cmd_stats_socket(FILE *fp, FILE *fp_err, void *ctx, fr_cmd_info_t con fr_network_t const *nr = ctx; fr_network_socket_t *s; - s = rbtree_finddata(nr->sockets_by_num, &(fr_network_socket_t){ .number = info->box[0]->vb_uint32 }); + s = rbtree_find_data(nr->sockets_by_num, &(fr_network_socket_t){ .number = info->box[0]->vb_uint32 }); if (!s) { fprintf(fp_err, "No such socket number '%s'.\n", info->argv[0]); return -1; diff --git a/src/lib/io/worker.c b/src/lib/io/worker.c index d0ed81cb5cf..e1ecdef74ca 100644 --- a/src/lib/io/worker.c +++ b/src/lib/io/worker.c @@ -548,7 +548,7 @@ static void worker_stop_request(fr_worker_t *worker, request_t *request, fr_time */ if (request->time_order_id >= 0) (void) fr_heap_extract(worker->time_order, request); if (request->runnable_id >= 0) (void) fr_heap_extract(worker->runnable, request); - if (request->async->listen && request->async->listen->track_duplicates) rbtree_deletebydata(worker->dedup, request); + if (request->async->listen && request->async->listen->track_duplicates) rbtree_delete_by_data(worker->dedup, request); #ifndef NDEBUG request->async->process = NULL; @@ -781,7 +781,7 @@ nak: if (request->async->listen->track_duplicates) { request_t *old; - old = rbtree_finddata(worker->dedup, request); + old = rbtree_find_data(worker->dedup, request); if (!old) { /* * Ignore duplicate packets where we've @@ -939,7 +939,7 @@ static void worker_run_request(fr_worker_t *worker, fr_time_t start) * then, only some of the time. */ if (request_is_external(request) && request->async->listen->track_duplicates) { - (void) rbtree_deletebydata(worker->dedup, request); + (void) rbtree_delete_by_data(worker->dedup, request); } now = fr_time(); diff --git a/src/lib/redis/cluster.c b/src/lib/redis/cluster.c index 4a2ab2394c2..469c8ec3348 100644 --- a/src/lib/redis/cluster.c +++ b/src/lib/redis/cluster.c @@ -553,7 +553,7 @@ do { \ do { \ (_node)->is_active = false; \ (_node)->is_master = false; \ - rbtree_deletebydata(cluster->used_nodes, _node); \ + rbtree_delete_by_data(cluster->used_nodes, _node); \ fr_fifo_push(cluster->free_nodes, _node); \ } while (0) @@ -601,7 +601,7 @@ do { \ memset(&tmpl_slot, 0, sizeof(tmpl_slot)); SET_ADDR(find.addr, map->element[2]); - found = rbtree_finddata(cluster->used_nodes, &find); + found = rbtree_find_data(cluster->used_nodes, &find); if (found) { active[found->id] = true; goto reuse_master_node; @@ -653,7 +653,7 @@ do { \ */ for (j = 3; (j < map->elements); j++) { SET_ADDR(find.addr, map->element[j]); - found = rbtree_finddata(cluster->used_nodes, &find); + found = rbtree_find_data(cluster->used_nodes, &find); if (found) { active[found->id] = true; goto next; @@ -728,7 +728,7 @@ do { \ if (cluster->node[i].is_active) { /* Sanity check for duplicates that are active */ - found = rbtree_finddata(cluster->used_nodes, &cluster->node[i]); + found = rbtree_find_data(cluster->used_nodes, &cluster->node[i]); fr_assert(found); fr_assert(found->is_active); fr_assert(found->id == i); @@ -1119,7 +1119,7 @@ static fr_redis_cluster_rcode_t cluster_redirect(fr_redis_cluster_node_t **out, * If we have already have a pool for the * host we were redirected to, use that. */ - found = rbtree_finddata(cluster->used_nodes, &find); + found = rbtree_find_data(cluster->used_nodes, &find); if (found) { /* We have the new pool, don't need to hold the lock */ pthread_mutex_unlock(&cluster->mutex); @@ -1699,7 +1699,7 @@ fr_redis_rcode_t fr_redis_cluster_state_init(fr_redis_cluster_state_t *state, fr fr_redis_cluster_node_t *node; fr_redis_cluster_key_slot_t const *key_slot; uint8_t first, i; - int used_nodes; + uint64_t used_nodes; fr_assert(cluster); fr_assert(state); @@ -2025,7 +2025,7 @@ int fr_redis_cluster_pool_by_node_addr(fr_pool_t **pool, fr_redis_cluster_t *clu find.addr.inet.dst_port = node_addr->inet.dst_port; pthread_mutex_lock(&cluster->mutex); - found = rbtree_finddata(cluster->used_nodes, &find); + found = rbtree_find_data(cluster->used_nodes, &find); if (!found) { fr_redis_cluster_node_t *spare; char buffer[INET6_ADDRSTRLEN]; @@ -2083,7 +2083,7 @@ int fr_redis_cluster_pool_by_node_addr(fr_pool_t **pool, fr_redis_cluster_t *clu ssize_t fr_redis_cluster_node_addr_by_role(TALLOC_CTX *ctx, fr_socket_t *out[], fr_redis_cluster_t *cluster, bool is_master, bool is_slave) { - size_t in_use = rbtree_num_elements(cluster->used_nodes); + uint64_t in_use = rbtree_num_elements(cluster->used_nodes); fr_rb_tree_iter_inorder_t iter; fr_redis_cluster_node_t *node; uint8_t count; @@ -2220,7 +2220,7 @@ fr_redis_cluster_t *fr_redis_cluster_alloc(TALLOC_CTX *ctx, CONF_PAIR *cp; int af = AF_UNSPEC; /* AF of first server */ - int num_nodes; + uint64_t num_nodes; fr_redis_cluster_t *cluster; fr_assert(triggers_enabled || !trigger_prefix); diff --git a/src/lib/server/cf_file.c b/src/lib/server/cf_file.c index d22cec0b0e9..7df3f28ee86 100644 --- a/src/lib/server/cf_file.c +++ b/src/lib/server/cf_file.c @@ -536,7 +536,7 @@ static int cf_file_open(CONF_SECTION *cs, char const *filename, bool from_dir, F if (stat(filename, &my_file.buf) < 0) goto error; - file = rbtree_finddata(tree, &my_file); + file = rbtree_find_data(tree, &my_file); /* * The file was previously read by including it @@ -2373,55 +2373,6 @@ void cf_file_check_user(uid_t uid, gid_t gid) if (gid != 0) conf_check_gid = gid; } -/* - * See if any of the files have changed. - */ -int cf_file_changed(CONF_SECTION *cs, fr_rb_walker_t callback) -{ - CONF_SECTION *top, *modules; - rbtree_t *tree; - cf_file_t *file; - int rcode; - struct stat buf; - fr_rb_tree_iter_inorder_t iter; - - top = cf_root(cs); - tree = cf_data_value(cf_data_find(top, rbtree_t, "filename")); - if (!tree) return CF_FILE_ERROR; - - rcode = CF_FILE_NONE; - modules = cf_section_find(cs, "modules", NULL); - - for (file = rbtree_iter_init_inorder(&iter, tree); - file; - file = rbtree_iter_next_inorder(&iter)) { - /* - * The file doesn't exist or we can no longer read it. - */ - if (stat(file->filename, &buf) < 0) { - rcode = CF_FILE_ERROR; - rbtree_iter_done(&iter); - break; - } - - /* - * The file changed, we'll need to re-read it. - */ - if (buf.st_mtime != file->buf.st_mtime) { - if (callback(modules, file->cs)) { - rcode |= CF_FILE_MODULE; - DEBUG3("HUP: Changed module file %s", file->filename); - } else { - DEBUG3("HUP: Changed config file %s", file->filename); - rcode |= CF_FILE_CONFIG; - } - } - } - - return rcode; -} - - static char const parse_tabs[] = " "; static ssize_t cf_string_write(FILE *fp, char const *string, size_t len, fr_token_t t) diff --git a/src/lib/server/cf_file.h b/src/lib/server/cf_file.h index 847db1227d9..7d88cc3b05d 100644 --- a/src/lib/server/cf_file.h +++ b/src/lib/server/cf_file.h @@ -53,7 +53,6 @@ void cf_file_free(CONF_SECTION *cs); bool cf_file_check(CONF_SECTION *cs, char const *filename, bool check_perms); void cf_file_check_user(uid_t uid, gid_t gid); -int cf_file_changed(CONF_SECTION *cs, fr_rb_walker_t callback); /* * Config file writing diff --git a/src/lib/server/cf_util.c b/src/lib/server/cf_util.c index 30c8ac48f88..c2bd96b7ce5 100644 --- a/src/lib/server/cf_util.c +++ b/src/lib/server/cf_util.c @@ -133,12 +133,12 @@ static CONF_ITEM *cf_find(CONF_ITEM const *parent, CONF_ITEM_TYPE type, char con /* * No ident2, use the ident1 tree. */ - if (IS_WILDCARD(ident2)) return rbtree_finddata(parent->ident1, find); + if (IS_WILDCARD(ident2)) return rbtree_find_data(parent->ident1, find); /* * Both ident1 and ident2 use the ident2 tree. */ - return rbtree_finddata(parent->ident2, find); + return rbtree_find_data(parent->ident2, find); } /** Return the next child that's of the specified type with the specified identifiers @@ -411,14 +411,14 @@ CONF_ITEM *_cf_item_remove(CONF_ITEM *parent, CONF_ITEM *child) fr_dlist_remove(&parent->children, found); if (!fr_cond_assert(found == child)) return NULL; - in_ident1 = (rbtree_finddata(parent->ident1, child) == child); - if (in_ident1 && (!rbtree_deletebydata(parent->ident1, child))) { + in_ident1 = (rbtree_find_data(parent->ident1, child) == child); + if (in_ident1 && (!rbtree_delete_by_data(parent->ident1, child))) { fr_assert(0); return NULL; } - in_ident2 = (rbtree_finddata(parent->ident2, child) == child); - if (in_ident2 && (!rbtree_deletebydata(parent->ident2, child))) { + in_ident2 = (rbtree_find_data(parent->ident2, child) == child); + if (in_ident2 && (!rbtree_delete_by_data(parent->ident2, child))) { fr_assert(0); return NULL; } @@ -2068,8 +2068,8 @@ void _cf_debug(CONF_ITEM const *ci) DEBUG(" next : %p", fr_dlist_next(&ci->parent->children, ci)); DEBUG(" parent : %p", ci->parent); DEBUG(" children : %s", !fr_dlist_empty(&ci->children) ? "yes" : "no"); - DEBUG(" ident1 tree : %p (%u entries)", ci->ident1, ci->ident1 ? rbtree_num_elements(ci->ident1) : 0); - DEBUG(" ident2 tree : %p (%u entries)", ci->ident2, ci->ident2 ? rbtree_num_elements(ci->ident2) : 0); + DEBUG(" ident1 tree : %p (%" PRIu64 "entries)", ci->ident1, ci->ident1 ? rbtree_num_elements(ci->ident1) : 0); + DEBUG(" ident2 tree : %p (%" PRIu64 "entries)", ci->ident2, ci->ident2 ? rbtree_num_elements(ci->ident2) : 0); if (fr_dlist_empty(&ci->children)) return; @@ -2081,8 +2081,8 @@ void _cf_debug(CONF_ITEM const *ci) while ((child = fr_dlist_next(&ci->children, child))) { char const *in_ident1, *in_ident2; - in_ident1 = rbtree_finddata(ci->ident1, child) == child? "in ident1 " : ""; - in_ident2 = rbtree_finddata(ci->ident2, child) == child? "in ident2 " : ""; + in_ident1 = rbtree_find_data(ci->ident1, child) == child? "in ident1 " : ""; + in_ident2 = rbtree_find_data(ci->ident2, child) == child? "in ident2 " : ""; switch (child->type) { case CONF_ITEM_SECTION: diff --git a/src/lib/server/client.c b/src/lib/server/client.c index c17a98c525d..56a5991ac8b 100644 --- a/src/lib/server/client.c +++ b/src/lib/server/client.c @@ -293,7 +293,7 @@ bool client_add(RADCLIENT_LIST *clients, RADCLIENT *client) } } - old = rbtree_finddata(clients->tree[client->ipaddr.prefix], client); + old = rbtree_find_data(clients->tree[client->ipaddr.prefix], client); #endif if (old) { /* @@ -362,7 +362,7 @@ void client_delete(RADCLIENT_LIST *clients, RADCLIENT *client) if (!clients->tree[client->ipaddr.prefix]) return; - (void) rbtree_deletebydata(clients->tree[client->ipaddr.prefix], client); + (void) rbtree_delete_by_data(clients->tree[client->ipaddr.prefix], client); #endif } @@ -408,7 +408,7 @@ RADCLIENT *client_find(RADCLIENT_LIST const *clients, fr_ipaddr_t const *ipaddr, my_client.ipaddr = *ipaddr; fr_ipaddr_mask(&my_client.ipaddr, i); - client = rbtree_finddata(clients->tree[i], &my_client); + client = rbtree_find_data(clients->tree[i], &my_client); if (client) { return client; } diff --git a/src/lib/server/dl_module.c b/src/lib/server/dl_module.c index 989113ee570..4022a73af8b 100644 --- a/src/lib/server/dl_module.c +++ b/src/lib/server/dl_module.c @@ -203,7 +203,7 @@ dl_module_inst_t const *dl_module_instance_by_data(void const *data) if (dl_inst_cache.data == data) return dl_inst_cache.inst; - return rbtree_finddata(dl_module_loader->inst_data_tree, &(dl_module_inst_t){ .data = UNCONST(void *, data) }); + return rbtree_find_data(dl_module_loader->inst_data_tree, &(dl_module_inst_t){ .data = UNCONST(void *, data) }); } /** Lookup instance name via instance data @@ -310,7 +310,7 @@ static int _dl_module_free(dl_module_t *dl_module) } if (dl_module->in_tree) { - rbtree_deletebydata(dl_module_loader->module_tree, dl_module); + rbtree_delete_by_data(dl_module_loader->module_tree, dl_module); dl_module->in_tree = false; } @@ -366,7 +366,7 @@ dl_module_t const *dl_module(CONF_SECTION *conf, dl_module_t const *parent, char /* * If the module's already been loaded, increment the reference count. */ - dl_module = rbtree_finddata(dl_module_loader->module_tree, + dl_module = rbtree_find_data(dl_module_loader->module_tree, &(dl_module_t){ .dl = &(dl_t){ .name = module_name }}); if (dl_module) { talloc_free(module_name); @@ -459,7 +459,7 @@ static int _dl_module_instance_free(dl_module_inst_t *dl_inst) * Remove this instance from the tracking tree. */ fr_assert(dl_module_loader != NULL); - rbtree_deletebydata(dl_module_loader->inst_data_tree, dl_inst); + rbtree_delete_by_data(dl_module_loader->inst_data_tree, dl_inst); /* * Decrements the reference count. The module object diff --git a/src/lib/server/main_config.c b/src/lib/server/main_config.c index 5ba51db4af9..3b777bd9d8e 100644 --- a/src/lib/server/main_config.c +++ b/src/lib/server/main_config.c @@ -1285,18 +1285,5 @@ void main_config_hup(main_config_t *config) } last_hup = when; -#if 0 - rcode = cf_file_changed(cs_cache->cs, hup_callback); - if (rcode == CF_FILE_NONE) { - INFO("HUP - No files changed. Ignoring"); - return; - } - - if (rcode == CF_FILE_ERROR) { - INFO("HUP - Cannot read configuration files. Ignoring"); - return; - } -#endif - INFO("HUP - NYI in version 4"); /* Not yet implemented in v4 */ } diff --git a/src/lib/server/map_proc.c b/src/lib/server/map_proc.c index 91164107d4d..ece52d66021 100644 --- a/src/lib/server/map_proc.c +++ b/src/lib/server/map_proc.c @@ -61,10 +61,10 @@ static int _map_proc_talloc_free(map_proc_t *proc) strlcpy(find.name, proc->name, sizeof(find.name)); find.length = strlen(find.name); - found = rbtree_finddata(map_proc_root, &find); + found = rbtree_find_data(map_proc_root, &find); if (!found) return 0; - rbtree_deletebydata(map_proc_root, found); + rbtree_delete_by_data(map_proc_root, found); return 0; } @@ -90,7 +90,7 @@ map_proc_t *map_proc_find(char const *name) strlcpy(find.name, name, sizeof(find.name)); find.length = strlen(find.name); - return rbtree_finddata(map_proc_root, &find); + return rbtree_find_data(map_proc_root, &find); } /** Register a map processor diff --git a/src/lib/server/method.c b/src/lib/server/method.c index 1626a34ff63..10a43f0627f 100644 --- a/src/lib/server/method.c +++ b/src/lib/server/method.c @@ -162,7 +162,7 @@ int module_method_insert(module_method_set_t *set, module_method_id_t id, module { module_method_entry_t *found, find = { .id = id, .method = method }; - found = rbtree_finddata(set->tree, &find); + found = rbtree_find_data(set->tree, &find); if (found) { if (unlikely(found->method != method)) { fr_strerror_printf("Conflict for method id %u (old %p vs new %p)", @@ -198,7 +198,7 @@ module_method_t module_method_find(module_method_set_t *set, module_method_id_t { module_method_entry_t *found; - found = rbtree_finddata(set->tree, &(module_method_entry_t){ .id = id }); + found = rbtree_find_data(set->tree, &(module_method_entry_t){ .id = id }); if (!found) return NULL; return found->method; diff --git a/src/lib/server/module.c b/src/lib/server/module.c index 7ce86a9c667..5f6a68c0c48 100644 --- a/src/lib/server/module.c +++ b/src/lib/server/module.c @@ -646,7 +646,7 @@ module_instance_t *module_by_name(module_instance_t const *parent, char const *a inst_name = asked_name; if (inst_name[0] == '-') inst_name++; - inst = rbtree_finddata(module_instance_name_tree, + inst = rbtree_find_data(module_instance_name_tree, &(module_instance_t){ .dl_inst = &(dl_module_inst_t){ .parent = parent ? parent->dl_inst : NULL }, .name = inst_name @@ -1051,7 +1051,7 @@ module_instance_t *module_by_data(void const *data) { module_instance_t *mi; - mi = rbtree_finddata(module_instance_data_tree, + mi = rbtree_find_data(module_instance_data_tree, &(module_instance_t){ .dl_inst = &(dl_module_inst_t){ .data = UNCONST(void *, data) }, }); @@ -1412,8 +1412,8 @@ static int _module_instance_free(module_instance_t *mi) { DEBUG3("Freeing %s (%p)", mi->name, mi); - if (mi->in_name_tree) if (!fr_cond_assert(rbtree_deletebydata(module_instance_name_tree, mi))) return 1; - if (mi->in_data_tree) if (!fr_cond_assert(rbtree_deletebydata(module_instance_data_tree, mi))) return 1; + if (mi->in_name_tree) if (!fr_cond_assert(rbtree_delete_by_data(module_instance_name_tree, mi))) return 1; + if (mi->in_data_tree) if (!fr_cond_assert(rbtree_delete_by_data(module_instance_data_tree, mi))) return 1; if (mi->mutex) { /* * FIXME diff --git a/src/lib/server/state.c b/src/lib/server/state.c index 8a23a8c8bab..49edeafb2b3 100644 --- a/src/lib/server/state.c +++ b/src/lib/server/state.c @@ -260,7 +260,7 @@ static void state_entry_unlink(fr_state_tree_t *state, fr_state_entry_t *entry) fr_dlist_remove(&state->to_expire, entry); - rbtree_deletebydata(state->tree, entry); + rbtree_delete_by_data(state->tree, entry); DEBUG4("State ID %" PRIu64 " unlinked", entry->id); } @@ -558,7 +558,7 @@ static fr_state_entry_t *state_entry_find(fr_state_tree_t *state, request_t *req */ my_entry.state_comp.server_hash ^= fr_hash_string(cf_section_name2(request->server_cs)); - entry = rbtree_finddata(state->tree, &my_entry); + entry = rbtree_find_data(state->tree, &my_entry); if (entry) (void) talloc_get_type_abort(entry, fr_state_entry_t); @@ -856,7 +856,7 @@ uint64_t fr_state_entries_timeout(fr_state_tree_t *state) /** Return number of entries we're currently tracking * */ -uint32_t fr_state_entries_tracked(fr_state_tree_t *state) +uint64_t fr_state_entries_tracked(fr_state_tree_t *state) { - return (uint32_t)rbtree_num_elements(state->tree); + return rbtree_num_elements(state->tree); } diff --git a/src/lib/server/state.h b/src/lib/server/state.h index ce79c74ab02..6a75500056d 100644 --- a/src/lib/server/state.h +++ b/src/lib/server/state.h @@ -50,7 +50,7 @@ void fr_state_restore_to_child(request_t *request, void const *unique_ptr, int u */ uint64_t fr_state_entries_created(fr_state_tree_t *state); uint64_t fr_state_entries_timeout(fr_state_tree_t *state); -uint32_t fr_state_entries_tracked(fr_state_tree_t *state); +uint64_t fr_state_entries_tracked(fr_state_tree_t *state); #ifdef __cplusplus } diff --git a/src/lib/server/trigger.c b/src/lib/server/trigger.c index 7076bd2fe88..4b321ebbe55 100644 --- a/src/lib/server/trigger.c +++ b/src/lib/server/trigger.c @@ -356,7 +356,7 @@ int trigger_exec(request_t *request, CONF_SECTION const *cs, char const *name, b pthread_mutex_lock(trigger_mutex); - found = rbtree_finddata(trigger_last_fired_tree, &find); + found = rbtree_find_data(trigger_last_fired_tree, &find); if (!found) { MEM(found = talloc(NULL, trigger_last_fired_t)); found->ci = ci; diff --git a/src/lib/server/virtual_servers.c b/src/lib/server/virtual_servers.c index e3b01e75a1f..92f712d8909 100644 --- a/src/lib/server/virtual_servers.c +++ b/src/lib/server/virtual_servers.c @@ -652,7 +652,7 @@ fr_listen_t *listen_find_any(fr_listen_t *li) { if (!listen_addr_root) return false; - return rbtree_finddata(listen_addr_root, li); + return rbtree_find_data(listen_addr_root, li); } @@ -721,7 +721,7 @@ int virtual_servers_instantiate(void) fr_virtual_namespace_t find = { .namespace = virtual_servers[i]->namespace }; fr_virtual_namespace_t *found; - found = rbtree_finddata(vns_tree, &find); + found = rbtree_find_data(vns_tree, &find); if (found) { fr_assert(dict && (dict->dict == found->dict)); @@ -1722,7 +1722,7 @@ int virtual_server_section_register(virtual_server_compile_t const *entry) fr_assert(server_section_name_tree != NULL); - old = rbtree_finddata(server_section_name_tree, entry); + old = rbtree_find_data(server_section_name_tree, entry); if (old) return 0; #ifndef NDEBUG @@ -1774,7 +1774,7 @@ virtual_server_method_t const *virtual_server_section_methods(char const *name1, * define both "accounting on", and "accounting *". */ if (name2 != CF_IDENT_ANY) { - entry = rbtree_finddata(server_section_name_tree, + entry = rbtree_find_data(server_section_name_tree, &(virtual_server_compile_t) { .name = name1, .name2 = name2, @@ -1785,7 +1785,7 @@ virtual_server_method_t const *virtual_server_section_methods(char const *name1, /* * Then look up the wildcard, if we didn't find any matching name2. */ - entry = rbtree_finddata(server_section_name_tree, + entry = rbtree_find_data(server_section_name_tree, &(virtual_server_compile_t) { .name = name1, .name2 = CF_IDENT_ANY, diff --git a/src/lib/tls/engine.c b/src/lib/tls/engine.c index f370748c55e..fc143061f65 100644 --- a/src/lib/tls/engine.c +++ b/src/lib/tls/engine.c @@ -258,7 +258,7 @@ int fr_tls_engine_init(ENGINE **e_out, } else { tls_engine_t *found = NULL; - found = rbtree_finddata(tls_engines, &(tls_engine_t){ .id = id, .instance = instance }); + found = rbtree_find_data(tls_engines, &(tls_engine_t){ .id = id, .instance = instance }); if (found) { fr_strerror_printf("engine %s%s%s%salready initialised", id, instance ? " (" : "", @@ -434,7 +434,7 @@ int fr_tls_engine(ENGINE **e_out, char const *id, char const *instance, bool aut } - found = rbtree_finddata(tls_engines, &(tls_engine_t){ .id = id, .instance = instance }); + found = rbtree_find_data(tls_engines, &(tls_engine_t){ .id = id, .instance = instance }); if (!found) { if (!auto_init) goto not_init; goto do_init; @@ -454,7 +454,7 @@ void fr_tls_engine_load_builtin(void) /* * Mitigate against CrossTalk (CVE-2020-0543) */ - if (!tls_engines || !rbtree_finddata(tls_engines, &(tls_engine_t){ .id = "rdrand" })) { + if (!tls_engines || !rbtree_find_data(tls_engines, &(tls_engine_t){ .id = "rdrand" })) { ENGINE *rand_engine; ENGINE_register_all_RAND(); /* Give rand engines a chance to register */ diff --git a/src/lib/unlang/xlat_builtin.c b/src/lib/unlang/xlat_builtin.c index 585a2d80028..2c0c009e364 100644 --- a/src/lib/unlang/xlat_builtin.c +++ b/src/lib/unlang/xlat_builtin.c @@ -191,7 +191,7 @@ xlat_t *xlat_func_find(char const *in, ssize_t inlen) if (!xlat_root) return NULL; if (inlen < 0) { - return rbtree_finddata(xlat_root, &(xlat_t){ .name = in }); + return rbtree_find_data(xlat_root, &(xlat_t){ .name = in }); } if ((size_t) inlen >= sizeof(buffer)) return NULL; @@ -199,7 +199,7 @@ xlat_t *xlat_func_find(char const *in, ssize_t inlen) memcpy(buffer, in, inlen); buffer[inlen] = '\0'; - return rbtree_finddata(xlat_root, &(xlat_t){ .name = buffer }); + return rbtree_find_data(xlat_root, &(xlat_t){ .name = buffer }); } @@ -212,7 +212,7 @@ static int _xlat_func_talloc_free(xlat_t *xlat) { if (!xlat_root) return 0; - rbtree_deletebydata(xlat_root, xlat); + rbtree_delete_by_data(xlat_root, xlat); if (rbtree_num_elements(xlat_root) == 0) TALLOC_FREE(xlat_root); return 0; @@ -265,7 +265,7 @@ int xlat_register_legacy(void *mod_inst, char const *name, /* * If it already exists, replace the instance. */ - c = rbtree_finddata(xlat_root, &(xlat_t){ .name = name }); + c = rbtree_find_data(xlat_root, &(xlat_t){ .name = name }); if (c) { if (c->internal) { ERROR("%s: Cannot re-define internal expansion %s", __FUNCTION__, name); @@ -327,7 +327,7 @@ xlat_t const *xlat_register(TALLOC_CTX *ctx, char const *name, xlat_func_t func, /* * If it already exists, replace the instance. */ - c = rbtree_finddata(xlat_root, &(xlat_t){ .name = name }); + c = rbtree_find_data(xlat_root, &(xlat_t){ .name = name }); if (c) { if (c->internal) { ERROR("%s: Cannot re-define internal expansion %s", __FUNCTION__, name); @@ -466,7 +466,7 @@ void xlat_unregister(char const *name) if (!name || !xlat_root) return; - c = rbtree_finddata(xlat_root, &(xlat_t){ .name = name }); + c = rbtree_find_data(xlat_root, &(xlat_t){ .name = name }); if (!c) return; (void) talloc_get_type_abort(c, xlat_t); diff --git a/src/lib/unlang/xlat_inst.c b/src/lib/unlang/xlat_inst.c index 9dcbe5795f6..f535b032169 100644 --- a/src/lib/unlang/xlat_inst.c +++ b/src/lib/unlang/xlat_inst.c @@ -165,7 +165,7 @@ static int _xlat_inst_detach(xlat_inst_t *inst) * Remove permanent data from the instance tree. */ if (!inst->node->call.ephemeral) { - rbtree_deletebydata(xlat_inst_tree, inst); + rbtree_delete_by_data(xlat_inst_tree, inst); if (rbtree_num_elements(xlat_inst_tree) == 0) TALLOC_FREE(xlat_inst_tree); } @@ -329,7 +329,7 @@ xlat_thread_inst_t *xlat_thread_instance_find(xlat_exp_t const *node) if (node->call.ephemeral) return node->call.thread_inst; - found = rbtree_finddata(xlat_thread_inst_tree, &(xlat_thread_inst_t){ .node = node }); + found = rbtree_find_data(xlat_thread_inst_tree, &(xlat_thread_inst_t){ .node = node }); fr_assert(found); return found; diff --git a/src/lib/util/dl.c b/src/lib/util/dl.c index 89c25c8d541..94c5683e48c 100644 --- a/src/lib/util/dl.c +++ b/src/lib/util/dl.c @@ -428,7 +428,7 @@ static int _dl_free(dl_t *dl) dl->handle = NULL; - if (dl->in_tree) rbtree_deletebydata(dl->loader->tree, dl); + if (dl->in_tree) rbtree_delete_by_data(dl->loader->tree, dl); return 0; } @@ -458,7 +458,7 @@ dl_t *dl_by_name(dl_loader_t *dl_loader, char const *name, void *uctx, bool uctx * There's already something in the tree, * just return that instead. */ - dl = rbtree_finddata(dl_loader->tree, &(dl_t){ .name = name }); + dl = rbtree_find_data(dl_loader->tree, &(dl_t){ .name = name }); if (dl) { talloc_increase_ref_count(dl); return dl; diff --git a/src/lib/util/event.c b/src/lib/util/event.c index b80e9cee8de..c557eea4f79 100644 --- a/src/lib/util/event.c +++ b/src/lib/util/event.c @@ -430,7 +430,7 @@ static int8_t fr_event_pid_cmp(void const *a, void const *b) /** Return the number of file descriptors is_registered with this event loop * */ -int fr_event_list_num_fds(fr_event_list_t *el) +uint64_t fr_event_list_num_fds(fr_event_list_t *el) { if (unlikely(!el)) return -1; @@ -725,7 +725,7 @@ static int _event_fd_delete(fr_event_fd_t *ef) } } - rbtree_deletebydata(el->fds, ef); + rbtree_delete_by_data(el->fds, ef); ef->is_registered = false; } @@ -787,7 +787,7 @@ int _fr_event_fd_move(NDEBUG_LOCATION_ARGS /* * Ensure this exists */ - ef = rbtree_finddata(src->fds, &(fr_event_fd_t){ .fd = fd, .filter = filter }); + ef = rbtree_find_data(src->fds, &(fr_event_fd_t){ .fd = fd, .filter = filter }); if (unlikely(!ef)) { fr_strerror_printf("No events are registered for fd %i", fd); return -1; @@ -833,7 +833,7 @@ int _fr_event_filter_update(NDEBUG_LOCATION_ARGS struct kevent evset[10]; int count = 0; - ef = rbtree_finddata(el->fds, &(fr_event_fd_t){ .fd = fd, .filter = filter }); + ef = rbtree_find_data(el->fds, &(fr_event_fd_t){ .fd = fd, .filter = filter }); if (unlikely(!ef)) { fr_strerror_printf("No events are registered for fd %i", fd); return -1; @@ -929,7 +929,7 @@ int _fr_event_filter_insert(NDEBUG_LOCATION_ARGS } if (!ef_out || !*ef_out) { - ef = rbtree_finddata(el->fds, &(fr_event_fd_t){ .fd = fd, .filter = filter }); + ef = rbtree_find_data(el->fds, &(fr_event_fd_t){ .fd = fd, .filter = filter }); } else { ef = *ef_out; fr_assert((fd < 0) || (ef->fd == fd)); @@ -1088,7 +1088,7 @@ int fr_event_fd_delete(fr_event_list_t *el, int fd, fr_event_filter_t filter) { fr_event_fd_t *ef; - ef = rbtree_finddata(el->fds, &(fr_event_fd_t){ .fd = fd, .filter = filter }); + ef = rbtree_find_data(el->fds, &(fr_event_fd_t){ .fd = fd, .filter = filter }); if (unlikely(!ef)) { fr_strerror_printf("No events are registered for fd %i", fd); return -1; @@ -1126,7 +1126,7 @@ int fr_event_fd_armour(fr_event_list_t *el, int fd, fr_event_filter_t filter, ui { fr_event_fd_t *ef; - ef = rbtree_finddata(el->fds, &(fr_event_fd_t){ .fd = fd, .filter = filter }); + ef = rbtree_find_data(el->fds, &(fr_event_fd_t){ .fd = fd, .filter = filter }); if (unlikely(!ef)) { fr_strerror_printf("No events are registered for fd %i", fd); return -1; @@ -1156,7 +1156,7 @@ int fr_event_fd_unarmour(fr_event_list_t *el, int fd, fr_event_filter_t filter, { fr_event_fd_t *ef; - ef = rbtree_finddata(el->fds, &(fr_event_fd_t){ .fd = fd, .filter = filter }); + ef = rbtree_find_data(el->fds, &(fr_event_fd_t){ .fd = fd, .filter = filter }); if (unlikely(!ef)) { fr_strerror_printf("No events are registered for fd %i", fd); return -1; @@ -2425,7 +2425,7 @@ void fr_event_report(fr_event_list_t *el, fr_time_t now, void *uctx) fr_event_counter_t find = { .file = ev->file, .line = ev->line }; fr_event_counter_t *counter; - counter = rbtree_finddata(locations[i], &find); + counter = rbtree_find_data(locations[i], &find); if (!counter) { counter = talloc(locations[i], fr_event_counter_t); if (!counter) goto oom; @@ -2445,7 +2445,7 @@ void fr_event_report(fr_event_list_t *el, fr_time_t now, void *uctx) pthread_mutex_lock(&print_lock); EVENT_DEBUG("Event list %p", el); - EVENT_DEBUG(" fd events : %u", fr_event_list_num_fds(el)); + EVENT_DEBUG(" fd events : %"PRIu64, fr_event_list_num_fds(el)); EVENT_DEBUG(" events last iter : %u", el->num_fd_events); EVENT_DEBUG(" num timer events : %u", fr_event_list_num_timers(el)); diff --git a/src/lib/util/event.h b/src/lib/util/event.h index 7c6f96b03b9..54316ceec6d 100644 --- a/src/lib/util/event.h +++ b/src/lib/util/event.h @@ -195,7 +195,7 @@ typedef union { fr_event_vnode_func_t vnode; //!< vnode callback functions. } fr_event_funcs_t; -int fr_event_list_num_fds(fr_event_list_t *el); +uint64_t fr_event_list_num_fds(fr_event_list_t *el); int fr_event_list_num_timers(fr_event_list_t *el); int fr_event_list_kq(fr_event_list_t *el); fr_time_t fr_event_list_time(fr_event_list_t *el) CC_HINT(nonnull); diff --git a/src/lib/util/rbtree.c b/src/lib/util/rbtree.c index 3eaa9af23bf..13066c3fbb7 100644 --- a/src/lib/util/rbtree.c +++ b/src/lib/util/rbtree.c @@ -41,7 +41,7 @@ struct rbtree_s { ///< the structure being inserted. char const *type; //!< Talloc type to check elements against. - uint64_t num_elements; //!< How many elements are inside the tree. + size_t num_elements; //!< How many elements are inside the tree. fr_rb_cmp_t compare; //!< The comparator. fr_rb_free_t free; //!< Free function called when a node is freed. @@ -577,11 +577,11 @@ void rbtree_delete(rbtree_t *tree, fr_rb_node_t *z) rbtree_delete_internal(tree, z, false); } -/** Delete a node from the tree, based on given data, which MUST have come from rbtree_finddata(). +/** Delete a node from the tree, based on given data, which MUST have come from rbtree_find_data(). * * */ -bool rbtree_deletebydata(rbtree_t *tree, void const *data) +bool rbtree_delete_by_data(rbtree_t *tree, void const *data) { fr_rb_node_t *node; @@ -628,7 +628,7 @@ fr_rb_node_t *rbtree_find(rbtree_t *tree, void const *data) * * @hidecallergraph */ -void *rbtree_finddata(rbtree_t *tree, void const *data) +void *rbtree_find_data(rbtree_t *tree, void const *data) { fr_rb_node_t *x; @@ -640,220 +640,21 @@ void *rbtree_finddata(rbtree_t *tree, void const *data) return x->data; } -/** Walk the tree, Pre-order +/** Return how many nodes there are in a tree * - * We call ourselves recursively for each function, but that's OK, - * as the stack is only log(N) deep, which is ~12 entries deep. + * @param[in] tree to return node count for. */ -static int walk_node_pre_order(fr_rb_node_t *x, fr_rb_walker_t compare, void *uctx) -{ - int ret; - fr_rb_node_t *left, *right; - - left = x->left; - right = x->right; - - ret = compare(x->data, uctx); - if (ret != 0) return ret; - - if (left != NIL) { - ret = walk_node_pre_order(left, compare, uctx); - if (ret != 0) return ret; - } - - if (right != NIL) { - ret = walk_node_pre_order(right, compare, uctx); - if (ret != 0) return ret; - } - - return 0;/* we know everything returned zero */ -} - -/** rbtree_in_order - * - */ -static int walk_node_in_order(fr_rb_node_t *x, fr_rb_walker_t compare, void *uctx) -{ - int ret; - fr_rb_node_t *right; - - if (x->left != NIL) { - ret = walk_node_in_order(x->left, compare, uctx); - if (ret != 0) return ret; - } - - right = x->right; - - ret = compare(x->data, uctx); - if (ret != 0) return ret; - - if (right != NIL) { - ret = walk_node_in_order(right, compare, uctx); - if (ret != 0) return ret; - } - - return 0; /* we know everything returned zero */ -} - - -/** rbtree_post_order - * - */ -static int walk_node_post_order(fr_rb_node_t *x, fr_rb_walker_t compare, void *uctx) -{ - int ret; - - if (x->left != NIL) { - ret = walk_node_post_order(x->left, compare, uctx); - if (ret != 0) return ret; - } - - if (x->right != NIL) { - ret = walk_node_post_order(x->right, compare, uctx); - if (ret != 0) return ret; - } - - ret = compare(x->data, uctx); - if (ret != 0) return ret; - - return 0; /* we know everything returned zero */ -} - -/** rbtree_delete_order - * - * This executes an rbtree_in_order-like walk that adapts to changes in the - * tree above it, which may occur because we allow the compare to - * tell us to delete the current node. - * - * The compare should return: - * - * < 0 - on error - * 0 - continue walking, don't delete the node - * 1 - delete the node and stop walking - * 2 - delete the node and continue walking - */ -static int walk_delete_order(rbtree_t *tree, fr_rb_walker_t compare, void *uctx) -{ - fr_rb_node_t *solid, *x; - int ret = 0; - - /* Keep track of last node that refused deletion. */ - solid = NIL; - while (solid == NIL) { - x = tree->root; - if (x == NIL) break; - descend: - while (x->left != NIL) { - x = x->left; - } - visit: - ret = compare(x->data, uctx); - if (ret < 0) { - return ret; - } - if (ret) { - rbtree_delete_internal(tree, x, true); - if (ret != 2) { - return ret; - } - } else { - solid = x; - } - } - if (solid != NIL) { - x = solid; - if (x->right != NIL) { - x = x->right; - goto descend; - } - while (x->parent != NIL) { - if (x->parent->left == x) { - x = x->parent; - goto visit; - } - x = x->parent; - } - } - return ret; -} - - -/* - * walk the entire tree. The compare function CANNOT modify - * the tree. - * - * The compare function should return 0 to continue walking. - * Any other value stops the walk, and is returned. - */ -int rbtree_walk(rbtree_t *tree, fr_rb_order_t order, fr_rb_walker_t compare, void *uctx) -{ - int ret; - - if (tree->root == NIL) return 0; - - if (tree->lock) pthread_mutex_lock(&tree->mutex); - - switch (order) { - case RBTREE_PRE_ORDER: - ret = walk_node_pre_order(tree->root, compare, uctx); - break; - - case RBTREE_IN_ORDER: - ret = walk_node_in_order(tree->root, compare, uctx); - break; - - case RBTREE_POST_ORDER: - ret = walk_node_post_order(tree->root, compare, uctx); - break; - - case RBTREE_DELETE_ORDER: - ret = walk_delete_order(tree, compare, uctx); - break; - - default: - ret = -1; - break; - } - - if (tree->lock) pthread_mutex_unlock(&tree->mutex); - return ret; -} - -uint32_t rbtree_num_elements(rbtree_t *tree) +uint64_t rbtree_num_elements(rbtree_t *tree) { return tree->num_elements; } -typedef struct { - size_t idx; - void **data; -} rbtree_flatten_ctx_t; - -static int _flatten_cb(void *data, void *uctx) -{ - rbtree_flatten_ctx_t *ctx = uctx; - ctx->data[ctx->idx++] = data; - return 0; -} - - - -/* - * Given a Node, return the data. - */ -void *rbtree_node2data(UNUSED rbtree_t *tree, fr_rb_node_t *node) -{ - if (!node) return NULL; - - return node->data; -} - /** Initialise an in-order iterator * * @note If iteration ends early because of a loop condition #rbtree_iter_done must be called. * - * @param[out] iter to initialise. - * @param[in] tree to iterate over. + * @param[out] iter to initialise. + * @param[in] tree to iterate over. * @return * - The first node. Mutex will be held. * - NULL if the tree is empty. @@ -960,8 +761,8 @@ void rbtree_iter_delete_inorder(fr_rb_tree_iter_inorder_t *iter) * * @note If iteration ends early because of a loop condition #rbtree_iter_done must be called. * - * @param[out] iter to initialise. - * @param[in] tree to iterate over. + * @param[out] iter to initialise. + * @param[in] tree to iterate over. * @return * - The first node. Mutex will be held. * - NULL if the tree is empty. @@ -1044,8 +845,8 @@ void *rbtree_iter_next_preorder(fr_rb_tree_iter_preorder_t *iter) * * @note If iteration ends early because of a loop condition #rbtree_iter_done must be called. * - * @param[out] iter to initialise. - * @param[in] tree to iterate over. + * @param[out] iter to initialise. + * @param[in] tree to iterate over. * @return * - The first node. Mutex will be held. * - NULL if the tree is empty. @@ -1132,17 +933,18 @@ void *rbtree_iter_next_postorder(fr_rb_tree_iter_postorder_t *iter) return x->data; } -#define DEF_RBTREE_FLATTEN_FUNC(_order) -ssize_t rbtree_flatten_##_order(TALLOC_CTX *ctx, void **out[], rbtree_t *tree) \ +#define DEF_RBTREE_FLATTEN_FUNC(_order) \ +int rbtree_flatten_##_order(TALLOC_CTX *ctx, void **out[], rbtree_t *tree) \ { \ - uint32_t num = rbtree_num_elements(tree), i; \ + uint64_t num = rbtree_num_elements(tree), i; \ fr_rb_tree_iter_##_order##_t iter; \ void *item, **list; \ - if (unlikely(!(list = talloc_array(ctx, void *, num)))) return -1; + if (unlikely(!(list = talloc_array(ctx, void *, num)))) return -1; \ for (item = rbtree_iter_init_##_order(&iter, tree), i = 0; \ item; \ item = rbtree_iter_next_##_order(&iter), i++) list[i] = item; \ - return list; \ + *out = list; \ + return 0; \ } DEF_RBTREE_FLATTEN_FUNC(preorder) DEF_RBTREE_FLATTEN_FUNC(postorder) diff --git a/src/lib/util/rbtree.h b/src/lib/util/rbtree.h index f62a0ff68e7..857318fe70a 100644 --- a/src/lib/util/rbtree.h +++ b/src/lib/util/rbtree.h @@ -37,13 +37,6 @@ extern "C" { /* rbtree.c */ typedef struct rbtree_s rbtree_t; -/* callback order for walking */ -typedef enum { - RBTREE_PRE_ORDER, - RBTREE_IN_ORDER, - RBTREE_POST_ORDER, -} fr_rb_order_t; - /* Red-Black tree description */ typedef enum { BLACK, @@ -66,7 +59,6 @@ struct fr_rb_node_s { #define RBTREE_FLAG_LOCK (1 << 1) typedef int (*fr_rb_cmp_t)(void const *one, void const *two); -typedef int (*fr_rb_walker_t)(void *data, void *uctx); typedef void (*fr_rb_free_t)(void *data); #ifndef STABLE_COMPARE @@ -135,34 +127,23 @@ fr_rb_node_t *rbtree_insert_node(rbtree_t *tree, void *data) CC_HINT(nonnull); void rbtree_delete(rbtree_t *tree, fr_rb_node_t *z) CC_HINT(nonnull); -bool rbtree_deletebydata(rbtree_t *tree, void const *data) CC_HINT(nonnull); +bool rbtree_delete_by_data(rbtree_t *tree, void const *data) CC_HINT(nonnull); fr_rb_node_t *rbtree_find(rbtree_t *tree, void const *data) CC_HINT(nonnull); /** @hidecallergraph */ -void *rbtree_finddata(rbtree_t *tree, void const *data) CC_HINT(nonnull); - -uint32_t rbtree_num_elements(rbtree_t *tree) CC_HINT(nonnull); +void *rbtree_find_data(rbtree_t *tree, void const *data) CC_HINT(nonnull); -void *rbtree_node2data(rbtree_t *tree, fr_rb_node_t *node); +uint64_t rbtree_num_elements(rbtree_t *tree) CC_HINT(nonnull); -/* - * The callback should be declared as: - * int callback(void *context, void *data) - * - * The "context" is some user-defined context. - * The "data" is the pointer to the user data in the node, - * NOT the node itself. - * - * It should return 0 if all is OK, and !0 for any error. - * The walking will stop on any error. - * - * Except with RBTREE_DELETE_ORDER, where the callback should return <0 for - * errors, and may return 1 to delete the current node and halt, - * or 2 to delete the current node and continue. This may be - * used to batch-delete select nodes from a locked rbtree. +/** Given a Node, return the data */ -int rbtree_walk(rbtree_t *tree, fr_rb_order_t order, fr_rb_walker_t compare, void *uctx); +static inline void *rbtree_node_to_data(UNUSED rbtree_t *tree, fr_rb_node_t *node) +{ + if (!node) return NULL; + + return node->data; +} /** Iterator structure for in-order traversal of an rbtree */ @@ -214,13 +195,11 @@ void *rbtree_iter_next_postorder(fr_rb_tree_iter_postorder_t *iter) CC_HINT(non )) -ssize_t rbtree_flatten_inorder(TALLOC_CTX *ctx, void **out[], rbtree_t *tree); - -ssize_t rbtree_flatten_preorder(TALLOC_CTX *ctx, void **out[], rbtree_t *tree); - -ssize_t rbtree_flatten_postorder(TALLOC_CTX *ctx, void **out[], rbtree_t *tree); +int rbtree_flatten_inorder(TALLOC_CTX *ctx, void **out[], rbtree_t *tree); +int rbtree_flatten_preorder(TALLOC_CTX *ctx, void **out[], rbtree_t *tree); +int rbtree_flatten_postorder(TALLOC_CTX *ctx, void **out[], rbtree_t *tree); #ifdef __cplusplus } #endif diff --git a/src/modules/proto_bfd/proto_bfd.c b/src/modules/proto_bfd/proto_bfd.c index 67b9a0f2635..789e250d97d 100644 --- a/src/modules/proto_bfd/proto_bfd.c +++ b/src/modules/proto_bfd/proto_bfd.c @@ -608,7 +608,7 @@ static bfd_state_t *bfd_new_session(bfd_socket_t *sock, int sockfd, session->pthread_id = pthread_self(); } else { if (!bfd_pthread_create(session)) { - rbtree_deletebydata(sock->session_tree, session); + rbtree_delete_by_data(sock->session_tree, session); talloc_free(session); return NULL; } @@ -1485,7 +1485,7 @@ static int bfd_socket_recv(rad_listen_t *listener) fr_ipaddr_from_sockaddr(&my_session.socket.inet.dst_ipaddr, &my_session.socket.inet.dst_port, &src, sizeof_src); - session = rbtree_finddata(sock->session_tree, &my_session); + session = rbtree_find_data(sock->session_tree, &my_session); if (!session) { DEBUG("BFD unknown peer"); return 0; @@ -1587,7 +1587,7 @@ static int bfd_init_sessions(CONF_SECTION *cs, bfd_socket_t *sock, int sockfd) my_session.socket.inet.dst_ipaddr = ipaddr; my_session.socket.inet.dst_port = port; - if (rbtree_finddata(sock->session_tree, &my_session) != NULL) { + if (rbtree_find_data(sock->session_tree, &my_session) != NULL) { cf_log_err(ci, "Peers must have unique IP addresses"); return -1; } diff --git a/src/modules/proto_ldap_sync/sync.c b/src/modules/proto_ldap_sync/sync.c index c5c88258153..45736102875 100644 --- a/src/modules/proto_ldap_sync/sync.c +++ b/src/modules/proto_ldap_sync/sync.c @@ -774,7 +774,7 @@ int sync_demux(int *sync_id, fr_ldap_connection_t *conn) if (!sync || (sync->msgid != msgid)) { find.msgid = msgid; - sync = rbtree_finddata(tree, &find); + sync = rbtree_find_data(tree, &find); if (!sync) { WARN("Ignoring msgid %i, doesn't match any outstanding syncs", find.msgid); @@ -876,7 +876,7 @@ static int _sync_state_free(sync_state_t *sync) * Tell the remote server to stop sending results */ ldap_abandon_ext(sync->conn->handle, sync->msgid, NULL, NULL); - rbtree_deletebydata(tree, &find); + rbtree_delete_by_data(tree, &find); return 0; } @@ -918,7 +918,7 @@ void sync_state_destroy(fr_ldap_connection_t *conn, int msgid) find.msgid = msgid; - sync = rbtree_finddata(tree, &find); + sync = rbtree_find_data(tree, &find); talloc_free(sync); /* Will inform the server */ } @@ -938,7 +938,7 @@ sync_config_t const *sync_state_config_get(fr_ldap_connection_t *conn, int msgid find.msgid = msgid; - sync = rbtree_finddata(tree, &find); + sync = rbtree_find_data(tree, &find); return sync->config; } diff --git a/src/modules/rlm_cache/drivers/rlm_cache_rbtree/rlm_cache_rbtree.c b/src/modules/rlm_cache/drivers/rlm_cache_rbtree/rlm_cache_rbtree.c index 16d091ea3c8..e86b71733ae 100644 --- a/src/modules/rlm_cache/drivers/rlm_cache_rbtree/rlm_cache_rbtree.c +++ b/src/modules/rlm_cache/drivers/rlm_cache_rbtree/rlm_cache_rbtree.c @@ -175,14 +175,14 @@ static cache_status_t cache_entry_find(rlm_cache_entry_t **out, c = fr_heap_peek(driver->heap); if (c && (c->expires < fr_time_to_unix_time(request->packet->timestamp))) { fr_heap_extract(driver->heap, c); - rbtree_deletebydata(driver->cache, c); + rbtree_delete_by_data(driver->cache, c); talloc_free(c); } /* * Is there an entry for this key? */ - c = rbtree_finddata(driver->cache, &(rlm_cache_entry_t){ .key = key, .key_len = key_len }); + c = rbtree_find_data(driver->cache, &(rlm_cache_entry_t){ .key = key, .key_len = key_len }); if (!c) { *out = NULL; return CACHE_MISS; @@ -207,11 +207,11 @@ static cache_status_t cache_entry_expire(UNUSED rlm_cache_config_t const *config if (!request) return CACHE_ERROR; - c = rbtree_finddata(driver->cache, &(rlm_cache_entry_t){ .key = key, .key_len = key_len }); + c = rbtree_find_data(driver->cache, &(rlm_cache_entry_t){ .key = key, .key_len = key_len }); if (!c) return CACHE_MISS; fr_heap_extract(driver->heap, c); - rbtree_deletebydata(driver->cache, c); + rbtree_delete_by_data(driver->cache, c); talloc_free(c); return CACHE_OK; @@ -250,7 +250,7 @@ static cache_status_t cache_entry_insert(rlm_cache_config_t const *config, void } if (fr_heap_insert(driver->heap, UNCONST(rlm_cache_entry_t *, c)) < 0) { - rbtree_deletebydata(driver->cache, c); + rbtree_delete_by_data(driver->cache, c); RERROR("Failed adding entry to expiry heap"); return CACHE_ERROR; @@ -281,7 +281,7 @@ static cache_status_t cache_entry_set_ttl(UNUSED rlm_cache_config_t const *confi } if (fr_heap_insert(driver->heap, c) < 0) { - rbtree_deletebydata(driver->cache, c); /* make sure we don't leak entries... */ + rbtree_delete_by_data(driver->cache, c); /* make sure we don't leak entries... */ RERROR("Failed updating entry TTL. Entry was forcefully expired"); return CACHE_ERROR; } @@ -294,7 +294,7 @@ static cache_status_t cache_entry_set_ttl(UNUSED rlm_cache_config_t const *confi * * @copydetails cache_entry_count_t */ -static uint32_t cache_entry_count(UNUSED rlm_cache_config_t const *config, void *instance, +static uint64_t cache_entry_count(UNUSED rlm_cache_config_t const *config, void *instance, request_t *request, UNUSED void *handle) { rlm_cache_rbtree_t *driver = talloc_get_type_abort(instance, rlm_cache_rbtree_t); diff --git a/src/modules/rlm_cache/rlm_cache.h b/src/modules/rlm_cache/rlm_cache.h index e4bb7531929..4119e4e815a 100644 --- a/src/modules/rlm_cache/rlm_cache.h +++ b/src/modules/rlm_cache/rlm_cache.h @@ -217,7 +217,7 @@ typedef cache_status_t (*cache_entry_set_ttl_t)(rlm_cache_config_t const *config * #cache_acquire_t callback was provided. * @return number of entries in the cache. */ -typedef uint32_t (*cache_entry_count_t)(rlm_cache_config_t const *config, void *instance, +typedef uint64_t (*cache_entry_count_t)(rlm_cache_config_t const *config, void *instance, request_t *request, void *handle); /** Acquire a handle to access the cache diff --git a/src/modules/rlm_csv/rlm_csv.c b/src/modules/rlm_csv/rlm_csv.c index b82613690b0..71119bed26c 100644 --- a/src/modules/rlm_csv/rlm_csv.c +++ b/src/modules/rlm_csv/rlm_csv.c @@ -183,7 +183,7 @@ static rlm_csv_entry_t *find_entry(rlm_csv_t const *inst, fr_value_box_t const * memcpy(&my_e.key, &key, sizeof(key)); /* const issues */ - return rbtree_finddata(inst->tree, &my_e); + return rbtree_find_data(inst->tree, &my_e); } static bool insert_entry(CONF_SECTION *conf, rlm_csv_t *inst, rlm_csv_entry_t *e, int lineno) diff --git a/src/modules/rlm_files/rlm_files.c b/src/modules/rlm_files/rlm_files.c index 911df2a8acb..f395f0a6b06 100644 --- a/src/modules/rlm_files/rlm_files.c +++ b/src/modules/rlm_files/rlm_files.c @@ -265,7 +265,7 @@ static int getusersfile(TALLOC_CTX *ctx, char const *filename, rbtree_t **ptree) * for a matching list header already in the tree. */ search_list.name = entry->name; - user_list = rbtree_finddata(tree, &search_list); + user_list = rbtree_find_data(tree, &search_list); if (!user_list) { user_list = talloc_zero(ctx, PAIR_LIST_LIST); pairlist_list_init(user_list); @@ -328,10 +328,10 @@ static unlang_action_t file_common(rlm_rcode_t *p_result, rlm_files_t const *ins if (!tree) RETURN_MODULE_NOOP; my_list.name = name; - user_list = rbtree_finddata(tree, &my_list); + user_list = rbtree_find_data(tree, &my_list); user_pl = (user_list) ? fr_dlist_head(&user_list->head) : NULL; my_list.name = "DEFAULT"; - default_list = rbtree_finddata(tree, &my_list); + default_list = rbtree_find_data(tree, &my_list); default_pl = (default_list) ? fr_dlist_head(&default_list->head) : NULL; /* diff --git a/src/modules/rlm_icmp/rlm_icmp.c b/src/modules/rlm_icmp/rlm_icmp.c index 4753849ab45..8bf089fbf41 100644 --- a/src/modules/rlm_icmp/rlm_icmp.c +++ b/src/modules/rlm_icmp/rlm_icmp.c @@ -135,7 +135,7 @@ static xlat_action_t xlat_icmp_resume(TALLOC_CTX *ctx, fr_dcursor_t *out, MEM(vb = fr_value_box_alloc(ctx, FR_TYPE_BOOL, NULL, false)); vb->vb_bool = echo->replied; - (void) rbtree_deletebydata(thread->t->tree, echo); + (void) rbtree_delete_by_data(thread->t->tree, echo); talloc_free(echo); fr_dcursor_insert(out, vb); @@ -153,7 +153,7 @@ static void xlat_icmp_cancel(request_t *request, UNUSED void *xlat_inst, void *x RDEBUG2("Cancelling ICMP request for %pV (counter=%d)", echo->ip, echo->counter); - (void) rbtree_deletebydata(thread->t->tree, echo); + (void) rbtree_delete_by_data(thread->t->tree, echo); talloc_free(echo); } @@ -233,7 +233,7 @@ static xlat_action_t xlat_icmp(TALLOC_CTX *ctx, UNUSED fr_dcursor_t *out, if (unlang_xlat_event_timeout_add(request, _xlat_icmp_timeout, echo, fr_time() + inst->timeout) < 0) { RPEDEBUG("Failed adding timeout"); - (void) rbtree_deletebydata(thread->t->tree, echo); + (void) rbtree_delete_by_data(thread->t->tree, echo); talloc_free(echo); return XLAT_ACTION_FAIL; } @@ -270,14 +270,14 @@ static xlat_action_t xlat_icmp(TALLOC_CTX *ctx, UNUSED fr_dcursor_t *out, rcode = sendto(thread->t->fd, &icmp, sizeof(icmp), 0, (struct sockaddr *) &dst, salen); if (rcode < 0) { REDEBUG("Failed sending ICMP request to %pV: %s", echo->ip, fr_syserror(errno)); - (void) rbtree_deletebydata(thread->t->tree, echo); + (void) rbtree_delete_by_data(thread->t->tree, echo); talloc_free(echo); return XLAT_ACTION_FAIL; } if ((size_t) rcode < sizeof(icmp)) { REDEBUG("Failed sending entire ICMP packet"); - (void) rbtree_deletebydata(thread->t->tree, echo); + (void) rbtree_delete_by_data(thread->t->tree, echo); talloc_free(echo); return XLAT_ACTION_FAIL; } @@ -365,13 +365,13 @@ static void mod_icmp_read(UNUSED fr_event_list_t *el, UNUSED int sockfd, UNUSED * Look up the packet by the fields which determine *our* ICMP packets. */ my_echo.counter = icmp->counter; - echo = rbtree_finddata(t->tree, &my_echo); + echo = rbtree_find_data(t->tree, &my_echo); if (!echo) { DEBUG("Can't find packet counter=%d in tree", icmp->counter); return; } - (void) rbtree_deletebydata(t->tree, echo); + (void) rbtree_delete_by_data(t->tree, echo); /* * We have a reply! diff --git a/src/modules/rlm_radius/track.c b/src/modules/rlm_radius/track.c index 4537cefbb8d..0926a5f08f8 100644 --- a/src/modules/rlm_radius/track.c +++ b/src/modules/rlm_radius/track.c @@ -241,7 +241,7 @@ int radius_track_entry_release( * This entry MAY be in a subtree. If so, delete * it. */ - if (tt->subtree[te->id]) (void) rbtree_deletebydata(tt->subtree[te->id], te); + if (tt->subtree[te->id]) (void) rbtree_delete_by_data(tt->subtree[te->id], te); goto done; } @@ -255,7 +255,7 @@ int radius_track_entry_release( * Delete it from the tracking subtree. */ fr_assert(tt->subtree[te->id] != NULL); - (void) rbtree_deletebydata(tt->subtree[te->id], te); + (void) rbtree_delete_by_data(tt->subtree[te->id], te); /* * Try to free memory if the system gets idle. If the @@ -297,7 +297,7 @@ int radius_track_entry_update(radius_track_entry_t *te, uint8_t const *vector) /* * The authentication vector may have changed. */ - if (tt->subtree[te->id]) (void) rbtree_deletebydata(tt->subtree[te->id], te); + if (tt->subtree[te->id]) (void) rbtree_delete_by_data(tt->subtree[te->id], te); memcpy(te->vector, vector, sizeof(te->vector)); @@ -362,7 +362,7 @@ radius_track_entry_t *radius_track_entry_find(radius_track_t *tt, uint8_t packet */ memcpy(&my_te.vector, vector, sizeof(my_te.vector)); - te = rbtree_finddata(tt->subtree[packet_id], &my_te); + te = rbtree_find_data(tt->subtree[packet_id], &my_te); /* * Not found, the packet MAY have been allocated in the diff --git a/src/modules/rlm_securid/mem.c b/src/modules/rlm_securid/mem.c index eb44a3d15a2..f3643705f52 100644 --- a/src/modules/rlm_securid/mem.c +++ b/src/modules/rlm_securid/mem.c @@ -262,7 +262,7 @@ static SECURID_SESSION *securid_sessionlist_delete(rlm_securid_t *inst, SECURID_ static void securid_sessionlist_clean_expired(rlm_securid_t *inst, request_t *request, time_t timestamp) { - int num_sessions; + uint64_t num_sessions; SECURID_SESSION *session; num_sessions = rbtree_num_elements(inst->session_tree); diff --git a/src/modules/rlm_sigtran/sccp.c b/src/modules/rlm_sigtran/sccp.c index be98cac4978..99f62a5c4f3 100644 --- a/src/modules/rlm_sigtran/sccp.c +++ b/src/modules/rlm_sigtran/sccp.c @@ -81,7 +81,7 @@ static void sigtran_tcap_timeout(void *data) /* * Remove the outstanding transaction */ - if (!rbtree_deletebydata(txn_tree, txn)) ERROR("Transaction removed before timeout"); + if (!rbtree_delete_by_data(txn_tree, txn)) ERROR("Transaction removed before timeout"); txn->response.type = SIGTRAN_RESPONSE_FAIL; @@ -248,7 +248,7 @@ static int sigtran_tcap_incoming(struct msgb *msg, UNUSED unsigned int length, U /* * Lookup the transaction in our tree of outstanding transactions */ - found = rbtree_finddata(txn_tree, &find); + found = rbtree_find_data(txn_tree, &find); if (!found) { /* * Not an error, could be a retransmission @@ -256,7 +256,7 @@ static int sigtran_tcap_incoming(struct msgb *msg, UNUSED unsigned int length, U ERROR("No outstanding transaction with DTID %u Invoke ID %u", find.ctx.otid, find.ctx.invoke_id); return 0; } - if (!rbtree_deletebydata(txn_tree, found)) { /* Remove the outstanding transaction */ + if (!rbtree_delete_by_data(txn_tree, found)) { /* Remove the outstanding transaction */ ERROR("Failed removing transaction"); fr_assert(0); } diff --git a/src/modules/rlm_stats/rlm_stats.c b/src/modules/rlm_stats/rlm_stats.c index 9c40d41b952..3ecfc28af3e 100644 --- a/src/modules/rlm_stats/rlm_stats.c +++ b/src/modules/rlm_stats/rlm_stats.c @@ -117,7 +117,7 @@ static void coalesce(uint64_t final_stats[FR_RADIUS_MAX_PACKET_CODE], rlm_stats_ * Bootstrap with my statistics, where we don't need a * lock. */ - stats = rbtree_finddata(*tree, mydata); + stats = rbtree_find_data(*tree, mydata); if (!stats) { memset(final_stats, 0, sizeof(uint64_t) * FR_RADIUS_MAX_PACKET_CODE); } else { @@ -136,7 +136,7 @@ static void coalesce(uint64_t final_stats[FR_RADIUS_MAX_PACKET_CODE], rlm_stats_ if (other == t) continue; tree = (rbtree_t **) (((uint8_t *) other) + tree_offset); - stats = rbtree_finddata(*tree, mydata); + stats = rbtree_find_data(*tree, mydata); if (!stats) { continue; } @@ -186,7 +186,7 @@ static unlang_action_t CC_HINT(nonnull) mod_stats(rlm_rcode_t *p_result, module_ * Update source statistics */ mydata.ipaddr = request->packet->socket.inet.src_ipaddr; - stats = rbtree_finddata(t->src, &mydata); + stats = rbtree_find_data(t->src, &mydata); if (!stats) { MEM(stats = talloc_zero(t, rlm_stats_data_t)); @@ -204,7 +204,7 @@ static unlang_action_t CC_HINT(nonnull) mod_stats(rlm_rcode_t *p_result, module_ * Update destination statistics */ mydata.ipaddr = request->packet->socket.inet.dst_ipaddr; - stats = rbtree_finddata(t->dst, &mydata); + stats = rbtree_find_data(t->dst, &mydata); if (!stats) { MEM(stats = talloc_zero(t, rlm_stats_data_t)); diff --git a/src/protocols/radius/list.c b/src/protocols/radius/list.c index ac3303bba1c..9d80549a73f 100644 --- a/src/protocols/radius/list.c +++ b/src/protocols/radius/list.c @@ -331,7 +331,7 @@ fr_radius_packet_t *fr_packet_list_find(fr_packet_list_t *pl, fr_radius_packet_t { if (!pl || !request) return 0; - return rbtree_finddata(pl->tree, request); + return rbtree_find_data(pl->tree, request); } @@ -373,7 +373,7 @@ fr_radius_packet_t *fr_packet_list_find_byreply(fr_packet_list_t *pl, fr_radius_ my_request.id = reply->id; request = &my_request; - return rbtree_finddata(pl->tree, request); + return rbtree_find_data(pl->tree, request); } @@ -727,9 +727,9 @@ fr_radius_packet_t *fr_packet_list_recv(fr_packet_list_t *pl, fd_set *set, uint3 return NULL; } -uint32_t fr_packet_list_num_incoming(fr_packet_list_t *pl) +uint64_t fr_packet_list_num_incoming(fr_packet_list_t *pl) { - uint32_t num_elements; + uint64_t num_elements; if (!pl) return 0; diff --git a/src/protocols/radius/list.h b/src/protocols/radius/list.h index 273682f0424..5481918534a 100644 --- a/src/protocols/radius/list.h +++ b/src/protocols/radius/list.h @@ -57,7 +57,7 @@ bool fr_packet_list_socket_thaw(fr_packet_list_t *pl, int sockfd); int fr_packet_list_fd_set(fr_packet_list_t *pl, fd_set *set); fr_radius_packet_t *fr_packet_list_recv(fr_packet_list_t *pl, fd_set *set, uint32_t max_attributes, bool require_ma); -uint32_t fr_packet_list_num_incoming(fr_packet_list_t *pl); +uint64_t fr_packet_list_num_incoming(fr_packet_list_t *pl); uint32_t fr_packet_list_num_outgoing(fr_packet_list_t *pl); void fr_packet_header_log(fr_log_t const *log, fr_radius_packet_t *packet, bool received); diff --git a/src/tests/rbmonkey.c b/src/tests/rbmonkey.c index eb39777fc68..c6b3a1677fc 100644 --- a/src/tests/rbmonkey.c +++ b/src/tests/rbmonkey.c @@ -168,7 +168,7 @@ again: * For testing deletebydata instead for (i = 0; i < n; i++) { - if (filter_cb(&vals[i], &thresh) == 2) rbtree_deletebydata(t, &vals[i]); + if (filter_cb(&vals[i], &thresh) == 2) rbtree_delete_by_data(t, &vals[i]); } *