mirror of
git://git.musl-libc.org/musl
synced 2025-01-21 22:23:13 +00:00
80c4dcd253
this implementation is superior to the glibc/nptl implementation, in that it gives true realtime behavior. there is no risk of timer expiration events being lost due to failed thread creation or failed malloc, because the thread is created as time creation time, and reused until the timer is deleted.
119 lines
2.5 KiB
C
119 lines
2.5 KiB
C
#ifndef _SIGNAL_H
|
|
#define _SIGNAL_H
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#if defined(_POSIX_SOURCE) || defined(_POSIX_C_SOURCE) \
|
|
|| defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE)
|
|
|
|
#ifdef _GNU_SOURCE
|
|
#define __siginfo siginfo
|
|
#endif
|
|
|
|
#define __NEED_size_t
|
|
#define __NEED_pid_t
|
|
#define __NEED_uid_t
|
|
#define __NEED_struct_timespec
|
|
#define __NEED_pthread_t
|
|
#define __NEED_pthread_attr_t
|
|
#define __NEED_time_t
|
|
#define __NEED_clock_t
|
|
#define __NEED_sigset_t
|
|
#define __NEED_siginfo_t
|
|
|
|
#include <bits/alltypes.h>
|
|
|
|
struct sigaction {
|
|
union {
|
|
void (*sa_handler)(int);
|
|
void (*sa_sigaction)(int, siginfo_t *, void *);
|
|
} __sa_handler;
|
|
sigset_t sa_mask;
|
|
int sa_flags;
|
|
void (*__sa_restorer)(void);
|
|
};
|
|
#define sa_handler __sa_handler.sa_handler
|
|
#define sa_sigaction __sa_handler.sa_sigaction
|
|
|
|
typedef struct {
|
|
void *ss_sp;
|
|
int ss_flags;
|
|
size_t ss_size;
|
|
} stack_t;
|
|
|
|
union sigval {
|
|
int sival_int;
|
|
void *sival_ptr;
|
|
};
|
|
|
|
struct sigevent {
|
|
union sigval sigev_value;
|
|
int sigev_signo;
|
|
int sigev_notify;
|
|
void (*sigev_notify_function)(union sigval);
|
|
pthread_attr_t *sigev_notify_attributes;
|
|
};
|
|
|
|
#define SIGEV_SIGNAL 0
|
|
#define SIGEV_NONE 1
|
|
#define SIGEV_THREAD 2
|
|
|
|
int __libc_current_sigrtmin(void);
|
|
int __libc_current_sigrtmax(void);
|
|
|
|
#define SIGRTMIN (__libc_current_sigrtmin())
|
|
#define SIGRTMAX (__libc_current_sigrtmax())
|
|
|
|
int kill(pid_t, int);
|
|
|
|
int sigemptyset(sigset_t *);
|
|
int sigfillset(sigset_t *);
|
|
int sigaddset(sigset_t *, int);
|
|
int sigdelset(sigset_t *, int);
|
|
int sigismember(const sigset_t *, int);
|
|
|
|
int sigprocmask(int, const sigset_t *, sigset_t *);
|
|
int sigsuspend(const sigset_t *);
|
|
int sigaction(int, const struct sigaction *, struct sigaction *);
|
|
int sigpending(sigset_t *);
|
|
int sigwait(const sigset_t *, int *);
|
|
int sigwaitinfo(const sigset_t *, siginfo_t *);
|
|
int sigtimedwait(const sigset_t *, siginfo_t *, const struct timespec *);
|
|
int sigqueue(pid_t, int, const union sigval);
|
|
|
|
int pthread_sigmask(int, const sigset_t *, sigset_t *);
|
|
int pthread_kill(pthread_t, int);
|
|
|
|
#endif
|
|
|
|
#if defined(_XOPEN_SOURCE) || defined(_GNU_SOURCE)
|
|
int killpg(pid_t, int);
|
|
int sigaltstack(const stack_t *, stack_t *);
|
|
int sighold(int);
|
|
int sigignore(int);
|
|
int siginterrupt(int, int);
|
|
int sigpause(int);
|
|
int sigrelse(int);
|
|
void (*sigset(int, void (*)(int)))(int);
|
|
#endif
|
|
|
|
#ifdef _GNU_SOURCE
|
|
typedef int (*sighandler_t)(int);
|
|
void (*bsd_signal(int, void (*)(int)))(int);
|
|
#endif
|
|
|
|
#include <bits/signal.h>
|
|
|
|
typedef int sig_atomic_t;
|
|
|
|
void (*signal(int, void (*)(int)))(int);
|
|
int raise(int);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|