counter loop % usage only worked if counters were an exact multiple of
authorSamba Release Account <samba-bugs@samba.org>
Sun, 13 Jul 1997 14:05:01 +0000 (14:05 +0000)
committerSamba Release Account <samba-bugs@samba.org>
Sun, 13 Jul 1997 14:05:01 +0000 (14:05 +0000)
SMBD_LOOP time.  used >= instead.

lkcl
(This used to be commit c881dff3bfaa370b5eb4324217796d186572a9e3)

source3/smbd/server.c

index 528e4769ea42df64c94e9c0dfddc827a2c286c41..83bb09b11fa43c26e0fd22e721a0cee91bf12a67 100644 (file)
@@ -3886,6 +3886,9 @@ static void process(void)
       int deadtime = lp_deadtime()*60;
       int counter;
       int last_keepalive=0;
+      int service_load_counter = 0;
+      int share_check_counter = 0;
+      int share_clean_counter = 0;
 
       if (deadtime <= 0)
        deadtime = DEFAULT_SMBD_TIMEOUT;
@@ -3904,6 +3907,14 @@ static void process(void)
          BOOL allidle = True;
          extern int keepalive;
 
+      if (counter > 365 * 3600) /* big number of seconds. */
+      {
+        counter = 0;
+        share_check_counter = 0;
+        share_clean_counter = 0;
+        service_load_counter = 0;
+      }
+
          if (smb_read_error == READ_EOF) {
            DEBUG(3,("end of file from client\n"));
            return;
@@ -3921,17 +3932,31 @@ static void process(void)
          unbecome_user();
 
          /* check for smb.conf reload */
-         if (!(counter%SMBD_RELOAD_CHECK))
+         if (counter >= service_load_counter + SMBD_RELOAD_CHECK)
+      {
+        service_load_counter = counter;
+
+        /* remove all unused services.  reduce some of that memory overhead. */
+        lp_killunused(snum_used);
+
+        /* reload services, if files have changed. */
            reload_services(True);
+      }
 
 #if 0 /* JRA */
          /* check the share modes every 10 secs */
-         if (!(counter%SHARE_MODES_CHECK))
+         if (counter >= share_check_counter + SHARE_MODES_CHECK)
+      {
+        share_check_counter = counter;
            check_share_modes();
+      }
 
          /* clean the share modes every 5 minutes */
-         if (!(counter%SHARE_MODES_CLEAN))
+         if (counter >= share_clean_counter + SHARE_MODES_CLEAN)
+      {
+        share_clean_counter = counter;
            clean_share_modes();
+      }
 #endif /* JRA */
 
          /* automatic timeout if all connections are closed */