fateshare: Add FreeBSD specific API for controlling processes 11/40611/2
authorTom Jones <thj@freebsd.org>
Thu, 8 Feb 2024 14:55:36 +0000 (14:55 +0000)
committerDamjan Marion <dmarion@0xa5.net>
Wed, 24 Apr 2024 12:30:01 +0000 (12:30 +0000)
Type: improvement
Change-Id: I7ea8b5505a2663d6751208f0001e4b9ba2deb150
Signed-off-by: Tom Jones <thj@freebsd.org>
src/plugins/fateshare/fateshare.c
src/plugins/fateshare/vpp_fateshare_monitor.c

index 37cd030..971d323 100644 (file)
 
 #include <sys/types.h>
 #include <sys/wait.h>
+#ifdef __linux__
 #include <sys/prctl.h> // prctl(), PR_SET_PDEATHSIG
+#else
+#include <sys/procctl.h>
+#endif /* __linux__ */
 #include <limits.h>
 
 fateshare_main_t fateshare_main;
@@ -87,12 +91,23 @@ launch_monitor (fateshare_main_t *kmp)
     {
       dup2 (logfd, 1);
       dup2 (logfd, 2);
+#ifdef __linux__
       int r = prctl (PR_SET_PDEATHSIG, SIGTERM);
       if (r == -1)
        {
          perror (0);
          exit (1);
        }
+#else
+      int r, s = SIGTERM;
+
+      r = procctl (P_PID, 0, PROC_PDEATHSIG_CTL, &s);
+      if (r == -1)
+       {
+         perror (0);
+         exit (1);
+       }
+#endif /* __linux__ */
       pid_t current_ppid = getppid ();
       if (current_ppid != ppid_before_fork)
        {
index 7b20388..7af451c 100644 (file)
@@ -4,7 +4,12 @@
 
 #include <sys/types.h>
 #include <sys/wait.h>
+#ifdef __linux__
 #include <sys/prctl.h> // prctl(), PR_SET_PDEATHSIG
+#else
+#include <signal.h>
+#include <sys/procctl.h>
+#endif /* __linux__ */
 
 #include <sys/stat.h>
 #include <fcntl.h>
@@ -82,6 +87,7 @@ launch_command (char *scmd, char *logname_base)
     }
 
   /* child */
+#ifdef __linux__
   int r = prctl (PR_SET_PDEATHSIG, SIGTERM);
   if (r == -1)
     {
@@ -89,6 +95,17 @@ launch_command (char *scmd, char *logname_base)
       sleep (5);
       exit (1);
     }
+#else
+  int r, s = SIGTERM;
+
+  r = procctl (P_PID, 0, PROC_PDEATHSIG_CTL, &s);
+  if (r == -1)
+    {
+      perror ("procctl");
+      exit (1);
+    }
+#endif /* __linux__ */
+
   if (getppid () != ppid_before_fork)
     {
       sleep (5);
@@ -180,12 +197,23 @@ main (int argc, char **argv)
       exit (2);
     }
 
+#ifdef __linux__
   int r = prctl (PR_SET_PDEATHSIG, SIGTERM);
   if (r == -1)
     {
       perror (0);
       exit (1);
     }
+#else
+  int r, s = SIGTERM;
+
+  r = procctl (P_PID, 0, PROC_PDEATHSIG_CTL, &s);
+  if (r == -1)
+    {
+      perror ("procctl");
+      exit (1);
+    }
+#endif /* __linux__ */
 
   /* Establish handler. */
   struct sigaction sa;