viced: convert the fileserver to opr softsig
[openafs.git] / src / viced / viced.c
index 2092cb9..989ad8e 100644 (file)
@@ -46,6 +46,8 @@
 #include <lwp.h>
 #include <opr/lock.h>
 #include <opr/proc.h>
+#include <opr/softsig.h>
+#include <afs/procmgmt_softsig.h> /* must come after softsig.h */
 #include <afs/cmd.h>
 #include <afs/ptclient.h>
 #include <afs/afsint.h>
@@ -69,9 +71,6 @@
 #include <afs/audit.h>
 #include <afs/partition.h>
 #include <afs/dir.h>
-#ifndef AFS_NT40_ENV
-# include <afs/softsig.h>
-#endif
 #include "viced_prototypes.h"
 #include "viced.h"
 #include "host.h"
 
 extern int etext;
 
-void *ShutDown(void *);
 static void ClearXStatValues(void);
 static void PrintCounters(void);
-static void ResetCheckDescriptors(void);
-static void ResetCheckSignal(void);
-static void *CheckSignal(void *);
 
 static afs_int32 Do_VLRegisterRPC(void);
 
@@ -241,10 +236,10 @@ static int fs_stateInit(void)
  */
 
 /* DEBUG HACK */
-static void *
-CheckDescriptors(void *unused)
-{
 #ifndef AFS_NT40_ENV
+void
+CheckDescriptors_Signal(int signo)
+{
     struct afs_stat status;
     int tsize = getdtablesize();
     int i;
@@ -258,28 +253,37 @@ CheckDescriptors(void *unused)
        }
     }
     fflush(stdout);
-    ResetCheckDescriptors();
+}
 #endif
-    return 0;
-}                              /*CheckDescriptors */
-
 
+/* Signal number for dumping debug info is platform dependent. */
+#if defined(AFS_HPUX_ENV)
+# define AFS_SIG_CHECK    SIGPOLL
+#elif defined(AFS_NT40_ENV)
+# define AFS_SIG_CHECK    SIGUSR2
+#else
+# define AFS_SIG_CHECK    SIGXCPU
+#endif
 void
 CheckSignal_Signal(int x)
 {
-    CheckSignal(NULL);
+    if (FS_registered > 0) {
+       /*
+        * We have proper ip addresses; tell the vlserver what we got; the following
+        * routine will do the proper reporting for us
+        */
+       Do_VLRegisterRPC();
+    }
+    h_DumpHosts();
+    h_PrintClients();
+    DumpCallBackState();
+    PrintCounters();
 }
 
 void
 ShutDown_Signal(int x)
 {
-    ShutDown(NULL);
-}
-
-void
-CheckDescriptors_Signal(int x)
-{
-    CheckDescriptors(NULL);
+    ShutDownAndCore(DONTPANIC);
 }
 
 /* check whether caller is authorized to perform admin operations */
@@ -308,34 +312,6 @@ fs_IsLocalRealmMatch(void *rock, char *name, char *inst, char *cell)
     return islocal;
 }
 
-static void
-ResetCheckSignal(void)
-{
-    int signo;
-
-#if defined(AFS_HPUX_ENV)
-    signo = SIGPOLL;
-#elif defined(AFS_NT40_ENV)
-    signo = SIGUSR2;
-#else
-    signo = SIGXCPU;
-#endif
-
-#if !defined(AFS_NT40_ENV)
-    softsig_signal(signo, CheckSignal_Signal);
-#else
-    signal(signo, CheckSignal_Signal);
-#endif
-}
-
-static void
-ResetCheckDescriptors(void)
-{
-#ifndef AFS_NT40_ENV
-    softsig_signal(SIGTERM, CheckDescriptors_Signal);
-#endif
-}
-
 #ifndef AFS_NT40_ENV
 int
 viced_syscall(afs_uint32 a3, afs_uint32 a4, void *a5)
@@ -686,26 +662,6 @@ PrintCounters(void)
 
 }                              /*PrintCounters */
 
-
-
-static void *
-CheckSignal(void *unused)
-{
-    if (FS_registered > 0) {
-       /*
-        * We have proper ip addresses; tell the vlserver what we got; the following
-        * routine will do the proper reporting for us
-        */
-       Do_VLRegisterRPC();
-    }
-    h_DumpHosts();
-    h_PrintClients();
-    DumpCallBackState();
-    PrintCounters();
-    ResetCheckSignal();
-    return 0;
-}                              /*CheckSignal */
-
 static void *
 ShutdownWatchdogLWP(void *unused)
 {
@@ -817,13 +773,6 @@ ShutDownAndCore(int dopanic)
     exit(0);
 }
 
-void *
-ShutDown(void *unused)
-{                              /* backward compatibility */
-    ShutDownAndCore(DONTPANIC);
-    return 0;
-}
-
 static afs_int32
 ParseRights(char *arights)
 {
@@ -1890,22 +1839,20 @@ main(int argc, char *argv[])
     serverLogSyslogTag = "fileserver";
 #endif
     OpenLog(logFile);
-    SetupLogSignals();
 
     LogCommandLine(argc, argv, "starting", "", "File server", FSLog);
     if (afsconf_GetLatestKey(confDir, NULL, NULL) == 0) {
        LogDesWarning();
     }
 
-#if !defined(AFS_NT40_ENV)
     /* initialize the pthread soft signal handler thread */
-    softsig_init();
+    opr_softsig_Init();
+    SetupLogSoftSignals();
+    opr_softsig_Register(AFS_SIG_CHECK, CheckSignal_Signal);
+#ifndef AFS_NT40_ENV
+    opr_softsig_Register(SIGTERM, CheckDescriptors_Signal);
 #endif
 
-    /* install signal handlers for controlling the fileserver process */
-    ResetCheckSignal();                /* set CheckSignal_Signal() sig handler */
-    ResetCheckDescriptors();   /* set CheckDescriptors_Signal() sig handler */
-
 #if defined(AFS_SGI_ENV)
     /* give this guy a non-degrading priority so help busy servers */
     schedctl(NDPRI, 0, NDPNORMMAX);
@@ -2147,11 +2094,7 @@ main(int argc, char *argv[])
     /* Install handler to catch the shutdown signal;
      * bosserver assumes SIGQUIT shutdown
      */
-#if !defined(AFS_NT40_ENV)
-    softsig_signal(SIGQUIT, ShutDown_Signal);
-#else
-    (void)signal(SIGQUIT, ShutDown_Signal);
-#endif
+    opr_softsig_Register(SIGQUIT, ShutDown_Signal);
 
     if (VInitAttachVolumes(fileServer)) {
        ViceLog(0,