]> mj.ucw.cz Git - libucw.git/commitdiff
Made main_loop() exit if there is nothing to do.
authorMartin Mares <mj@ucw.cz>
Sun, 13 Nov 2005 16:13:30 +0000 (16:13 +0000)
committerMartin Mares <mj@ucw.cz>
Sun, 13 Nov 2005 16:13:30 +0000 (16:13 +0000)
Also added a guard against multiple inclusion.

lib/mainloop.c
lib/mainloop.h

index 7986944e833a130a8295806ca46724bc9dc84680..544a7b7d47ea8faf705ac060ac2249ef29d639bf 100644 (file)
@@ -345,7 +345,7 @@ main_rebuild_poll_table(void)
   main_poll_table_obsolete = 0;
 }
 
-void
+int
 main_loop(void)
 {
   DBG("MAIN: Entering main_loop");
@@ -357,7 +357,7 @@ main_loop(void)
   struct main_process *pr;
   cnode *tmp;
 
-  while (!main_shutdown)
+  for (;;)
     {
       main_get_time();
       timestamp_t wake = main_now + 1000000000;
@@ -395,8 +395,19 @@ main_loop(void)
              wake = 0;
            }
        }
+      if (clist_empty(&main_file_list) &&
+         clist_empty(&main_timer_list) &&
+         clist_empty(&main_hook_list) &&
+         clist_empty(&main_process_list))
+       {
+         DBG("MAIN: Nothing to do, exiting");
+         return 0;
+       }
       if (main_shutdown)
-       break;
+       {
+         DBG("MAIN: Shutdown");
+         return 1;
+       }
       /* FIXME: Here is a small race window where SIGCHLD can come unnoticed. */
       if ((tm = clist_head(&main_timer_list)) && tm->expires < wake)
        wake = tm->expires;
index 1e1adf38a1ad62887340711ded51e4d0d700294d..a8626f0345c2672ef20883cb2edd2e2b6b05d83b 100644 (file)
@@ -7,6 +7,9 @@
  *     of the GNU Lesser General Public License.
  */
 
+#ifndef _UCW_MAINLOOP_H
+#define _UCW_MAINLOOP_H
+
 #include "lib/clists.h"
 
 typedef s64 timestamp_t;                       /* We measure time in milliseconds */
@@ -93,5 +96,7 @@ int process_fork(struct main_process *mp);
 /* The main loop */
 
 void main_init(void);
-void main_loop(void);
+int main_loop(void);
 void main_debug(void);
+
+#endif