Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301, USA.
- $Id: signal.c 7772 2007-04-19 19:43:39Z twisti $
+ $Id: signal.c 7831 2007-04-26 12:48:16Z twisti $
*/
#endif
-/* global variables ***********************************************************/
-
-#if defined(ENABLE_THREADS)
-static threadobject *thread_signal;
-#endif
-
-
/* function prototypes ********************************************************/
void signal_handler_sighup(int sig, siginfo_t *siginfo, void *_p);
if (sigemptyset(&mask) != 0)
vm_abort("signal_thread: sigemptyset failed: %s", strerror(errno));
- sigaddset(&mask, SIGINT);
+ if (sigaddset(&mask, SIGINT) != 0)
+ vm_abort("signal_thread: sigaddset failed: %s", strerror(errno));
+
#if !defined(__FREEBSD__)
- sigaddset(&mask, SIGQUIT);
+ if (sigaddset(&mask, SIGQUIT) != 0)
+ vm_abort("signal_thread: sigaddset failed: %s", strerror(errno));
#endif
while (true) {
/* just wait for a signal */
+ /* XXX We don't check for an error here, although the man-page
+ states sigwait does not return an error (which is wrong!),
+ but it seems to make problems with Boehm-GC. We should
+ revisit this code with our new exact-GC. */
+
+/* if (sigwait(&mask, &sig) != 0) */
+/* vm_abort("signal_thread: sigwait failed: %s", strerror(errno)); */
(void) sigwait(&mask, &sig);
switch (sig) {
name = utf_new_char("Signal Handler");
- thread_signal = threads_create_thread(name);
-
- if (thread_signal == NULL)
+ if (!threads_thread_start_internal(name, signal_thread))
return false;
- /* actually start the signal handler thread */
-
- threads_start_thread(thread_signal, signal_thread);
-
/* everything's ok */
return true;