ircd: hash: use an irc_radixtree for storing resv's

This commit is contained in:
William Pitcock 2016-01-09 04:59:02 -06:00
parent 5c7c7d65c2
commit 46be39faab
6 changed files with 32 additions and 62 deletions

View file

@ -43,6 +43,7 @@
#include "reject.h"
#include "hash.h"
#include "cache.h"
#include "irc_radixtree.h"
static int mo_rehash(struct Client *, struct Client *, int, const char **);
static int me_rehash(struct Client *, struct Client *, int, const char **);
@ -185,6 +186,7 @@ static void
rehash_tresvs(struct Client *source_p)
{
struct ConfItem *aconf;
struct irc_radixtree_iteration_state iter;
rb_dlink_node *ptr;
rb_dlink_node *next_ptr;
int i;
@ -194,17 +196,14 @@ rehash_tresvs(struct Client *source_p)
if (!MyConnect(source_p))
remote_rehash_oper_p = source_p;
HASH_WALK_SAFE(i, R_MAX, ptr, next_ptr, resvTable)
IRC_RADIXTREE_FOREACH(aconf, &iter, resv_tree)
{
aconf = ptr->data;
if(!aconf->hold || aconf->lifetime)
continue;
irc_radixtree_delete(resv_tree, aconf->host);
free_conf(aconf);
rb_dlinkDestroy(ptr, &resvTable[i]);
}
HASH_WALK_END
RB_DLINK_FOREACH_SAFE(ptr, next_ptr, resv_conf_list.head)
{

View file

@ -831,6 +831,7 @@ static void
stats_tresv(struct Client *source_p)
{
struct ConfItem *aconf;
struct irc_radixtree_iteration_state state;
rb_dlink_node *ptr;
int i;
@ -843,15 +844,13 @@ stats_tresv(struct Client *source_p)
'q', aconf->port, aconf->host, aconf->passwd);
}
HASH_WALK(i, R_MAX, ptr, resvTable)
IRC_RADIXTREE_FOREACH(aconf, &state, resv_tree)
{
aconf = ptr->data;
if(aconf->hold)
sendto_one_numeric(source_p, RPL_STATSQLINE,
form_str(RPL_STATSQLINE),
'q', aconf->port, aconf->host, aconf->passwd);
}
HASH_WALK_END
}
@ -859,6 +858,7 @@ static void
stats_resv(struct Client *source_p)
{
struct ConfItem *aconf;
struct irc_radixtree_iteration_state state;
rb_dlink_node *ptr;
int i;
@ -871,15 +871,13 @@ stats_resv(struct Client *source_p)
'Q', aconf->port, aconf->host, aconf->passwd);
}
HASH_WALK(i, R_MAX, ptr, resvTable)
IRC_RADIXTREE_FOREACH(aconf, &state, resv_tree)
{
aconf = ptr->data;
if(!aconf->hold)
sendto_one_numeric(source_p, RPL_STATSQLINE,
form_str(RPL_STATSQLINE),
'Q', aconf->port, aconf->host, aconf->passwd);
}
HASH_WALK_END
}
static void