]> Zhao Yanbai Git Server - minix.git/commitdiff
Move kernel signal SIGKNDELAY to system signal SIGSNDELAY and fix broken ptrace.
authorCristiano Giuffrida <cristiano@minix3.org>
Wed, 31 Mar 2010 08:55:12 +0000 (08:55 +0000)
committerCristiano Giuffrida <cristiano@minix3.org>
Wed, 31 Mar 2010 08:55:12 +0000 (08:55 +0000)
include/signal.h
kernel/system.c
kernel/system/do_runctl.c
lib/libsys/sef_signal.c
servers/pm/signal.c

index eed41180f161e12d1203eb73ca8239a74f3efe27..c4976ee800660eead61b157128d5665269dc7cdf 100644 (file)
@@ -67,15 +67,22 @@ typedef unsigned long sigset_t;
  * The order here determines the order signals are processed by system
  * processes in user-space. Higher-priority signals should be first.
  */
-#define SIGKPF           26    /* kernel page fault request pending */
-#define SIGKMEM                  27    /* kernel memory request pending */
-#define SIGKMESS         28    /* new kernel message */
-#define SIGKSIGSM        29    /* kernel signal pending for signal manager */
-#define SIGKSIG          30    /* kernel signal pending */
-#define SIGKNDELAY       31    /* end of delay for signal delivery */
+/* Signals delivered by a signal manager. */
+#define SIGSNDELAY       26    /* end of delay for signal delivery */
+
+#define SIGS_FIRST       SIGHUP      /* first system signal */
+#define SIGS_LAST        SIGSNDELAY   /* last system signal */
+#define IS_SIGS(signo)    (signo>=SIGS_FIRST && signo<=SIGS_LAST)
+
+/* Signals delivered by the kernel. */
+#define SIGKPF           27    /* kernel page fault request pending */
+#define SIGKMEM                  28    /* kernel memory request pending */
+#define SIGKMESS         29    /* new kernel message */
+#define SIGKSIGSM        30    /* kernel signal pending for signal manager */
+#define SIGKSIG          31    /* kernel signal pending */
 
 #define SIGK_FIRST       SIGKPF      /* first kernel signal */
-#define SIGK_LAST        SIGKNDELAY   /* last kernel signal */
+#define SIGK_LAST        SIGKSIG     /* last kernel signal */
 #define IS_SIGK(signo)    (signo>=SIGK_FIRST && signo<=SIGK_LAST)
 
 /* Termination signals for Minix system processes. */
index 8c20dc4692393ab7f33cdcd4df2c454e3830784e..e0344bd756e62f3f0854bbd4bbe0c6dfe2179a22 100644 (file)
@@ -401,7 +401,7 @@ PUBLIC void sig_delay_done(struct proc *rp)
 
   rp->p_misc_flags &= ~MF_SIG_DELAY;
 
-  cause_sig(proc_nr(rp), SIGKNDELAY);
+  cause_sig(proc_nr(rp), SIGSNDELAY);
 }
 
 #if _MINIX_CHIP == _CHIP_INTEL
index fb0a7055849ced646f11d6a4d749a4750445dec6..e1da8b5d8722e8832109c3244aefe7298e95999a 100644 (file)
@@ -19,7 +19,7 @@ PUBLIC int do_runctl(struct proc * caller, message * m_ptr)
 /* Control a process's RTS_PROC_STOP flag. Used for process management.
  * If the process is queued sending a message or stopped for system call
  * tracing, and the RC_DELAY request flag is given, set MF_SIG_DELAY instead
- * of RTS_PROC_STOP, and send a SIGKNDELAY signal later when the process is done
+ * of RTS_PROC_STOP, and send a SIGSNDELAY signal later when the process is done
  * sending (ending the delay). Used by PM for safe signal delivery.
  */
   int proc_nr, action, flags, delayed;
index 9d88938d90d192ee10799a268aa94bb834ffc79e..76a23d90792d05c3155eedb860bfd6d5089ff6f2 100644 (file)
@@ -42,7 +42,7 @@ PRIVATE void process_sigmgr_signals(void)
       } else {
           /* Process every signal in the signal set. */
           r = OK;
-          for(signo = 1; signo < _NSIG; signo++) {
+          for (signo = SIGS_FIRST; signo <= SIGS_LAST; signo++) {
               if(sigismember(&sigset, signo)) {
                   /* Let the callback code process the signal. */
                   r = sef_cbs.sef_cb_signal_manager(target, signo);
@@ -70,7 +70,7 @@ PRIVATE void process_sigmgr_self_signals(sigset_t sigset)
 /* A signal manager has pending signals for itself. Process them. */
   int signo;
 
-  for(signo = 1; signo < _NSIG; signo++) {
+  for (signo = SIGS_FIRST; signo <= SIGS_LAST; signo++) {
       if(sigismember(&sigset, signo)) {
           /* Let the callback code process the signal. */
           sef_cbs.sef_cb_signal_handler(signo);
index 125566436b51b53b399cbed13f67177f1a5d1906..84b0cafe53c1fc9f0013329765f84fcad3a4ca74 100644 (file)
@@ -256,14 +256,14 @@ int signo;
   }
   check_sig(id, signo, TRUE /* ksig */);
 
-  /* If SIGKNDELAY is set, an earlier sys_stop() failed because the process was
+  /* If SIGSNDELAY is set, an earlier sys_stop() failed because the process was
    * still sending, and the kernel hereby tells us that the process is now done
    * with that. We can now try to resume what we planned to do in the first
    * place: set up a signal handler. However, the process's message may have
    * been a call to PM, in which case the process may have changed any of its
    * signal settings. The process may also have forked, exited etcetera.
    */
-  if (signo == SIGKNDELAY && (rmp->mp_flags & DELAY_CALL)) {
+  if (signo == SIGSNDELAY && (rmp->mp_flags & DELAY_CALL)) {
        rmp->mp_flags &= ~DELAY_CALL;
 
        if (rmp->mp_flags & (FS_CALL | PM_SIG_PENDING))
@@ -639,7 +639,7 @@ struct mproc *rmp;          /* which process */
        r = sys_delay_stop(rmp->mp_endpoint);
 
        /* If the process is still busy sending a message, the kernel will give
-        * us EBUSY now and send a SIGKNDELAY to the process as soon as sending
+        * us EBUSY now and send a SIGSNDELAY to the process as soon as sending
         * is done.
         */
        if (r == EBUSY) {