summaryrefslogtreecommitdiffstats
path: root/lib/libpthread/thread/thr_private.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/libpthread/thread/thr_private.h')
-rw-r--r--lib/libpthread/thread/thr_private.h30
1 files changed, 30 insertions, 0 deletions
diff --git a/lib/libpthread/thread/thr_private.h b/lib/libpthread/thread/thr_private.h
index 8aacdc0..7c5cc87 100644
--- a/lib/libpthread/thread/thr_private.h
+++ b/lib/libpthread/thread/thr_private.h
@@ -426,6 +426,8 @@ enum pthread_state {
PS_COND_WAIT,
PS_SLEEP_WAIT,
PS_WAIT_WAIT,
+ PS_SIGSUSPEND,
+ PS_SIGWAIT,
PS_SPINBLOCK,
PS_JOIN,
PS_SUSPENDED,
@@ -445,6 +447,7 @@ enum pthread_state {
union pthread_wait_data {
pthread_mutex_t mutex;
pthread_cond_t cond;
+ const sigset_t *sigwait; /* Waiting on a signal in sigwait */
spinlock_t *spinlock;
struct pthread *thread;
};
@@ -461,6 +464,15 @@ struct join_status {
int error;
};
+struct pthread_state_data {
+ struct timespec psd_wakeup_time;
+ union pthread_wait_data psd_wait_data;
+ enum pthread_state psd_state;
+ int psd_flags;
+ int psd_interrupted;
+ int psd_sig_defer_count;
+};
+
struct pthread_specific_elem {
const void *data;
int seqno;
@@ -515,6 +527,9 @@ struct pthread {
thread_continuation_t continuation;
+ /* Currently pending signals. */
+ sigset_t sigpend;
+
/* Thread state: */
enum pthread_state state;
@@ -590,6 +605,9 @@ struct pthread {
*/
int interrupted;
+ /* Signal number when in state PS_SIGWAIT: */
+ int signo;
+
/*
* Set to non-zero when this thread has deferred signals.
* We allow for recursive deferral.
@@ -774,6 +792,11 @@ SCLASS pthread_cond_t _gc_cond
;
/*
+ * Array of signal actions for this process.
+ */
+SCLASS struct sigaction _thread_sigact[NSIG];
+
+/*
* Scheduling queues:
*/
SCLASS pq_queue_t _readyq;
@@ -799,6 +822,12 @@ SCLASS pthread_switch_routine_t _sched_switch_hook
;
/*
+ * Signals pending and masked.
+ */
+SCLASS sigset_t _thread_sigpending;
+SCLASS sigset_t _thread_sigmask;
+
+/*
* Declare the kernel scheduler jump buffer and stack:
*/
SCLASS struct kse_mailbox _thread_kern_kse_mailbox;
@@ -893,6 +922,7 @@ void _thread_kern_sched_state_unlock(enum pthread_state state,
void _thread_kern_set_timeout(const struct timespec *);
void _thread_kern_sig_defer(void);
void _thread_kern_sig_undefer(void);
+void _thread_sig_handler(int, siginfo_t *, ucontext_t *);
void _thread_printf(int fd, const char *, ...);
void _thread_start(void);
void _thread_seterrno(pthread_t, int);
OpenPOWER on IntegriCloud