chiark / gitweb /
lowvol fixes
authorIan Jackson <ian@chiark.greenend.org.uk>
Thu, 6 May 2010 18:32:39 +0000 (19:32 +0100)
committerIan Jackson <ian@chiark.greenend.org.uk>
Thu, 6 May 2010 18:32:39 +0000 (19:32 +0100)
backends/innduct.c

index fb5ddca..6e9dd26 100644 (file)
@@ -533,7 +533,7 @@ static char *globpat_backlog;
 static pid_t self_pid;
 static int *lowvol_perperiod;
 static int lowvol_circptr;
-static int lowvol_total;
+static int lowvol_total; /* does not include current period */
 
 /* statemc_init initialises */
 static StateMachineState sms;
@@ -1191,9 +1191,10 @@ static void conn_idle_close(Conn *conn, const char *why) {
 static void check_idle_conns(void) {
   Conn *conn;
 
-  int verylowvol= lowvol_perperiod[lowvol_circptr];
+  int volthisperiod= lowvol_perperiod[lowvol_circptr];
   lowvol_circptr++;
   lowvol_circptr %= lowvol_periods;
+  lowvol_total += volthisperiod;
   lowvol_total -= lowvol_perperiod[lowvol_circptr];
   lowvol_perperiod[lowvol_circptr]= 0;
 
@@ -1222,9 +1223,9 @@ static void check_idle_conns(void) {
   }
 
   conn= LIST_HEAD(conns);
-  if (!verylowvol &&
+  if (!volthisperiod &&
       conns.count==1 &&
-      lowvol_total+verylowvol < lowvol_thresh &&
+      lowvol_total < lowvol_thresh &&
       !conn_busy(conn))
     conn_idle_close(conn, "low volume");
 }  
@@ -1374,7 +1375,7 @@ static void connect_start(void) {
   assert(!connecting_fdpass_sock);
 
   info("starting connection attempt");
-  int ok_reconnect_delay_periods= reconnect_delay_periods;
+  int ok_until_connect= until_connect;
   reconnect_blocking_event();
 
   int socks[2];
@@ -1470,7 +1471,7 @@ static void connect_start(void) {
   on_fd_read_except(connecting_fdpass_sock, connchild_event);
 
   if (!conns.count)
-    reconnect_delay_periods= ok_reconnect_delay_periods;
+    until_connect= ok_until_connect;
 }
 
 /*---------- assigning articles to conns, and transmitting ----------*/
@@ -3311,11 +3312,11 @@ static void period(void) {
   debug("PERIOD"
        " sms=%s[%d] conns=%d until_connect=%d"
        " input_files main:%s flushing:%s backlog:%s[%d]"
-       " children connecting=%ld inndcomm=%ld"
+       " children connecting=%ld inndcomm=%ld lowvol_total=%d"
        ,
        sms_names[sms], until_flush, conns.count, until_connect,
        dipf_main, dipf_flushing, dipf_backlog, until_backlog_nextscan,
-       (long)connecting_child, (long)inndcomm_child
+       (long)connecting_child, (long)inndcomm_child, lowvol_total
        );
 
   free(dipf_main);
@@ -3406,6 +3407,17 @@ CCMD(dump) {
   DUMPV("%d", , cli_master);
   fprintf(f,"\n");
 
+  fprintf(f,"lowvol");
+  DUMPV("%d", , lowvol_circptr);
+  DUMPV("%d", , lowvol_total);
+  fprintf(f,":");
+  for (i=0; i<lowvol_periods; i++) {
+    fprintf(f," ");
+    if (i==lowvol_circptr) fprintf(f,"*");
+    fprintf(f,"%d",lowvol_perperiod[i]);
+  }
+  fprintf(f,"\n");
+
   fprintf(f,"filemon ");
   filemon_method_dump_info(f);
 
@@ -3774,6 +3786,7 @@ int main(int argc, char **argv) {
     lowvol_perperiod[i]= lowvol_thresh;
     lowvol_total += lowvol_thresh;
   }
+  lowvol_total -= lowvol_thresh;
 
   /* set things up */