X-Git-Url: https://jfr.im/git/irc/rqf/shadowircd.git/blobdiff_plain/212380e3f42f585dc1ea927402252eb943f91f7b..af81d5a0b09446188fd6f9c292b51519f2c1cedd:/src/ircd.c diff --git a/src/ircd.c b/src/ircd.c index 8188068..7c57228 100644 --- a/src/ircd.c +++ b/src/ircd.c @@ -21,7 +21,7 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 * USA * - * $Id: ircd.c 3047 2006-12-26 23:18:05Z jilles $ + * $Id: ircd.c 3380 2007-04-03 22:25:11Z jilles $ */ #include "stdinc.h" @@ -73,45 +73,18 @@ #include "patchlevel.h" #include "serno.h" +#include "ratbox_lib.h" + /* * Try and find the correct name to use with getrlimit() for setting the max. * number of files allowed to be open by this process. */ int _charybdis_data_version = CHARYBDIS_DV; -extern int ServerRunning, initialVMTop; +extern int ServerRunning; extern struct LocalUser meLocalUser; extern char **myargv; -/* - * get_vm_top - get the operating systems notion of the resident set size - */ -static unsigned long -get_vm_top(void) -{ - /* - * NOTE: sbrk is not part of the ANSI C library or the POSIX.1 standard - * however it seems that everyone defines it. Calling sbrk with a 0 - * argument will return a pointer to the top of the process virtual - * memory without changing the process size, so this call should be - * reasonably safe (sbrk returns the new value for the top of memory). - * This code relies on the notion that the address returned will be an - * offset from 0 (NULL), so the result of sbrk is cast to a size_t and - * returned. We really shouldn't be using it here but... - */ - void *vptr = sbrk(0); - return (unsigned long) vptr; -} - -/* - * get_maxrss - get the operating systems notion of the resident set size - */ -unsigned long -get_maxrss(void) -{ - return get_vm_top() - initialVMTop; -} - /* * print_startup - print startup information */ @@ -140,6 +113,12 @@ ircd_log_cb(const char *str) ilog(L_MAIN, "%s", str); } +static void +ircd_restart_cb(const char *str) +{ + ilog(L_MAIN, "%s", str); +} + /* * Why EXIT_FAILURE here? * Because if ircd_die_cb() is called it's because of a fatal @@ -168,29 +147,19 @@ ircd_die_cb(const char *str) static void init_sys(void) { -#if defined(RLIMIT_FD_MAX) && defined(HAVE_SYS_RLIMIT_H) +#if defined(RLIMIT_NOFILE) && defined(HAVE_SYS_RESOURCE_H) struct rlimit limit; - if(!getrlimit(RLIMIT_FD_MAX, &limit)) + if(!getrlimit(RLIMIT_NOFILE, &limit)) { - - if(limit.rlim_max < MAXCONNECTIONS) - { - fprintf(stderr, "ircd fd table too big\n"); - fprintf(stderr, "Hard Limit: %ld IRC max: %d\n", - (long) limit.rlim_max, MAXCONNECTIONS); - fprintf(stderr, "Fix MAXCONNECTIONS\n"); - exit(-1); - } - limit.rlim_cur = limit.rlim_max; /* make soft limit the max */ - if(setrlimit(RLIMIT_FD_MAX, &limit) == -1) + if(setrlimit(RLIMIT_NOFILE, &limit) == -1) { fprintf(stderr, "error setting max fd's to %ld\n", (long) limit.rlim_cur); exit(EXIT_FAILURE); } } -#endif /* RLIMIT_FD_MAX */ +#endif /* RLIMIT_NOFILE */ } static int @@ -331,7 +300,7 @@ charybdis_io_loop(void) eventRun(); - comm_select(250); + rb_select(250); } } @@ -348,7 +317,7 @@ initialize_global_set_options(void) memset(&GlobalSetOptions, 0, sizeof(GlobalSetOptions)); /* memset( &ConfigFileEntry, 0, sizeof(ConfigFileEntry)); */ - GlobalSetOptions.maxclients = MAX_CLIENTS; + GlobalSetOptions.maxclients = ServerInfo.max_clients; GlobalSetOptions.autoconn = 1; GlobalSetOptions.spam_time = MIN_JOIN_LEAVE_TIME; @@ -413,7 +382,7 @@ write_pidfile(const char *filename) { unsigned int pid = (unsigned int) getpid(); - ircsnprintf(buff, sizeof(buff), "%u\n", pid); + rb_snprintf(buff, sizeof(buff), "%u\n", pid); if((fputs(buff, fb) == -1)) { ilog(L_MAIN, "Error writing %u to pid file %s (%s)", @@ -513,11 +482,6 @@ main(int argc, char *argv[]) */ setup_corefile(); - /* - * set initialVMTop before we allocate any memory - */ - initialVMTop = get_vm_top(); - ServerRunning = 0; /* It ain't random, but it ought to be a little harder to guess */ srand(SystemTime.tv_sec ^ (SystemTime.tv_usec | (getpid() << 20))); @@ -533,7 +497,7 @@ main(int argc, char *argv[]) memset(&local_oper_list, 0, sizeof(local_oper_list)); memset(&oper_list, 0, sizeof(oper_list)); - dlinkAddTail(&me, &me.node, &global_client_list); + rb_dlinkAddTail(&me, &me.node, &global_client_list); memset((void *) &Count, 0, sizeof(Count)); memset((void *) &ServerInfo, 0, sizeof(ServerInfo)); @@ -596,13 +560,14 @@ main(int argc, char *argv[]) } /* Init the event subsystem */ - libcharybdis_init(ircd_log_cb, restart, ircd_die_cb); init_sys(); + libcharybdis_init(ircd_log_cb, restart, ircd_die_cb); + rb_lib_init(ircd_log_cb, restart, ircd_die_cb); fdlist_init(); if(!server_state_foreground) { - comm_close_all(); + rb_close_all(); } init_main_logfile(); @@ -679,12 +644,12 @@ main(int argc, char *argv[]) me.servptr = &me; SetMe(&me); make_server(&me); - me.serv->up = me.name; startup_time = CurrentTime; add_to_client_hash(me.name, &me); add_to_id_hash(me.id, &me); + me.serv->nameinfo = scache_connect(me.name, me.info, 0); - dlinkAddAlloc(&me, &global_serv_list); + rb_dlinkAddAlloc(&me, &global_serv_list); construct_umodebuf(); @@ -708,16 +673,10 @@ main(int argc, char *argv[]) eventAddIsh("collect_zipstats", collect_zipstats, NULL, ZIPSTATS_TIME); /* Setup the timeout check. I'll shift it later :) -- adrian */ - eventAddIsh("comm_checktimeouts", comm_checktimeouts, NULL, 1); + eventAddIsh("rb_checktimeouts", rb_checktimeouts, NULL, 1); eventAdd("check_rehash", check_rehash, NULL, 1); - if(ConfigServerHide.links_delay > 0) - eventAdd("cache_links", cache_links, NULL, - ConfigServerHide.links_delay); - else - ConfigServerHide.links_disabled = 1; - if(splitmode) eventAdd("check_splitmode", check_splitmode, NULL, 2);