X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fhousekeeping.c;h=077b509300c002433aa5f21cd9a26d9f84b6d689;hb=314acc50c58e49fb9a5df9d7f0c24b2535ba0757;hp=7eee008ae05911837a9d1f092f69392e5172d498;hpb=9d62c756b928de642387c07f6ce71483175aeaba;p=citadel.git diff --git a/citadel/housekeeping.c b/citadel/housekeeping.c index 7eee008ae..077b50930 100644 --- a/citadel/housekeeping.c +++ b/citadel/housekeeping.c @@ -1,8 +1,15 @@ /* - * $Id$ - * * This file contains miscellaneous housekeeping tasks. * + * Copyright (c) 1987-2011 by the citadel.org team + * + * This program is open source software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License, version 3. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. */ #include "sysdep.h" @@ -30,7 +37,8 @@ #ifdef HAVE_SYS_SELECT_H #include #endif -#include "tools.h" +#include +#include #include "citadel.h" #include "server.h" #include "serv_extensions.h" @@ -40,45 +48,17 @@ #include "sysdep_decls.h" #include "room_ops.h" #include "database.h" +#include "msgbase.h" +#include "internet_addressing.h" +#include "journaling.h" - - - -/* - * Terminate idle sessions. This function pounds through the session table - * comparing the current time to each session's time-of-last-command. If an - * idle session is found it is terminated, then the search restarts at the - * beginning because the pointer to our place in the list becomes invalid. - */ -void terminate_idle_sessions(void) { - struct CitContext *ccptr; - time_t now; - int session_to_kill; - int killed = 0; - - now = time(NULL); - session_to_kill = 0; - begin_critical_section(S_SESSION_TABLE); - for (ccptr = ContextList; ccptr != NULL; ccptr = ccptr->next) { - if ( (ccptr!=CC) - && (config.c_sleeping > 0) - && (now - (ccptr->lastcmd) > config.c_sleeping) ) { - ccptr->kill_me = 1; - ++killed; - } - } - end_critical_section(S_SESSION_TABLE); - if (killed > 0) - lprintf(CTDL_INFO, "Terminated %d idle sessions\n", killed); -} - - +#include "ctdl_module.h" +#include "threads.h" void check_sched_shutdown(void) { if ((ScheduledShutdown == 1) && (ContextList == NULL)) { - lprintf(CTDL_NOTICE, "Scheduled shutdown initiating.\n"); - time_to_die = 1; - master_cleanup(0); + syslog(LOG_NOTICE, "Scheduled shutdown initiating.\n"); + server_shutting_down = 1; } } @@ -103,13 +83,13 @@ void check_ref_counts(void) { int new_refcounts[MAXFLOORS]; - lprintf(CTDL_DEBUG, "Checking floor reference counts\n"); + syslog(LOG_DEBUG, "Checking floor reference counts\n"); for (a=0; a (time_t)60 ) { - if (housekeeping_in_progress == 0) { - do_housekeeping_now = 1; - housekeeping_in_progress = 1; - last_timer = time(NULL); - } + if (housekeeping_in_progress == 0) { + do_housekeeping_now = 1; + housekeeping_in_progress = 1; } end_critical_section(S_HOUSEKEEPING); @@ -163,11 +140,26 @@ void do_housekeeping(void) { * loop. Everything below this point is real work. */ - cdb_check_handles(); /* suggested by Justin Case */ - PerformSessionHooks(EVT_TIMER); /* Run any timer hooks */ + now = time(NULL); + if ( (now - last_timer) > (time_t)60 ) { + do_perminute_housekeeping_now = 1; + last_timer = time(NULL); + } + + /* First, do the "as often as needed" stuff... */ + JournalRunQueue(); + PerformSessionHooks(EVT_HOUSE); + + /* Then, do the "once per minute" stuff... */ + if (do_perminute_housekeeping_now) { + cdb_check_handles(); /* suggested by Justin Case */ + PerformSessionHooks(EVT_TIMER); /* Run any timer hooks */ + } /* * All done. */ + begin_critical_section(S_HOUSEKEEPING); housekeeping_in_progress = 0; + end_critical_section(S_HOUSEKEEPING); }