From acc2595cc3057262517d28a74d563e0a6754d017 Mon Sep 17 00:00:00 2001 From: Valery Yatsko Date: Wed, 2 Apr 2008 04:15:58 +0400 Subject: [PATCH 1/5] fixing cache.c compilation - code stolen from ratbox3, with irc dictionary addition --- include/cache.h | 93 +++++----- src/cache.c | 453 +++++++++++++++++++++++++----------------------- 2 files changed, 282 insertions(+), 264 deletions(-) diff --git a/include/cache.h b/include/cache.h index 9fada16..059c583 100644 --- a/include/cache.h +++ b/include/cache.h @@ -1,50 +1,51 @@ -/* $Id: cache.h 6 2005-09-10 01:02:21Z nenolod $ */ -#ifndef INCLUDED_CACHE_H -#define INCLUDED_CACHE_H - -#include "client.h" - -#define HELP_MAX 100 - -#define CACHELINELEN 81 -#define CACHEFILELEN 30 - -#define HELP_USER 0x001 -#define HELP_OPER 0x002 - -struct Client; - -struct cachefile -{ - char name[CACHEFILELEN]; - rb_dlink_list contents; - int flags; -}; - -struct cacheline -{ - char data[CACHELINELEN]; - rb_dlink_node linenode; -}; - -extern struct cachefile *user_motd; -extern struct cachefile *oper_motd; -extern struct cacheline *emptyline; - -extern char user_motd_changed[MAX_DATE_STRING]; - -extern void init_cache(void); -extern struct cachefile *cache_file(const char *, const char *, int); -extern void free_cachefile(struct cachefile *); - -extern void load_help(void); - -extern void send_user_motd(struct Client *); -extern void send_oper_motd(struct Client *); - +/* $Id: cache.h 24250 2007-08-22 19:15:08Z androsyn $ */ +#ifndef INCLUDED_CACHE_H +#define INCLUDED_CACHE_H + +#define HELP_MAX 100 + +#define CACHELINELEN 81 +#define CACHEFILELEN 30 +/* two servernames, a gecos, three spaces, ":1", '\0' */ +#define LINKSLINELEN (HOSTLEN + HOSTLEN + REALLEN + 6) + +#define HELP_USER 0x001 +#define HELP_OPER 0x002 + +struct Client; + +struct cachefile +{ + char name[CACHEFILELEN]; + rb_dlink_list contents; + int flags; +}; + +struct cacheline +{ + char data[CACHELINELEN]; + rb_dlink_node linenode; +}; + +extern struct cachefile *user_motd; +extern struct cachefile *oper_motd; +extern struct cacheline *emptyline; + +extern char user_motd_changed[MAX_DATE_STRING]; +extern rb_dlink_list links_cache_list; + +void init_cache(void); +struct cachefile *cache_file(const char *, const char *, int); +void cache_links(void *unused); +void free_cachefile(struct cachefile *); + +void load_help(void); + +void send_user_motd(struct Client *); +void cache_user_motd(void); + struct Dictionary; extern struct Dictionary *help_dict_oper; -extern struct Dictionary *help_dict_user; - +extern struct Dictionary *help_dict_user; #endif diff --git a/src/cache.c b/src/cache.c index 3db464e..26f541a 100644 --- a/src/cache.c +++ b/src/cache.c @@ -1,161 +1,186 @@ -/* - * ircd-ratbox: an advanced Internet Relay Chat Daemon(ircd). - * cache.c - code for caching files - * - * Copyright (C) 2003 Lee Hardy - * Copyright (C) 2003-2005 ircd-ratbox development team - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are - * met: - * - * 1.Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2.Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3.The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR - * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED - * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, - * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES - * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, - * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING - * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - * - * $Id: cache.c 3436 2007-05-02 19:56:40Z jilles $ - */ - -#include "stdinc.h" -#include "ircd_defs.h" -#include "common.h" -#include "s_conf.h" -#include "client.h" -#include "hash.h" -#include "cache.h" -#include "sprintf_irc.h" -#include "irc_dictionary.h" -#include "numeric.h" - -static BlockHeap *cachefile_heap = NULL; -static BlockHeap *cacheline_heap = NULL; - -struct cachefile *user_motd = NULL; -struct cachefile *oper_motd = NULL; -char user_motd_changed[MAX_DATE_STRING]; - +/* + * ircd-ratbox: an advanced Internet Relay Chat Daemon(ircd). + * cache.c - code for caching files + * + * Copyright (C) 2003 Lee Hardy + * Copyright (C) 2003-2005 ircd-ratbox development team + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * 1.Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2.Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3.The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, + * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, + * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING + * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + * + * $Id: cache.c 25119 2008-03-13 16:57:05Z androsyn $ + */ + +#include "stdinc.h" +#include "ratbox_lib.h" +#include "struct.h" +#include "s_conf.h" +#include "client.h" +#include "hash.h" +#include "cache.h" +#include "match.h" +#include "ircd.h" +#include "numeric.h" +#include "send.h" + +struct cachefile *user_motd = NULL; +struct cachefile *oper_motd = NULL; +struct cacheline *emptyline = NULL; +rb_dlink_list links_cache_list; +char user_motd_changed[MAX_DATE_STRING]; + struct Dictionary *help_dict_oper = NULL; -struct Dictionary *help_dict_user = NULL; - -/* init_cache() - * - * inputs - - * outputs - - * side effects - inits the file/line cache blockheaps, loads motds - */ -void -init_cache(void) -{ - cachefile_heap = BlockHeapCreate(sizeof(struct cachefile), CACHEFILE_HEAP_SIZE); - cacheline_heap = BlockHeapCreate(sizeof(struct cacheline), CACHELINE_HEAP_SIZE); - - user_motd_changed[0] = '\0'; - - user_motd = cache_file(MPATH, "ircd.motd", 0); - oper_motd = cache_file(OPATH, "opers.motd", 0); - +struct Dictionary *help_dict_user = NULL; + +/* init_cache() + * + * inputs - + * outputs - + * side effects - inits the file/line cache blockheaps, loads motds + */ +void +init_cache(void) +{ + /* allocate the emptyline */ + emptyline = rb_malloc(sizeof(struct cacheline)); + emptyline->data[0] = ' '; + emptyline->data[1] = '\0'; + user_motd_changed[0] = '\0'; + + user_motd = cache_file(MPATH, "ircd.motd", 0); + oper_motd = cache_file(OPATH, "opers.motd", 0); + memset(&links_cache_list, 0, sizeof(links_cache_list)); + help_dict_oper = irc_dictionary_create(strcasecmp); - help_dict_user = irc_dictionary_create(strcasecmp); -} - -/* cache_file() - * - * inputs - file to cache, files "shortname", flags to set - * outputs - pointer to file cached, else NULL - * side effects - - */ -struct cachefile * -cache_file(const char *filename, const char *shortname, int flags) -{ - FILE *in; - struct cachefile *cacheptr; - struct cacheline *lineptr; - char line[BUFSIZE]; - char *p; - - if((in = fopen(filename, "r")) == NULL) - return NULL; - - if(strcmp(shortname, "ircd.motd") == 0) - { - struct stat sb; - struct tm *local_tm; - - if(fstat(fileno(in), &sb) < 0) - return NULL; - - local_tm = localtime(&sb.st_mtime); - - if(local_tm != NULL) - rb_snprintf(user_motd_changed, sizeof(user_motd_changed), - "%d/%d/%d %d:%d", - local_tm->tm_mday, local_tm->tm_mon + 1, - 1900 + local_tm->tm_year, local_tm->tm_hour, - local_tm->tm_min); - } - - cacheptr = BlockHeapAlloc(cachefile_heap); - - strlcpy(cacheptr->name, shortname, sizeof(cacheptr->name)); - cacheptr->flags = flags; - - /* cache the file... */ - while(fgets(line, sizeof(line), in) != NULL) - { - if((p = strchr(line, '\n')) != NULL) - *p = '\0'; - - lineptr = BlockHeapAlloc(cacheline_heap); - if(EmptyString(line)) - strlcpy(lineptr->data, " ", sizeof(lineptr->data)); - else - strlcpy(lineptr->data, line, sizeof(lineptr->data)); - rb_dlinkAddTail(lineptr, &lineptr->linenode, &cacheptr->contents); - } - - fclose(in); - return cacheptr; -} - -/* free_cachefile() - * - * inputs - cachefile to free - * outputs - - * side effects - cachefile and its data is free'd - */ -void -free_cachefile(struct cachefile *cacheptr) -{ - rb_dlink_node *ptr; - rb_dlink_node *next_ptr; - - if(cacheptr == NULL) - return; - - RB_DLINK_FOREACH_SAFE(ptr, next_ptr, cacheptr->contents.head) - { - BlockHeapFree(cacheline_heap, ptr->data); - } - - BlockHeapFree(cachefile_heap, cacheptr); -} - + help_dict_user = irc_dictionary_create(strcasecmp); +} + +/* cache_file() + * + * inputs - file to cache, files "shortname", flags to set + * outputs - pointer to file cached, else NULL + * side effects - + */ +struct cachefile * +cache_file(const char *filename, const char *shortname, int flags) +{ + FILE *in; + struct cachefile *cacheptr; + struct cacheline *lineptr; + char line[BUFSIZE]; + char *p; + + if((in = fopen(filename, "r")) == NULL) + return NULL; + + + cacheptr = rb_malloc(sizeof(struct cachefile)); + + rb_strlcpy(cacheptr->name, shortname, sizeof(cacheptr->name)); + cacheptr->flags = flags; + + /* cache the file... */ + while(fgets(line, sizeof(line), in) != NULL) + { + if((p = strpbrk(line, "\r\n")) != NULL) + *p = '\0'; + + if(!EmptyString(line)) + { + lineptr = rb_malloc(sizeof(struct cacheline)); + rb_strlcpy(lineptr->data, line, sizeof(lineptr->data)); + rb_dlinkAddTail(lineptr, &lineptr->linenode, &cacheptr->contents); + } + else + rb_dlinkAddTailAlloc(emptyline, &cacheptr->contents); + } + + fclose(in); + return cacheptr; +} + +void +cache_links(void *unused) +{ + struct Client *target_p; + rb_dlink_node *ptr; + rb_dlink_node *next_ptr; + char *links_line; + + RB_DLINK_FOREACH_SAFE(ptr, next_ptr, links_cache_list.head) + { + rb_free(ptr->data); + rb_free_rb_dlink_node(ptr); + } + + links_cache_list.head = links_cache_list.tail = NULL; + links_cache_list.length = 0; + + RB_DLINK_FOREACH(ptr, global_serv_list.head) + { + target_p = ptr->data; + + /* skip ourselves (done in /links) and hidden servers */ + if(IsMe(target_p) || + (IsHidden(target_p) && !ConfigServerHide.disable_hidden)) + continue; + + /* if the below is ever modified, change LINKSLINELEN */ + links_line = rb_malloc(LINKSLINELEN); + rb_snprintf(links_line, LINKSLINELEN, "%s %s :1 %s", + target_p->name, me.name, + target_p->info[0] ? target_p->info : + "(Unknown Location)"); + + rb_dlinkAddTailAlloc(links_line, &links_cache_list); + } +} + +/* free_cachefile() + * + * inputs - cachefile to free + * outputs - + * side effects - cachefile and its data is free'd + */ +void +free_cachefile(struct cachefile *cacheptr) +{ + rb_dlink_node *ptr; + rb_dlink_node *next_ptr; + + if(cacheptr == NULL) + return; + + RB_DLINK_FOREACH_SAFE(ptr, next_ptr, cacheptr->contents.head) + { + if(ptr->data != emptyline) + rb_free(ptr->data); + } + + rb_free(cacheptr); +} + /* load_help() * * inputs - @@ -210,65 +235,57 @@ load_help(void) } closedir(helpfile_dir); -} - -/* send_user_motd() - * - * inputs - client to send motd to - * outputs - client is sent motd if exists, else ERR_NOMOTD - * side effects - - */ -void -send_user_motd(struct Client *source_p) -{ - struct cacheline *lineptr; - rb_dlink_node *ptr; - const char *myname = get_id(&me, source_p); - const char *nick = get_id(source_p, source_p); - - if(user_motd == NULL || rb_dlink_list_length(&user_motd->contents) == 0) - { - sendto_one(source_p, form_str(ERR_NOMOTD), myname, nick); - return; - } - - sendto_one(source_p, form_str(RPL_MOTDSTART), myname, nick, me.name); - - RB_DLINK_FOREACH(ptr, user_motd->contents.head) - { - lineptr = ptr->data; - sendto_one(source_p, form_str(RPL_MOTD), myname, nick, lineptr->data); - } - - sendto_one(source_p, form_str(RPL_ENDOFMOTD), myname, nick); -} - -/* send_oper_motd() - * - * inputs - client to send motd to - * outputs - client is sent oper motd if exists - * side effects - - */ -void -send_oper_motd(struct Client *source_p) -{ - struct cacheline *lineptr; - rb_dlink_node *ptr; - - if(oper_motd == NULL || rb_dlink_list_length(&oper_motd->contents) == 0) - return; - - sendto_one(source_p, form_str(RPL_OMOTDSTART), - me.name, source_p->name); - - RB_DLINK_FOREACH(ptr, oper_motd->contents.head) - { - lineptr = ptr->data; - sendto_one(source_p, form_str(RPL_OMOTD), - me.name, source_p->name, lineptr->data); - } - - sendto_one(source_p, form_str(RPL_ENDOFOMOTD), - me.name, source_p->name); -} - +} + +/* send_user_motd() + * + * inputs - client to send motd to + * outputs - client is sent motd if exists, else ERR_NOMOTD + * side effects - + */ +void +send_user_motd(struct Client *source_p) +{ + struct cacheline *lineptr; + rb_dlink_node *ptr; + const char *myname = get_id(&me, source_p); + const char *nick = get_id(source_p, source_p); + if(user_motd == NULL || rb_dlink_list_length(&user_motd->contents) == 0) + { + sendto_one(source_p, form_str(ERR_NOMOTD), myname, nick); + return; + } + SetCork(source_p); + sendto_one(source_p, form_str(RPL_MOTDSTART), myname, nick, me.name); + + RB_DLINK_FOREACH(ptr, user_motd->contents.head) + { + lineptr = ptr->data; + sendto_one(source_p, form_str(RPL_MOTD), myname, nick, lineptr->data); + } + ClearCork(source_p); + sendto_one(source_p, form_str(RPL_ENDOFMOTD), myname, nick); +} + +void +cache_user_motd(void) +{ + struct stat sb; + struct tm *local_tm; + + if(stat(MPATH, &sb) == 0) + { + local_tm = localtime(&sb.st_mtime); + + if(local_tm != NULL) + { + rb_snprintf(user_motd_changed, sizeof(user_motd_changed), + "%d/%d/%d %d:%d", + local_tm->tm_mday, local_tm->tm_mon + 1, + 1900 + local_tm->tm_year, local_tm->tm_hour, + local_tm->tm_min); + } + } + free_cachefile(user_motd); + user_motd = cache_file(MPATH, "ircd.motd", 0); +} From 419f2d0c123113815318c9e2459562b853077adf Mon Sep 17 00:00:00 2001 From: Valery Yatsko Date: Wed, 2 Apr 2008 04:16:50 +0400 Subject: [PATCH 2/5] Missed include. --- src/cache.c | 1 + 1 file changed, 1 insertion(+) diff --git a/src/cache.c b/src/cache.c index 26f541a..2f3a6e5 100644 --- a/src/cache.c +++ b/src/cache.c @@ -38,6 +38,7 @@ #include "s_conf.h" #include "client.h" #include "hash.h" +#include "irc_dictionary.h" #include "cache.h" #include "match.h" #include "ircd.h" From a83914b3fcbc15cb24156f875781b8c114db5503 Mon Sep 17 00:00:00 2001 From: Valery Yatsko Date: Wed, 2 Apr 2008 04:19:12 +0400 Subject: [PATCH 3/5] Prevent cork usage as charybdis doesn't have its support --- src/cache.c | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) diff --git a/src/cache.c b/src/cache.c index 2f3a6e5..d0a3b35 100644 --- a/src/cache.c +++ b/src/cache.c @@ -32,18 +32,16 @@ * $Id: cache.c 25119 2008-03-13 16:57:05Z androsyn $ */ -#include "stdinc.h" -#include "ratbox_lib.h" -#include "struct.h" -#include "s_conf.h" -#include "client.h" -#include "hash.h" -#include "irc_dictionary.h" -#include "cache.h" -#include "match.h" -#include "ircd.h" +#include "stdinc.h" +#include "ircd_defs.h" +#include "common.h" +#include "s_conf.h" +#include "client.h" +#include "hash.h" +#include "cache.h" +#include "sprintf_irc.h" +#include "irc_dictionary.h" #include "numeric.h" -#include "send.h" struct cachefile *user_motd = NULL; struct cachefile *oper_motd = NULL; @@ -256,7 +254,7 @@ send_user_motd(struct Client *source_p) sendto_one(source_p, form_str(ERR_NOMOTD), myname, nick); return; } - SetCork(source_p); + sendto_one(source_p, form_str(RPL_MOTDSTART), myname, nick, me.name); RB_DLINK_FOREACH(ptr, user_motd->contents.head) @@ -264,7 +262,7 @@ send_user_motd(struct Client *source_p) lineptr = ptr->data; sendto_one(source_p, form_str(RPL_MOTD), myname, nick, lineptr->data); } - ClearCork(source_p); + sendto_one(source_p, form_str(RPL_ENDOFMOTD), myname, nick); } From a9b319f1a717e8f48ef9306f16399a822c35522c Mon Sep 17 00:00:00 2001 From: Valery Yatsko Date: Wed, 2 Apr 2008 04:21:17 +0400 Subject: [PATCH 4/5] BlockHeap -> rb_bh --- src/channel.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/channel.c b/src/channel.c index 183a4e3..b742650 100644 --- a/src/channel.c +++ b/src/channel.c @@ -45,10 +45,10 @@ extern rb_dlink_list global_channel_list; extern struct config_channel_entry ConfigChannel; -extern BlockHeap *channel_heap; -extern BlockHeap *ban_heap; -extern BlockHeap *topic_heap; -extern BlockHeap *member_heap; +static rb_bh *channel_heap; +static rb_bh *ban_heap; +static rb_bh *topic_heap; +static rb_bh *member_heap; static int channel_capabs[] = { CAP_EX, CAP_IE, CAP_SERVICE, From 6e9b4415cce8808ad39f90612f0218274f3cb1c1 Mon Sep 17 00:00:00 2001 From: Valery Yatsko Date: Wed, 2 Apr 2008 04:28:05 +0400 Subject: [PATCH 5/5] ok, trying to work on blockheap's stuff --- include/monitor.h | 2 +- libratbox/src/balloc.c | 4 ++-- src/channel.c | 34 +++++++++++++++++----------------- src/client.c | 38 +++++++++++++++++++------------------- src/irc_dictionary.c | 16 ++++++++-------- src/ircd_state.c | 24 ++++++++++++------------ src/s_auth.c | 8 ++++---- src/s_conf.c | 8 ++++---- src/s_newconf.c | 8 ++++---- 9 files changed, 71 insertions(+), 71 deletions(-) diff --git a/include/monitor.h b/include/monitor.h index ea4590a..be8db98 100644 --- a/include/monitor.h +++ b/include/monitor.h @@ -10,7 +10,7 @@ #ifndef INCLUDED_monitor_h #define INCLUDED_monitor_h -struct BlockHeap; +struct rb_bh; struct monitor { diff --git a/libratbox/src/balloc.c b/libratbox/src/balloc.c index 54a29c8..cd5c5e7 100644 --- a/libratbox/src/balloc.c +++ b/libratbox/src/balloc.c @@ -394,13 +394,13 @@ rb_bh_free(rb_bh * bh, void *ptr) if(unlikely(bh == NULL)) { - rb_lib_log("balloc.c:rb_bhFree() bh == NULL"); + rb_lib_log("balloc.c:rb_bh_free() bh == NULL"); return (1); } if(unlikely(ptr == NULL)) { - rb_lib_log("balloc.rb_bhFree() ptr == NULL"); + rb_lib_log("balloc.rb_bh_free() ptr == NULL"); return (1); } diff --git a/src/channel.c b/src/channel.c index b742650..d192f26 100644 --- a/src/channel.c +++ b/src/channel.c @@ -45,10 +45,10 @@ extern rb_dlink_list global_channel_list; extern struct config_channel_entry ConfigChannel; -static rb_bh *channel_heap; -static rb_bh *ban_heap; -static rb_bh *topic_heap; -static rb_bh *member_heap; +extern rb_bh *channel_heap; +extern rb_bh *ban_heap; +extern rb_bh *topic_heap; +extern rb_bh *member_heap; static int channel_capabs[] = { CAP_EX, CAP_IE, CAP_SERVICE, @@ -73,10 +73,10 @@ static int h_can_join; void init_channels(void) { - channel_heap = BlockHeapCreate(sizeof(struct Channel), CHANNEL_HEAP_SIZE); - ban_heap = BlockHeapCreate(sizeof(struct Ban), BAN_HEAP_SIZE); - topic_heap = BlockHeapCreate(TOPICLEN + 1 + USERHOST_REPLYLEN, TOPIC_HEAP_SIZE); - member_heap = BlockHeapCreate(sizeof(struct membership), MEMBER_HEAP_SIZE); + channel_heap = rb_bh_create(sizeof(struct Channel), CHANNEL_HEAP_SIZE); + ban_heap = rb_bh_create(sizeof(struct Ban), BAN_HEAP_SIZE); + topic_heap = rb_bh_create(TOPICLEN + 1 + USERHOST_REPLYLEN, TOPIC_HEAP_SIZE); + member_heap = rb_bh_create(sizeof(struct membership), MEMBER_HEAP_SIZE); h_can_join = register_hook("can_join"); } @@ -88,7 +88,7 @@ struct Channel * allocate_channel(const char *chname) { struct Channel *chptr; - chptr = BlockHeapAlloc(channel_heap); + chptr = rb_bh_alloc(channel_heap); chptr->chname = rb_strdup(chname); return (chptr); } @@ -97,14 +97,14 @@ void free_channel(struct Channel *chptr) { rb_free(chptr->chname); - BlockHeapFree(channel_heap, chptr); + rb_bh_free(channel_heap, chptr); } struct Ban * allocate_ban(const char *banstr, const char *who) { struct Ban *bptr; - bptr = BlockHeapAlloc(ban_heap); + bptr = rb_bh_alloc(ban_heap); bptr->banstr = rb_strdup(banstr); bptr->who = rb_strdup(who); @@ -116,7 +116,7 @@ free_ban(struct Ban *bptr) { rb_free(bptr->banstr); rb_free(bptr->who); - BlockHeapFree(ban_heap, bptr); + rb_bh_free(ban_heap, bptr); } @@ -205,7 +205,7 @@ add_user_to_channel(struct Channel *chptr, struct Client *client_p, int flags) if(client_p->user == NULL) return; - msptr = BlockHeapAlloc(member_heap); + msptr = rb_bh_alloc(member_heap); msptr->chptr = chptr; msptr->client_p = client_p; @@ -247,7 +247,7 @@ remove_user_from_channel(struct membership *msptr) if(!(chptr->mode.mode & MODE_PERMANENT) && rb_dlink_list_length(&chptr->members) <= 0) destroy_channel(chptr); - BlockHeapFree(member_heap, msptr); + rb_bh_free(member_heap, msptr); return; } @@ -284,7 +284,7 @@ remove_user_from_channels(struct Client *client_p) if(!(chptr->mode.mode & MODE_PERMANENT) && rb_dlink_list_length(&chptr->members) <= 0) destroy_channel(chptr); - BlockHeapFree(member_heap, msptr); + rb_bh_free(member_heap, msptr); } client_p->user->channel.head = client_p->user->channel.tail = NULL; @@ -1020,7 +1020,7 @@ allocate_topic(struct Channel *chptr) if(chptr == NULL) return; - ptr = BlockHeapAlloc(topic_heap); + ptr = rb_bh_alloc(topic_heap); /* Basically we allocate one large block for the topic and * the topic info. We then split it up into two and shove it @@ -1050,7 +1050,7 @@ free_topic(struct Channel *chptr) * MUST change this as well */ ptr = chptr->topic; - BlockHeapFree(topic_heap, ptr); + rb_bh_free(topic_heap, ptr); chptr->topic = NULL; chptr->topic_info = NULL; } diff --git a/src/client.c b/src/client.c index eee6db1..844f0aa 100644 --- a/src/client.c +++ b/src/client.c @@ -73,9 +73,9 @@ static int qs_server(struct Client *, struct Client *, struct Client *, const ch static EVH check_pings; -extern BlockHeap *client_heap; -extern BlockHeap *lclient_heap; -extern BlockHeap *pclient_heap; +extern rb_bh *client_heap; +extern rb_bh *lclient_heap; +extern rb_bh *pclient_heap; extern char current_uid[IDLEN]; @@ -117,9 +117,9 @@ init_client(void) * start off the check ping event .. -- adrian * Every 30 seconds is plenty -- db */ - client_heap = BlockHeapCreate(sizeof(struct Client), CLIENT_HEAP_SIZE); - lclient_heap = BlockHeapCreate(sizeof(struct LocalUser), LCLIENT_HEAP_SIZE); - pclient_heap = BlockHeapCreate(sizeof(struct PreClient), PCLIENT_HEAP_SIZE); + client_heap = rb_bh_create(sizeof(struct Client), CLIENT_HEAP_SIZE); + lclient_heap = rb_bh_create(sizeof(struct LocalUser), LCLIENT_HEAP_SIZE); + pclient_heap = rb_bh_create(sizeof(struct PreClient), PCLIENT_HEAP_SIZE); rb_event_addish("check_pings", check_pings, NULL, 30); rb_event_addish("free_exited_clients", &free_exited_clients, NULL, 4); rb_event_addish("exit_aborted_clients", exit_aborted_clients, NULL, 1); @@ -144,13 +144,13 @@ make_client(struct Client *from) struct Client *client_p = NULL; struct LocalUser *localClient; - client_p = BlockHeapAlloc(client_heap); + client_p = rb_bh_alloc(client_heap); if(from == NULL) { client_p->from = client_p; /* 'from' of local client is self! */ - localClient = (struct LocalUser *) BlockHeapAlloc(lclient_heap); + localClient = (struct LocalUser *) rb_bh_alloc(lclient_heap); SetMyConnect(client_p); client_p->localClient = localClient; @@ -159,7 +159,7 @@ make_client(struct Client *from) client_p->localClient->F = NULL; client_p->localClient->ctrlfd = -1; - client_p->preClient = (struct PreClient *) BlockHeapAlloc(pclient_heap); + client_p->preClient = (struct PreClient *) rb_bh_alloc(pclient_heap); /* as good a place as any... */ rb_dlinkAdd(client_p, &client_p->localClient->tnode, &unknown_list); @@ -191,7 +191,7 @@ free_pre_client(struct Client *client_p) if (blptr != NULL) unref_blacklist(blptr); abort_blacklist_queries(client_p); - BlockHeapFree(pclient_heap, client_p->preClient); + rb_bh_free(pclient_heap, client_p->preClient); client_p->preClient = NULL; } @@ -231,7 +231,7 @@ free_local_client(struct Client *client_p) rb_free(client_p->localClient->opername); rb_free(client_p->localClient->mangledhost); - BlockHeapFree(lclient_heap, client_p->localClient); + rb_bh_free(lclient_heap, client_p->localClient); client_p->localClient = NULL; } @@ -242,7 +242,7 @@ free_client(struct Client *client_p) s_assert(&me != client_p); free_local_client(client_p); free_pre_client(client_p); - BlockHeapFree(client_heap, client_p); + rb_bh_free(client_heap, client_p); } /* @@ -1709,7 +1709,7 @@ void count_local_client_memory(size_t * count, size_t * local_client_memory_used) { size_t lusage; - BlockHeapUsage(lclient_heap, count, NULL, &lusage); + rb_bh_usage(lclient_heap, count, NULL, &lusage); *local_client_memory_used = lusage + (*count * (sizeof(MemBlock) + sizeof(struct Client))); } @@ -1720,8 +1720,8 @@ void count_remote_client_memory(size_t * count, size_t * remote_client_memory_used) { size_t lcount, rcount; - BlockHeapUsage(lclient_heap, &lcount, NULL, NULL); - BlockHeapUsage(client_heap, &rcount, NULL, NULL); + rb_bh_usage(lclient_heap, &lcount, NULL, NULL); + rb_bh_usage(client_heap, &rcount, NULL, NULL); *count = rcount - lcount; *remote_client_memory_used = *count * (sizeof(MemBlock) + sizeof(struct Client)); } @@ -1841,11 +1841,11 @@ show_ip_conf(struct ConfItem *aconf, struct Client *source_p) * side effects - Creates a block heap for struct Users * */ -static BlockHeap *user_heap; +static rb_bh *user_heap; void initUser(void) { - user_heap = BlockHeapCreate(sizeof(struct User), USER_HEAP_SIZE); + user_heap = rb_bh_create(sizeof(struct User), USER_HEAP_SIZE); if(!user_heap) outofmemory(); } @@ -1866,7 +1866,7 @@ make_user(struct Client *client_p) user = client_p->user; if(!user) { - user = (struct User *) BlockHeapAlloc(user_heap); + user = (struct User *) rb_bh_alloc(user_heap); user->refcnt = 1; client_p->user = user; } @@ -1932,7 +1932,7 @@ free_user(struct User *user, struct Client *client_p) s_assert(!user->channel.head); } - BlockHeapFree(user_heap, user); + rb_bh_free(user_heap, user); } } diff --git a/src/irc_dictionary.c b/src/irc_dictionary.c index fc6129e..49bb8ad 100644 --- a/src/irc_dictionary.c +++ b/src/irc_dictionary.c @@ -29,7 +29,7 @@ #include "setup.h" #include "irc_dictionary.h" -static BlockHeap *elem_heap = NULL; +static rb_bh *elem_heap = NULL; struct Dictionary { @@ -62,7 +62,7 @@ struct Dictionary *irc_dictionary_create(DCF compare_cb) dtree->compare_cb = compare_cb; if (!elem_heap) - elem_heap = BlockHeapCreate(sizeof(struct DictionaryElement), 1024); + elem_heap = rb_bh_create(sizeof(struct DictionaryElement), 1024); return dtree; } @@ -93,7 +93,7 @@ struct Dictionary *irc_dictionary_create_named(const char *name, dtree->id = rb_strdup(name); if (!elem_heap) - elem_heap = BlockHeapCreate(sizeof(struct DictionaryElement), 1024); + elem_heap = rb_bh_create(sizeof(struct DictionaryElement), 1024); return dtree; } @@ -364,7 +364,7 @@ irc_dictionary_link(struct Dictionary *dict, dict->root->data = delem->data; dict->count--; - BlockHeapFree(elem_heap, delem); + rb_bh_free(elem_heap, delem); } } } @@ -473,7 +473,7 @@ void irc_dictionary_destroy(struct Dictionary *dtree, if (destroy_cb != NULL) (*destroy_cb)(n, privdata); - BlockHeapFree(elem_heap, n); + rb_bh_free(elem_heap, n); } rb_free(dtree); @@ -713,14 +713,14 @@ struct DictionaryElement *irc_dictionary_add(struct Dictionary *dict, char *key, s_assert(data != NULL); s_assert(irc_dictionary_find(dict, key) == NULL); - delem = BlockHeapAlloc(elem_heap); + delem = rb_bh_alloc(elem_heap); delem->key = key; delem->data = data; /* TBD: is this needed? --nenolod */ if (delem->key == NULL) { - BlockHeapFree(elem_heap, delem); + rb_bh_free(elem_heap, delem); return NULL; } @@ -759,7 +759,7 @@ void *irc_dictionary_delete(struct Dictionary *dtree, const char *key) data = delem->data; irc_dictionary_unlink_root(dtree); - BlockHeapFree(elem_heap, delem); + rb_bh_free(elem_heap, delem); return data; } diff --git a/src/ircd_state.c b/src/ircd_state.c index 973f1ab..8e59578 100644 --- a/src/ircd_state.c +++ b/src/ircd_state.c @@ -128,25 +128,25 @@ int opers_see_all_users = 0; int testing_conf = 0; struct config_channel_entry ConfigChannel; -BlockHeap *channel_heap; -BlockHeap *ban_heap; -BlockHeap *topic_heap; -BlockHeap *member_heap; +rb_bh *channel_heap; +rb_bh *ban_heap; +rb_bh *topic_heap; +rb_bh *member_heap; -BlockHeap *client_heap = NULL; -BlockHeap *lclient_heap = NULL; -BlockHeap *pclient_heap = NULL; +rb_bh *client_heap = NULL; +rb_bh *lclient_heap = NULL; +rb_bh *pclient_heap = NULL; char current_uid[IDLEN]; /* patricia */ -BlockHeap *prefix_heap; -BlockHeap *node_heap; -BlockHeap *patricia_heap; +rb_bh *prefix_heap; +rb_bh *node_heap; +rb_bh *patricia_heap; -BlockHeap *linebuf_heap; +rb_bh *linebuf_heap; -BlockHeap *dnode_heap; +rb_bh *dnode_heap; #ifdef NOTYET diff --git a/src/s_auth.c b/src/s_auth.c index ebb8765..dc3aecd 100644 --- a/src/s_auth.c +++ b/src/s_auth.c @@ -86,7 +86,7 @@ ReportType; #define sendheader(c, r) sendto_one_notice(c, HeaderMessages[(r)]) static rb_dlink_list auth_poll_list; -static BlockHeap *auth_heap; +static rb_bh *auth_heap; static EVH timeout_auth_queries_event; static PF read_auth_reply; @@ -103,7 +103,7 @@ init_auth(void) /* This hook takes a struct Client for its argument */ memset(&auth_poll_list, 0, sizeof(auth_poll_list)); eventAddIsh("timeout_auth_queries_event", timeout_auth_queries_event, NULL, 1); - auth_heap = BlockHeapCreate(sizeof(struct AuthRequest), LCLIENT_HEAP_SIZE); + auth_heap = rb_bh_create(sizeof(struct AuthRequest), LCLIENT_HEAP_SIZE); } /* @@ -112,7 +112,7 @@ init_auth(void) static struct AuthRequest * make_auth_request(struct Client *client) { - struct AuthRequest *request = BlockHeapAlloc(auth_heap); + struct AuthRequest *request = rb_bh_alloc(auth_heap); client->localClient->auth_request = request; request->fd = -1; request->client = client; @@ -126,7 +126,7 @@ make_auth_request(struct Client *client) static void free_auth_request(struct AuthRequest *request) { - BlockHeapFree(auth_heap, request); + rb_bh_free(auth_heap, request); } /* diff --git a/src/s_conf.c b/src/s_conf.c index 3951baf..cb27d7b 100644 --- a/src/s_conf.c +++ b/src/s_conf.c @@ -59,7 +59,7 @@ extern char linebuf[]; #define INADDR_NONE ((unsigned int) 0xffffffff) #endif -static BlockHeap *confitem_heap = NULL; +static rb_bh *confitem_heap = NULL; rb_dlink_list temp_klines[LAST_TEMP_TYPE]; rb_dlink_list temp_dlines[LAST_TEMP_TYPE]; @@ -83,7 +83,7 @@ static int attach_iline(struct Client *, struct ConfItem *); void init_s_conf(void) { - confitem_heap = BlockHeapCreate(sizeof(struct ConfItem), CONFITEM_HEAP_SIZE); + confitem_heap = rb_bh_create(sizeof(struct ConfItem), CONFITEM_HEAP_SIZE); eventAddIsh("expire_temp_klines", expire_temp_kd, &temp_klines[TEMP_MIN], 60); eventAddIsh("expire_temp_dlines", expire_temp_kd, &temp_dlines[TEMP_MIN], 60); @@ -114,7 +114,7 @@ make_conf() { struct ConfItem *aconf; - aconf = BlockHeapAlloc(confitem_heap); + aconf = rb_bh_alloc(confitem_heap); aconf->status = CONF_ILLEGAL; return (aconf); } @@ -146,7 +146,7 @@ free_conf(struct ConfItem *aconf) rb_free(aconf->user); rb_free(aconf->host); - BlockHeapFree(confitem_heap, aconf); + rb_bh_free(confitem_heap, aconf); } /* diff --git a/src/s_newconf.c b/src/s_newconf.c index 061a9f6..8fa1b0d 100644 --- a/src/s_newconf.c +++ b/src/s_newconf.c @@ -58,7 +58,7 @@ rb_dlink_list tgchange_list; rb_patricia_tree_t *tgchange_tree; -static BlockHeap *nd_heap = NULL; +static rb_bh *nd_heap = NULL; static void expire_temp_rxlines(void *unused); static void expire_nd_entries(void *unused); @@ -67,7 +67,7 @@ void init_s_newconf(void) { tgchange_tree = New_Patricia(PATRICIA_BITS); - nd_heap = BlockHeapCreate(sizeof(struct nd_entry), ND_HEAP_SIZE); + nd_heap = rb_bh_create(sizeof(struct nd_entry), ND_HEAP_SIZE); eventAddIsh("expire_nd_entries", expire_nd_entries, NULL, 30); eventAddIsh("expire_temp_rxlines", expire_temp_rxlines, NULL, 60); } @@ -751,7 +751,7 @@ add_nd_entry(const char *name) if(irc_dictionary_find(nd_dict, name) != NULL) return; - nd = BlockHeapAlloc(nd_heap); + nd = rb_bh_alloc(nd_heap); strlcpy(nd->name, name, sizeof(nd->name)); nd->expire = rb_current_time() + ConfigFileEntry.nick_delay; @@ -768,7 +768,7 @@ free_nd_entry(struct nd_entry *nd) irc_dictionary_delete(nd_dict, nd->name); rb_dlinkDelete(&nd->lnode, &nd_list); - BlockHeapFree(nd_heap, nd); + rb_bh_free(nd_heap, nd); } void