Lines Matching refs:ss
79 struct hurd_sigstate *ss; in _hurd_thread_sigstate() local
81 for (ss = _hurd_sigstates; ss != NULL; ss = ss->next) in _hurd_thread_sigstate()
82 if (ss->thread == thread) in _hurd_thread_sigstate()
84 if (ss == NULL) in _hurd_thread_sigstate()
86 ss = malloc (sizeof (*ss)); in _hurd_thread_sigstate()
87 if (ss == NULL) in _hurd_thread_sigstate()
89 __spin_lock_init (&ss->critical_section_lock); in _hurd_thread_sigstate()
90 __spin_lock_init (&ss->lock); in _hurd_thread_sigstate()
91 ss->thread = thread; in _hurd_thread_sigstate()
94 __sigemptyset (&ss->blocked); in _hurd_thread_sigstate()
95 __sigemptyset (&ss->pending); in _hurd_thread_sigstate()
96 memset (&ss->sigaltstack, 0, sizeof (ss->sigaltstack)); in _hurd_thread_sigstate()
97 ss->sigaltstack.ss_flags |= SS_DISABLE; in _hurd_thread_sigstate()
98 ss->preemptors = NULL; in _hurd_thread_sigstate()
99 ss->suspended = MACH_PORT_NULL; in _hurd_thread_sigstate()
100 ss->intr_port = MACH_PORT_NULL; in _hurd_thread_sigstate()
101 ss->context = NULL; in _hurd_thread_sigstate()
102 ss->active_resources = NULL; in _hurd_thread_sigstate()
103 ss->cancel = 0; in _hurd_thread_sigstate()
104 ss->cancel_hook = NULL; in _hurd_thread_sigstate()
109 default_sigaction (ss->actions); in _hurd_thread_sigstate()
124 memcpy (ss->actions, s->actions, sizeof (s->actions)); in _hurd_thread_sigstate()
128 default_sigaction (ss->actions); in _hurd_thread_sigstate()
130 ss->next = _hurd_sigstates; in _hurd_thread_sigstate()
131 _hurd_sigstates = ss; in _hurd_thread_sigstate()
140 return ss; in _hurd_thread_sigstate()
149 struct hurd_sigstate **ssp, *ss; in libc_hidden_def() local
156 ss = *ssp; in libc_hidden_def()
157 if (ss) in libc_hidden_def()
158 *ssp = ss->next; in libc_hidden_def()
161 if (ss) in libc_hidden_def()
163 if (ss->thread != MACH_PORT_NULL) in libc_hidden_def()
164 __mach_port_deallocate (__mach_task_self (), ss->thread); in libc_hidden_def()
166 free (ss); in libc_hidden_def()
172 _hurd_sigstate_set_global_rcv (struct hurd_sigstate *ss) in _hurd_sigstate_set_global_rcv() argument
174 assert (ss->thread != MACH_PORT_NULL); in _hurd_sigstate_set_global_rcv()
175 ss->actions[0].sa_handler = SIG_IGN; in _hurd_sigstate_set_global_rcv()
180 sigstate_is_global_rcv (const struct hurd_sigstate *ss) in sigstate_is_global_rcv() argument
183 && (ss->actions[0].sa_handler == SIG_IGN); in sigstate_is_global_rcv()
190 _hurd_sigstate_lock (struct hurd_sigstate *ss) in libc_hidden_def()
192 if (sigstate_is_global_rcv (ss)) in libc_hidden_def()
194 __spin_lock (&ss->lock); in libc_hidden_def()
197 _hurd_sigstate_unlock (struct hurd_sigstate *ss) in _hurd_sigstate_unlock() argument
199 __spin_unlock (&ss->lock); in _hurd_sigstate_unlock()
200 if (sigstate_is_global_rcv (ss)) in _hurd_sigstate_unlock()
208 _hurd_sigstate_pending (const struct hurd_sigstate *ss) in libc_hidden_def()
210 sigset_t pending = ss->pending; in libc_hidden_def()
211 if (sigstate_is_global_rcv (ss)) in libc_hidden_def()
220 sigstate_clear_pending (struct hurd_sigstate *ss, int signo) in sigstate_clear_pending() argument
222 if (sigstate_is_global_rcv (ss) in sigstate_clear_pending()
229 assert (__sigismember (&ss->pending, signo)); in sigstate_clear_pending()
230 __sigdelset (&ss->pending, signo); in sigstate_clear_pending()
231 return ss->pending_data[signo]; in sigstate_clear_pending()
238 _hurd_sigstate_actions (struct hurd_sigstate *ss) in libc_hidden_def()
240 if (sigstate_is_global_rcv (ss)) in libc_hidden_def()
243 return ss->actions; in libc_hidden_def()
338 abort_thread (struct hurd_sigstate *ss, struct machine_thread_all_state *state, in abort_thread() argument
341 assert (ss->thread != MACH_PORT_NULL); in abort_thread()
345 error_t err = __thread_abort (ss->thread); in abort_thread()
355 machine_get_basic_state (ss->thread, state); in abort_thread()
413 _hurdsig_abort_rpcs (struct hurd_sigstate *ss, int signo, int sigthread, in _hurdsig_abort_rpcs() argument
424 intr_port = ss->intr_port; in _hurdsig_abort_rpcs()
431 abort_thread (ss, state, reply); in _hurdsig_abort_rpcs()
460 mach_port_t *reply = interrupted_reply_port_location (ss->thread, in _hurdsig_abort_rpcs()
491 if (! signo || !(_hurd_sigstate_actions (ss) [signo].sa_flags & SA_RESTART)) in _hurdsig_abort_rpcs()
492 ss->intr_port = MACH_PORT_NULL; in _hurdsig_abort_rpcs()
512 struct hurd_sigstate *ss; in abort_all_rpcs() local
519 for (ss = _hurd_sigstates; ss != NULL; ss = ss->next) in abort_all_rpcs()
525 for (ss = _hurd_sigstates; ss != NULL; ss = ss->next, ++nthreads) in abort_all_rpcs()
526 if (ss->thread == _hurd_msgport_thread) in abort_all_rpcs()
536 reply_ports[nthreads] = _hurdsig_abort_rpcs (ss, signo, 1, in abort_all_rpcs()
552 __thread_set_state (ss->thread, MACHINE_THREAD_STATE_FLAVOR, in abort_all_rpcs()
582 wake_sigsuspend (struct hurd_sigstate *ss) in wake_sigsuspend() argument
587 if (ss->suspended == MACH_PORT_NULL) in wake_sigsuspend()
592 msg.msgh_remote_port = ss->suspended; in wake_sigsuspend()
596 ss->suspended = MACH_PORT_NULL; in wake_sigsuspend()
619 post_signal (struct hurd_sigstate *ss, in weak_alias()
637 __sigaddset (&ss->pending, signo); in weak_alias()
640 ss->pending_data[signo] = *detail; in weak_alias()
678 if (act == handle && threads[i] == ss->thread) in weak_alias()
711 _hurd_sigstate_lock (ss); in weak_alias()
712 return ss; in weak_alias()
717 _hurd_sigstate_lock (ss); in weak_alias()
722 if (ss->thread == MACH_PORT_NULL) in weak_alias()
736 ss = rss; in weak_alias()
747 sigset_t blocked = ss->blocked; in weak_alias()
760 sighandler_t handler = (*pe->preemptor) (pe, ss, in weak_alias()
773 handler = ss->preemptors ? try_preemptor (ss->preemptors) : SIG_ERR; in weak_alias()
799 action = & _hurd_sigstate_actions (ss) [signo]; in weak_alias()
810 _hurd_sigstate_unlock (ss); in weak_alias()
882 __sigdelset (&ss->pending, SIGCONT); in weak_alias()
888 ss->pending &= ~STOPSIGS; in weak_alias()
943 assert (ss->thread != MACH_PORT_NULL); in weak_alias()
944 err = __thread_resume (ss->thread); in weak_alias()
988 assert (ss->thread != MACH_PORT_NULL); in weak_alias()
993 err = __thread_suspend (ss->thread); in weak_alias()
1002 abort_thread (ss, &thread_state, NULL); in weak_alias()
1004 if (ss->context) in weak_alias()
1011 if (_hurdsig_catch_memory_fault (ss->context)) in weak_alias()
1017 ss->context = NULL; in weak_alias()
1023 ocontext = *ss->context; in weak_alias()
1024 ss->context = &ocontext; in weak_alias()
1028 if (! machine_get_basic_state (ss->thread, &thread_state)) in weak_alias()
1030 loc = interrupted_reply_port_location (ss->thread, in weak_alias()
1041 assert (! __spin_lock_locked (&ss->critical_section_lock)); in weak_alias()
1045 int crit = __spin_lock_locked (&ss->critical_section_lock); in weak_alias()
1048 = (_hurdsig_abort_rpcs (ss, in weak_alias()
1075 __thread_set_state (ss->thread, MACHINE_THREAD_STATE_FLAVOR, in weak_alias()
1079 ss->intr_port = MACH_PORT_NULL; in weak_alias()
1080 __thread_resume (ss->thread); in weak_alias()
1087 scp = _hurd_setup_sighandler (ss, action, handler, signo, detail, in weak_alias()
1097 mach_port_t *loc = interrupted_reply_port_location (ss->thread, in weak_alias()
1110 scp->sc_intr_port = ss->intr_port; in weak_alias()
1111 ss->intr_port = MACH_PORT_NULL; in weak_alias()
1113 if (ss->context) in weak_alias()
1119 scp->sc_reply_port = ss->context->sc_reply_port; in weak_alias()
1120 scp->sc_intr_port = ss->context->sc_intr_port; in weak_alias()
1122 ss->context = NULL; in weak_alias()
1130 scp->sc_mask = ss->blocked; in weak_alias()
1131 __sigorset (&ss->blocked, &ss->blocked, &action->sa_mask); in weak_alias()
1135 __sigaddset (&ss->blocked, signo); in weak_alias()
1145 wake_sigsuspend (ss); in weak_alias()
1149 err = __thread_set_state (ss->thread, MACHINE_THREAD_STATE_FLAVOR, in weak_alias()
1153 err = __thread_resume (ss->thread); in weak_alias()
1160 return ss; in weak_alias()
1165 pending_signals (struct hurd_sigstate *ss) in pending_signals() argument
1172 if (_hurd_stopped || __spin_lock_locked (&ss->critical_section_lock)) in pending_signals()
1175 return _hurd_sigstate_pending (ss) & ~ss->blocked; in pending_signals()
1182 post_pending (struct hurd_sigstate *ss, sigset_t pending, void (*reply) (void)) in post_pending() argument
1189 assert (ss->thread != MACH_PORT_NULL); in post_pending()
1194 detail = sigstate_clear_pending (ss, signo); in post_pending()
1195 _hurd_sigstate_unlock (ss); in post_pending()
1198 if (! post_signal (ss, signo, &detail, 0, reply)) in post_pending()
1203 _hurd_sigstate_unlock (ss); in post_pending()
1213 struct hurd_sigstate *ss; in post_all_pending_signals() local
1219 for (ss = _hurd_sigstates; ss != NULL; ss = ss->next) in post_all_pending_signals()
1221 _hurd_sigstate_lock (ss); in post_all_pending_signals()
1223 pending = pending_signals (ss); in post_all_pending_signals()
1228 _hurd_sigstate_unlock (ss); in post_all_pending_signals()
1234 if (! post_pending (ss, pending, reply)) in post_all_pending_signals()
1241 _hurd_internal_post_signal (struct hurd_sigstate *ss, in _hurd_internal_post_signal() argument
1261 ss = post_signal (ss, signo, detail, untraced, reply); in _hurd_internal_post_signal()
1262 if (! ss) in _hurd_internal_post_signal()
1266 if (signo != 0 && ss->thread != MACH_PORT_NULL) in _hurd_internal_post_signal()
1273 if (! post_pending (ss, pending_signals (ss), reply)) in _hurd_internal_post_signal()
1280 _hurd_sigstate_unlock (ss); in _hurd_internal_post_signal()
1456 struct hurd_sigstate *ss; in _hurdsig_init() local
1480 ss = _hurd_self_sigstate (); in _hurdsig_init()
1484 _hurd_sigstate_set_global_rcv (ss); in _hurdsig_init()
1489 ss->blocked = intarray[INIT_SIGMASK]; in _hurdsig_init()
1585 assert ((ss->pending &~ ss->blocked) == 0); in _hurdsig_init()