Blob Blame History Raw
--- coda-6.9.3/coda-src/vice/srv.cc.sigterm	2007-12-29 00:25:33.000000000 +0100
+++ coda-6.9.3/coda-src/vice/srv.cc	2008-05-15 15:50:29.000000000 +0200
@@ -194,6 +194,7 @@ static int chk = 0;		// default 30
 static int ForceSalvage = 0;	// default 1
 static int SalvageOnShutdown = 0; // default 0 */
 
+static PROCESS CheckPid;
 static int ViceShutDown = 0;
 static int Statistics;
 
@@ -246,6 +247,7 @@ static void ClearCounters();
 static void FileMsg();
 static void SetDebug(int ign);
 static void ResetDebug(int ign);
+static void SigTerm(int ign);
 static void ShutDown();
 
 static int ReadConfigFile(void);
@@ -521,7 +523,7 @@ int main(int argc, char *argv[])
 				  (void *)&cbwait, "CheckCallBack", &serverPid) == LWP_SUCCESS);
 
     CODA_ASSERT(LWP_CreateProcess(CheckLWP, stack*1024, LWP_NORMAL_PRIORITY,
-				  (void *)&chk, "Check", &serverPid) == LWP_SUCCESS);
+				  (void *)&chk, "Check", &CheckPid) == LWP_SUCCESS);
 
     for (i=0; i < auth_lwps; i++) {
 	sprintf(sname, "AuthLWP-%d",i);
@@ -860,7 +862,6 @@ static void CallBackCheckLWP(void *arg)
 
 static void CheckLWP(void *arg)
 {
-    struct timeval  time;
     struct timeval  tpl;
     struct timezone tspl;
     ProgramType *pt;
@@ -879,11 +880,9 @@ static void CheckLWP(void *arg)
 
 
     SLog(1, "Starting Check process");
-    time.tv_sec = chk;
-    time.tv_usec = 0;
 
     while (1) {
-	if (IOMGR_Select(0, 0, 0, 0, &time) == 0) {
+	    LWP_QWait();
 	    if(ViceShutDown) {
 		ProgramType *pt, tmp_pt;
 
@@ -898,9 +897,6 @@ static void CheckLWP(void *arg)
 	    	ShutDown();
 		*pt = tmp_pt;
 	    }
-
-	    if(time.tv_sec != chk) time.tv_sec = chk;
-	  }
     }
 }
 
@@ -1197,6 +1193,13 @@ static void ResetDebug(int ign)
     SLog(0, "Reset Debug levels to 0");
 }
 
+static void SigTerm(int ign)
+{
+    ViceShutDown = 1;
+    SLog(0, "SigTerm received, shutting down");
+    LWP_QSignal(CheckPid);
+}
+
 /*
   BEGIN_HTML
   <a name="SwapMalloc"><strong>Toggle tracing of recoverable(rds) mallocs  </strong></a> 
@@ -1295,6 +1298,7 @@ void ViceTerminate()
 {
     ViceShutDown = 1;
     SLog(0, "Shutdown received");
+    LWP_QSignal(CheckPid);
 }
 
 
@@ -1683,6 +1687,9 @@ static int DaemonizeSrv(const char *pidf
     memset(&sa, 0, sizeof(sa));
     sa.sa_flags = SA_RESTART;
     
+    sa.sa_handler = SigTerm;
+    sigaction(SIGTERM, &sa, NULL);
+
     sa.sa_handler = ResetDebug;
     sigaction(SIGUSR2, &sa, NULL);