diff options
| author | Bernard Xiong <[email protected]> | 2018-03-01 14:08:53 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2018-03-01 14:08:53 +0800 |
| commit | 44def114fb05bfff3556f70186cc4a74400dc217 (patch) | |
| tree | 2b7acaf70ec61499d4266d74a8c0551a85260111 /include | |
| parent | ef668bc3aa99992208ba6808fe430e5d00849b2f (diff) | |
| parent | 38b9ed3118f7df9fd683b9d3bd4425ab604ee2bc (diff) | |
Merge pull request #1241 from BernardXiong/feature_signal
[Kernel] add sigwait implementation
Diffstat (limited to 'include')
| -rw-r--r-- | include/libc/libc_signal.h | 38 | ||||
| -rw-r--r-- | include/rtdef.h | 4 | ||||
| -rw-r--r-- | include/rtthread.h | 1 |
3 files changed, 24 insertions, 19 deletions
diff --git a/include/libc/libc_signal.h b/include/libc/libc_signal.h index cc4552f990..dabcad1a34 100644 --- a/include/libc/libc_signal.h +++ b/include/libc/libc_signal.h @@ -30,6 +30,7 @@ extern "C" { #endif +#ifndef HAVE_SYS_SIGNALS /* Signal Generation and Delivery, P1003.1b-1993, p. 63 NOTE: P1003.1c/D10, p. 34 adds sigev_notify_function and sigev_notify_attributes to the sigevent structure. */ @@ -59,14 +60,15 @@ struct siginfo union sigval si_value; }; typedef struct siginfo siginfo_t; +#endif -#define SI_USER 0x01 /* Signal sent by kill(). */ -#define SI_QUEUE 0x02 /* Signal sent by sigqueue(). */ -#define SI_TIMER 0x03 /* Signal generated by expiration of a +#define SI_USER 0x01 /* Signal sent by kill(). */ +#define SI_QUEUE 0x02 /* Signal sent by sigqueue(). */ +#define SI_TIMER 0x03 /* Signal generated by expiration of a timer set by timer_settime(). */ -#define SI_ASYNCIO 0x04 /* Signal generated by completion of an - asynchronous I/O request. */ -#define SI_MESGQ 0x05 /* Signal generated by arrival of a +#define SI_ASYNCIO 0x04 /* Signal generated by completion of an + asynchronous I/O request. */ +#define SI_MESGQ 0x05 /* Signal generated by arrival of a message on an empty message queue. */ #ifdef RT_USING_NEWLIB @@ -107,17 +109,17 @@ typedef unsigned long sigset_t; #define SIGRTMAX 31 #define NSIG 32 -#define SIG_SETMASK 0 /* set mask with sigprocmask() */ -#define SIG_BLOCK 1 /* set of signals to block */ -#define SIG_UNBLOCK 2 /* set of signals to, well, unblock */ +#define SIG_SETMASK 0 /* set mask with sigprocmask() */ +#define SIG_BLOCK 1 /* set of signals to block */ +#define SIG_UNBLOCK 2 /* set of signals to, well, unblock */ typedef void (*_sig_func_ptr)(int); struct sigaction { - _sig_func_ptr sa_handler; - sigset_t sa_mask; - int sa_flags; + _sig_func_ptr sa_handler; + sigset_t sa_mask; + int sa_flags; }; #define sigaddset(what,sig) (*(what) |= (1<<(sig)), 0) @@ -163,17 +165,17 @@ typedef unsigned long sigset_t; #define SIGRTMAX 31 #define NSIG 32 -#define SIG_SETMASK 0 /* set mask with sigprocmask() */ -#define SIG_BLOCK 1 /* set of signals to block */ -#define SIG_UNBLOCK 2 /* set of signals to, well, unblock */ +#define SIG_SETMASK 0 /* set mask with sigprocmask() */ +#define SIG_BLOCK 1 /* set of signals to block */ +#define SIG_UNBLOCK 2 /* set of signals to, well, unblock */ typedef void (*_sig_func_ptr)(int); struct sigaction { - _sig_func_ptr sa_handler; - sigset_t sa_mask; - int sa_flags; + _sig_func_ptr sa_handler; + sigset_t sa_mask; + int sa_flags; }; #define sigaddset(what,sig) (*(what) |= (1<<(sig)), 0) diff --git a/include/rtdef.h b/include/rtdef.h index f2da3ac7bc..2404f7a364 100644 --- a/include/rtdef.h +++ b/include/rtdef.h @@ -451,8 +451,10 @@ typedef struct rt_timer *rt_timer_t; * @addtogroup Signal */ #ifdef RT_USING_SIGNALS +#include <libc/libc_signal.h> typedef unsigned long rt_sigset_t; typedef void (*rt_sighandler_t)(int signo); +typedef siginfo_t rt_siginfo_t; #define RT_SIG_MAX 32 #endif @@ -481,7 +483,7 @@ typedef void (*rt_sighandler_t)(int signo); #define RT_THREAD_STAT_SIGNAL 0x10 #define RT_THREAD_STAT_SIGNAL_READY (RT_THREAD_STAT_SIGNAL | RT_THREAD_READY) -#define RT_THREAD_STAT_SIGNAL_SUSPEND 0x20 +#define RT_THREAD_STAT_SIGNAL_WAIT 0x20 #define RT_THREAD_STAT_SIGNAL_MASK 0xf0 /** diff --git a/include/rtthread.h b/include/rtthread.h index 61cd82d97e..c92f7f012f 100644 --- a/include/rtthread.h +++ b/include/rtthread.h @@ -204,6 +204,7 @@ void rt_scheduler_sethook(void (*hook)(rt_thread_t from, rt_thread_t to)); void rt_signal_mask(int signo); void rt_signal_unmask(int signo); rt_sighandler_t rt_signal_install(int signo, rt_sighandler_t handler); +int rt_signal_wait(const rt_sigset_t *set, rt_siginfo_t *si, rt_int32_t timeout); int rt_system_signal_init(void); #endif |
