* disable our idle-check for ARTV import/export since this tends to take longer.
authorWilfried Göesgens <willi@citadel.org>
Sun, 13 Jul 2008 09:40:28 +0000 (09:40 +0000)
committerWilfried Göesgens <willi@citadel.org>
Sun, 13 Jul 2008 09:40:28 +0000 (09:40 +0000)
citadel/housekeeping.c
citadel/modules/vandelay/serv_vandelay.c
citadel/server.h

index 742fb861bdba9f68eef2e69735c25befb2303d81..7fed1541883efc9f4abdf397554d52a1bb2f9455 100644 (file)
@@ -57,6 +57,7 @@ void terminate_idle_sessions(void) {
        time_t now;
        int session_to_kill;
        int killed = 0;
+       int longrunners = 0;
 
        now = time(NULL);
        session_to_kill = 0;
@@ -65,13 +66,19 @@ void terminate_idle_sessions(void) {
                if (  (ccptr!=CC)
                && (config.c_sleeping > 0)
                && (now - (ccptr->lastcmd) > config.c_sleeping) ) {
-                       ccptr->kill_me = 1;
-                       ++killed;
+                       if (!ccptr->dont_term) {
+                               ccptr->kill_me = 1;
+                               ++killed;
+                       }
+                       else 
+                               longrunners ++;
                }
        }
        end_critical_section(S_SESSION_TABLE);
        if (killed > 0)
                CtdlLogPrintf(CTDL_INFO, "Terminated %d idle sessions\n", killed);
+       if (longrunners > 0)
+               CtdlLogPrintf(CTDL_INFO, "Didn't terminate %d protected idle sessions;\n", killed);
 }
 
 
index e937f3194722698f5ddf0aeb844f889f8ca4ebc2..63805f410be6d5631cbb0e49cfe726856aa3e321 100644 (file)
@@ -480,7 +480,7 @@ void artv_do_export(void) {
 
        Ctx = CC;
        cprintf("%d Exporting all Citadel databases.\n", LISTING_FOLLOWS);
-
+       Ctx->dont_term = 1;
        cprintf("version\n%d\n", REV_LEVEL);
 
        /* export the config file (this is done using x-macros) */
@@ -512,6 +512,7 @@ void artv_do_export(void) {
        if (Ctx->kill_me != 1)
                artv_export_messages();
        client_write("000\n", 4);
+       Ctx->dont_term = 0;
 }
 
 void artv_do_dump(void) {
@@ -818,6 +819,8 @@ void artv_do_import(void) {
        
        unbuffer_output();
 
+       CC->dont_term = 1;
+
        /* Prepare buffers for base 64 decoding of messages.
        */
        b64mes = malloc(SIZ);
@@ -891,6 +894,7 @@ void artv_do_import(void) {
        while (client_getln(buf, sizeof buf) >= 0 && strcmp(buf, "000"))  ;;
        rebuild_euid_index();
        rebuild_usersbynumber();
+       CC->dont_term = 0;
 }
 
 
index 1d4457dac82ab04e4c51a8a7044d6e598fe1deb3..6d74261ed155e64a8451b51e96632516b3172da3 100644 (file)
@@ -62,6 +62,7 @@ struct CitContext {
        int kill_me;            /* Set to nonzero to flag for termination */
        int client_socket;
        int cs_pid;             /* session ID */
+       int dont_term;          /* for special activities like artv so we don't get killed */
        time_t lastcmd;         /* time of last command executed */
        time_t lastidle;        /* For computing idle time */