129 |
{ |
{ |
130 |
if (signum >= 0 && signum < NSIG) |
if (signum >= 0 && signum < NSIG) |
131 |
{ |
{ |
132 |
|
#ifdef USE_THREADS |
133 |
SCM thread = SCM_VECTOR_REF (signal_handler_threads, signum); |
SCM thread = SCM_VECTOR_REF (signal_handler_threads, signum); |
134 |
scm_i_queue_async_cell (SCM_VECTOR_REF(signal_handler_cells, signum), |
scm_i_queue_async_cell (SCM_VECTOR_REF(signal_handler_cells, signum), |
135 |
scm_i_thread_root (thread)); |
scm_i_thread_root (thread)); |
136 |
|
#else |
137 |
|
scm_i_queue_async_cell (SCM_VECTOR_REF(signal_handler_cells, signum), |
138 |
|
scm_root); |
139 |
|
#endif |
140 |
} |
} |
141 |
#ifndef HAVE_SIGACTION |
#ifndef HAVE_SIGACTION |
142 |
signal (signum, take_signal); |
signal (signum, take_signal); |
218 |
action.sa_flags |= SCM_INUM (flags); |
action.sa_flags |= SCM_INUM (flags); |
219 |
} |
} |
220 |
sigemptyset (&action.sa_mask); |
sigemptyset (&action.sa_mask); |
221 |
|
#endif |
222 |
|
|
223 |
|
#ifdef USE_THREAD |
224 |
if (SCM_UNBNDP (thread)) |
if (SCM_UNBNDP (thread)) |
225 |
thread = scm_current_thread (); |
thread = scm_current_thread (); |
226 |
else |
else |
227 |
SCM_VALIDATE_THREAD (4, thread); |
SCM_VALIDATE_THREAD (4, thread); |
228 |
|
#else |
229 |
|
thread = SCM_BOOL_F; |
230 |
#endif |
#endif |
231 |
|
|
232 |
SCM_DEFER_INTS; |
SCM_DEFER_INTS; |
233 |
old_handler = SCM_VECTOR_REF(*signal_handlers, csig); |
old_handler = SCM_VECTOR_REF(*signal_handlers, csig); |
234 |
if (SCM_UNBNDP (handler)) |
if (SCM_UNBNDP (handler)) |