[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    icecream/services
From:       Stephan Kulow <coolo () kde ! org>
Date:       2007-04-27 12:34:00
Message-ID: 1177677240.785354.7353.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 658488 by coolo:

merge in 658486


 M  +21 -15    scheduler.cpp  


--- trunk/icecream/services/scheduler.cpp #658487:658488
@@ -178,7 +178,7 @@
 unsigned int CS::hostid_counter = 0;
 
 static map<int, MsgChannel *> fd2chan;
-static bool allow_run_as_user = false;
+static bool exit_main_loop = false;
 
 time_t starttime;
 
@@ -788,7 +788,7 @@
         }
 
       /* Don't use non-chroot-able daemons for remote jobs.  XXX */
-      if (!allow_run_as_user && !cs->chroot_possible)
+      if (!cs->chroot_possible)
         {
 	  trace() << cs->nodename << " can't use chroot\n";
 	  continue;
@@ -1106,7 +1106,7 @@
 
   /* If we don't allow non-chroot-able daemons in the farm,
      discard them here.  */
-  if (!allow_run_as_user && !m->chroot_possible)
+  if (!m->chroot_possible)
     return false;
 
   std::ostream& dbg = trace();
@@ -1805,16 +1805,25 @@
        << "  -h, --help\n"
        << "  -l, --log-file <file>\n"
        << "  -d, --daemonize\n"
-       << "  -r, --allow-run-as-user\n"
        << "  -v[v[v]]]\n"
        << endl;
 
   exit(1);
 }
 
-void removePidFile( int )
+static void
+trigger_exit( int signum )
 {
-  unlink(pidFilePath.c_str());
+  if (!exit_main_loop)
+    exit_main_loop = true;
+  else
+    {
+      // hmm, we got killed already. try better
+      cerr << "forced exit." << endl;
+      _exit(1);
+    }
+  // make BSD happy
+  signal(signum, trigger_exit);
 }
 
 int
@@ -1837,7 +1846,6 @@
       { "port", 0, NULL, 'p' },
       { "daemonize", 0, NULL, 'd'},
       { "log-file", 1, NULL, 'l'},
-      { "allow-run-as-user", 1, NULL, 'u' },
       { 0, 0, 0, 0 }
     };
 
@@ -1885,10 +1893,6 @@
         usage("Error: -p requires argument");
       break;
 
-    case 'r':
-      allow_run_as_user = true;
-      break;
-
     default:
       usage();
     }
@@ -1927,11 +1931,11 @@
   pidFile << getpid() << endl;
   pidFile.close();
 
-  signal(SIGTERM, removePidFile);
-  signal(SIGINT, removePidFile);
-  signal(SIGALRM, removePidFile);
+  signal(SIGTERM, trigger_exit);
+  signal(SIGINT, trigger_exit);
+  signal(SIGALRM, trigger_exit);
 
-  while (1)
+  while (!exit_main_loop)
     {
       struct timeval tv;
       tv.tv_usec = 0;
@@ -2092,6 +2096,8 @@
         }
     }
   close (broad_fd);
+  shutdown (broad_fd, SHUT_RDWR);
+  unlink(pidFilePath.c_str());
   return 0;
 }
 /*
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic