X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fhousekeeping.c;h=108410af29a79a7924526d2f214ba5dea868ffea;hb=aa7365c86de8e26e796d3aa3fd605c85d8c26220;hp=5773925dd382199bb84f54da25f88d31379a729d;hpb=7716f155f4145d83b6acfe6157599e6a9ee04608;p=citadel.git diff --git a/citadel/housekeeping.c b/citadel/housekeeping.c index 5773925dd..108410af2 100644 --- a/citadel/housekeeping.c +++ b/citadel/housekeeping.c @@ -4,18 +4,12 @@ * 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 as published by - * the Free Software Foundation; either version 3 of the License, or - * (at your option) any later version. + * 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. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "sysdep.h" @@ -63,7 +57,7 @@ void check_sched_shutdown(void) { if ((ScheduledShutdown == 1) && (ContextList == NULL)) { syslog(LOG_NOTICE, "Scheduled shutdown initiating.\n"); - CtdlThreadStopAll(); + server_shutting_down = 1; } } @@ -117,9 +111,9 @@ void check_ref_counts(void) { * only allow housekeeping to execute once per minute, and we only allow one * instance to run at a time. */ +static int housekeeping_in_progress = 0; +static time_t last_timer = 0L; void do_housekeeping(void) { - static int housekeeping_in_progress = 0; - static time_t last_timer = 0L; int do_housekeeping_now = 0; int do_perminute_housekeeping_now = 0; time_t now; @@ -133,11 +127,6 @@ void do_housekeeping(void) { if (housekeeping_in_progress == 0) { do_housekeeping_now = 1; housekeeping_in_progress = 1; - now = time(NULL); - if ( (now - last_timer) > (time_t)60 ) { - do_perminute_housekeeping_now = 1; - last_timer = time(NULL); - } } end_critical_section(S_HOUSEKEEPING); @@ -150,6 +139,12 @@ void do_housekeeping(void) { * loop. Everything below this point is real work. */ + 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); @@ -163,5 +158,7 @@ void do_housekeeping(void) { /* * All done. */ + begin_critical_section(S_HOUSEKEEPING); housekeeping_in_progress = 0; + end_critical_section(S_HOUSEKEEPING); }