summaryrefslogtreecommitdiff
path: root/nuttx/include/signal.h
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2013-01-12 19:58:45 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2013-01-12 19:58:45 +0000
commit499c8c86de6757b39eaaf0f2b96a5b070f085b9b (patch)
tree84c6da5c61268158365bdafe58f546b34a0b8a91 /nuttx/include/signal.h
parent5a180ec4940c993311eedddaa13194f9977968f1 (diff)
downloadnuttx-499c8c86de6757b39eaaf0f2b96a5b070f085b9b.tar.gz
nuttx-499c8c86de6757b39eaaf0f2b96a5b070f085b9b.tar.bz2
nuttx-499c8c86de6757b39eaaf0f2b96a5b070f085b9b.zip
Fix a *critical* bug in the task exit logic. Implements SIGCHILD
git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@5513 42af7a65-404d-4744-a932-0658087f49c3
Diffstat (limited to 'nuttx/include/signal.h')
-rw-r--r--nuttx/include/signal.h68
1 files changed, 45 insertions, 23 deletions
diff --git a/nuttx/include/signal.h b/nuttx/include/signal.h
index 02b222343..30726105b 100644
--- a/nuttx/include/signal.h
+++ b/nuttx/include/signal.h
@@ -66,44 +66,56 @@
/* A few of the real time signals are used within the OS. They have
* default values that can be overridden from the configuration file. The
- * rest are all user signals:
+ * rest are all user signals.
+ *
+ * These are semi-standard signal definitions:
*/
#ifndef CONFIG_SIG_SIGUSR1
-#define SIGUSR1 0 /* User signal 1 */
+# define SIGUSR1 1 /* User signal 1 */
#else
-#define SIGUSR1 CONFIG_SIG_SIGUSR1
+# define SIGUSR1 CONFIG_SIG_SIGUSR1
#endif
#ifndef CONFIG_SIG_SIGUSR2
-#define SIGUSR2 1 /* User signal 2 */
+# define SIGUSR2 2 /* User signal 2 */
#else
-#define SIGUSR2 CONFIG_SIG_SIGUSR2
+# define SIGUSR2 CONFIG_SIG_SIGUSR2
#endif
#ifndef CONFIG_SIG_SIGALARM
-#define SIGALRM 2 /* Default signal used with POSIX timers (used only */
+# define SIGALRM 3 /* Default signal used with POSIX timers (used only */
/* no other signal is provided) */
#else
-#define SIGALRM CONFIG_SIG_SIGALARM
+# define SIGALRM CONFIG_SIG_SIGALARM
#endif
-#ifndef CONFIG_DISABLE_PTHREAD
-#ifndef CONFIG_SIG_SIGCONDTIMEDOUT
-#define SIGCONDTIMEDOUT 3 /* Used in the implementation of pthread_cond_timedwait */
-#else
-#define SIGCONDTIMEDOUT CONFIG_SIG_SIGCONDTIMEDOUT
+#ifdef CONFIG_SCHED_HAVE_PARENT
+# ifndef CONFIG_SIG_SIGCHLD
+# define SIGCHLD 4 /* Used by child threads to signal parent thread */
+# else
+# define SIGCHLD CONFIG_SIG_SIGCHLD
+# endif
#endif
+
+/* The following are non-standard signal definitions */
+
+#ifndef CONFIG_DISABLE_PTHREAD
+# ifndef CONFIG_SIG_SIGCONDTIMEDOUT
+# define SIGCONDTIMEDOUT 16 /* Used in the implementation of pthread_cond_timedwait */
+# else
+# define SIGCONDTIMEDOUT CONFIG_SIG_SIGCONDTIMEDOUT
+# endif
#endif
/* SIGWORK is used to wake up various internal, NuttX worker thread */
#if defined(CONFIG_SCHED_WORKQUEUE) || defined(CONFIG_PAGING)
-#ifndef CONFIG_SIG_SIGWORK
-#define SIGWORK 4 /* Used to wake up the work queue */
-#else
-#define SIGWORK CONFIG_SIG_SIGWORK
-#endif
+# ifndef CONFIG_SIG_SIGWORK
+# define SIGWORK 17 /* Used to wake up the work queue */
+# else
+# define SIGWORK CONFIG_SIG_SIGWORK
+# endif
#endif
/* sigprocmask() "how" definitions. Only one of the following can be specified: */
@@ -122,12 +134,18 @@
/* These are the possible values of the signfo si_code field */
-#define SI_USER 0 /* Signal sent from kill, raise, or abort */
-#define SI_QUEUE 1 /* Signal sent from sigqueue */
-#define SI_TIMER 2 /* Signal is result of timer expiration */
-#define SI_ASYNCIO 3 /* Signal is the result of asynch IO completion */
-#define SI_MESGQ 4 /* Signal generated by arrival of a message on an */
- /* empty message queue */
+#define SI_USER 0 /* Signal sent from kill, raise, or abort */
+#define SI_QUEUE 1 /* Signal sent from sigqueue */
+#define SI_TIMER 2 /* Signal is result of timer expiration */
+#define SI_ASYNCIO 3 /* Signal is the result of asynch IO completion */
+#define SI_MESGQ 4 /* Signal generated by arrival of a message on an */
+ /* empty message queue */
+#define CLD_EXITED 5 /* Child has exited (SIGCHLD only) */
+#define CLD_KILLED 6 /* Child was killed (SIGCHLD only) */
+#define CLD_DUMPED 7 /* Child terminated abnormally (SIGCHLD only) */
+#define CLD_TRAPPED 8 /* Traced child has trapped (SIGCHLD only) */
+#define CLD_STOPPED 9 /* Child has stopped (SIGCHLD only) */
+#define CLD_CONTINUED 10 /* Stopped child had continued (SIGCHLD only) */
/* Values for the sigev_notify field of struct sigevent */
@@ -175,6 +193,10 @@ struct siginfo
uint8_t si_signo; /* Identifies signal */
uint8_t si_code; /* Source: SI_USER, SI_QUEUE, SI_TIMER, SI_ASYNCIO, or SI_MESGQ */
union sigval si_value; /* Data passed with signal */
+#ifdef CONFIG_SCHED_HAVE_PARENT
+ pid_t si_pid; /* Sending task ID */
+ int si_status; /* Exit value or signal (SIGCHLD only). */
+#endif
};
typedef struct siginfo siginfo_t;