Extend NSIG to 64 and introduce a registration function for the checkpointing
authorMatthew Dillon <dillon@dragonflybsd.org>
Mon, 13 Oct 2003 18:12:07 +0000 (18:12 +0000)
committerMatthew Dillon <dillon@dragonflybsd.org>
Mon, 13 Oct 2003 18:12:07 +0000 (18:12 +0000)
signal to support the checkpoint module.  This is somewhat of a hack at the
moment but will be cleaned up later.

Submitted-by: Kip Macy <kmacy@fsmware.com>
sys/kern/kern_sig.c
sys/sys/signal.h
sys/sys/signalvar.h

index 589dd90..1fdc3b9 100644 (file)
@@ -37,7 +37,7 @@
  *
  *     @(#)kern_sig.c  8.7 (Berkeley) 4/18/94
  * $FreeBSD: src/sys/kern/kern_sig.c,v 1.72.2.17 2003/05/16 16:34:34 obrien Exp $
- * $DragonFly: src/sys/kern/kern_sig.c,v 1.20 2003/09/29 18:52:06 dillon Exp $
+ * $DragonFly: src/sys/kern/kern_sig.c,v 1.21 2003/10/13 18:12:05 dillon Exp $
  */
 
 #include "opt_compat.h"
@@ -136,6 +136,8 @@ SYSCTL_INT(_kern, OID_AUTO, coredump, CTLFLAG_RW,
 #define        SA_IGNORE       0x10            /* ignore by default */
 #define        SA_CONT         0x20            /* continue if suspended */
 #define        SA_CANTMASK     0x40            /* non-maskable, catchable */
+#define SA_CKPT         0x80            /* checkpoint process */
+
 
 static int sigproptbl[NSIG] = {
         SA_KILL,                /* SIGHUP */
@@ -169,6 +171,40 @@ static int sigproptbl[NSIG] = {
         SA_IGNORE,              /* SIGINFO */
         SA_KILL,                /* SIGUSR1 */
         SA_KILL,                /* SIGUSR2 */
+       SA_IGNORE,              /* SIGTHR */
+       SA_CKPT,                /* SIGCKPT */ 
+       SA_KILL|SA_CKPT,        /* SIGCKPTEXIT */  
+       SA_IGNORE,
+       SA_IGNORE,
+       SA_IGNORE,
+       SA_IGNORE,
+       SA_IGNORE,
+       SA_IGNORE,
+       SA_IGNORE,
+       SA_IGNORE,
+       SA_IGNORE,
+       SA_IGNORE,
+       SA_IGNORE,
+       SA_IGNORE,
+       SA_IGNORE,
+       SA_IGNORE,
+       SA_IGNORE,
+       SA_IGNORE,
+       SA_IGNORE,
+       SA_IGNORE,
+       SA_IGNORE,
+       SA_IGNORE,
+       SA_IGNORE,
+       SA_IGNORE,
+       SA_IGNORE,
+       SA_IGNORE,
+       SA_IGNORE,
+       SA_IGNORE,
+       SA_IGNORE,
+       SA_IGNORE,
+       SA_IGNORE,
+       SA_IGNORE,
+
 };
 
 static __inline int
@@ -883,6 +919,23 @@ trapsignal(p, sig, code)
  * Other ignored signals are discarded immediately.
  */
 
+/*
+ * temporary hack to allow checkpoint code to continue to
+ * be in a module for the moment
+ */
+
+static proc_func_t ckpt_func;
+
+proc_func_t
+register_ckpt_func(proc_func_t func) 
+{
+       proc_func_t old_func;
+
+       old_func = ckpt_func;
+       ckpt_func = func;
+       return (old_func);
+}
+
 void
 psignal(p, sig)
        struct proc *p;
@@ -933,6 +986,7 @@ psignal(p, sig)
 
        if (prop & SA_CONT)
                SIG_STOPSIGMASK(p->p_siglist);
+       
 
        if (prop & SA_STOP) {
                /*
@@ -948,6 +1002,14 @@ psignal(p, sig)
        }
        SIGADDSET(p->p_siglist, sig);
 
+       if (prop & SA_CKPT && action == SIG_DFL) {
+               SIGDELSET(p->p_siglist, sig);           
+               if (ckpt_func) 
+                       ckpt_func(p);
+               if (prop & SA_KILL) 
+                       SIGADDSET(p->p_siglist, SIGKILL);               
+       }
+
        /*
         * Defer further processing for signals which are held,
         * except that stopped processes must be continued by SIGCONT.
index 34a3d83..1139553 100644 (file)
@@ -37,7 +37,7 @@
  *
  *     @(#)signal.h    8.4 (Berkeley) 5/4/95
  * $FreeBSD: src/sys/sys/signal.h,v 1.23.2.2 2001/04/19 01:38:35 alfred Exp $
- * $DragonFly: src/sys/sys/signal.h,v 1.3 2003/08/20 07:31:21 rob Exp $
+ * $DragonFly: src/sys/sys/signal.h,v 1.4 2003/10/13 18:12:07 dillon Exp $
  */
 
 #ifndef        _SYS_SIGNAL_H_
 #endif
 #define        SIGUSR1         30      /* user defined signal 1 */
 #define        SIGUSR2         31      /* user defined signal 2 */
+#if __BSD_VISIBLE
+#define SIGTHR          32      /* Thread interrupt (FreeBSD-5 reserved) */
+#define SIGCKPT         33      /* checkpoint and continue */
+#define SIGCKPTEXIT     34      /* checkpoint and exit */
+#endif
 
 /*-
  * Type of a signal handling function.
@@ -214,7 +219,7 @@ struct      sigaction {
 #define        SA_USERTRAMP    0x0100  /* do not bounce off kernel's sigtramp */
 #endif
 
-#define NSIG           32      /* number of old signals (counting 0) */
+#define NSIG           64      /* size of sigptbl */
 
 /* POSIX 1003.1b required values. */
 #define SI_USER                0x10001
index 4544f9b..401ee16 100644 (file)
@@ -32,7 +32,7 @@
  *
  *     @(#)signalvar.h 8.6 (Berkeley) 2/19/95
  * $FreeBSD: src/sys/sys/signalvar.h,v 1.34.2.1 2000/05/16 06:58:05 dillon Exp $
- * $DragonFly: src/sys/sys/signalvar.h,v 1.5 2003/08/20 07:31:21 rob Exp $
+ * $DragonFly: src/sys/sys/signalvar.h,v 1.6 2003/10/13 18:12:07 dillon Exp $
  */
 
 #ifndef        _SYS_SIGNALVAR_H_               /* tmp for user.h */
@@ -190,6 +190,8 @@ __sigseteq(sigset_t *set1, sigset_t *set2)
 
 #ifdef _KERNEL
 
+typedef void (*proc_func_t)(struct proc *);
+
 struct pgrp;
 struct proc;
 struct sigio;
@@ -211,6 +213,8 @@ void        psignal (struct proc *p, int sig);
 void   siginit (struct proc *p);
 void   trapsignal (struct proc *p, int sig, u_long code);
 int    __cursig (struct proc *p);
+proc_func_t register_ckpt_func(proc_func_t func);
+
 
 /*
  * Machine-dependent functions: