* src/threads/posix/thread-posix.cpp: Implemented thread suspension mechanism.
[cacao.git] / src / vm / signal.cpp
index 9bfe3da3de9a83abfa6f80b206bd960e0a2adc39..57d422d1df1d08370b478e9000359c2616b34fe5 100644 (file)
@@ -62,6 +62,7 @@
 /* function prototypes ********************************************************/
 
 void signal_handler_sighup(int sig, siginfo_t *siginfo, void *_p);
+void signal_handler_sigusr1(int sig, siginfo_t *siginfo, void *_p);
 
 
 /* signal_init *****************************************************************
@@ -195,10 +196,10 @@ bool signal_init(void)
        signal_register_signal(Signal_INTERRUPT_SYSTEM_CALL, (functionptr) signal_handler_sighup, 0);
 #endif
 
-#if defined(ENABLE_THREADS) && defined(ENABLE_GC_CACAO)
-       /* SIGUSR1 handler for the exact GC to suspend threads */
+#if defined(ENABLE_THREADS)
+       /* SIGUSR1 handler for thread suspension */
 
-       signal_register_signal(SIGUSR1, (functionptr) md_signal_handler_sigusr1,
+       signal_register_signal(SIGUSR1, (functionptr) signal_handler_sigusr1,
                                                   SA_SIGINFO);
 #endif
 
@@ -388,6 +389,21 @@ void signal_handler_sighup(int sig, siginfo_t *siginfo, void *_p)
 #endif
 
 
+/* signal_handler_sigusr1 ******************************************************
+
+   Signal handler for suspending threads.
+
+*******************************************************************************/
+
+#if defined(ENABLE_THREADS)
+void signal_handler_sigusr1(int sig, siginfo_t *siginfo, void *_p)
+{
+       // Really suspend ourselves by acknowledging the suspension.
+       threads_suspend_ack();
+}
+#endif
+
+
 /*
  * These are local overrides for various environment variables in Emacs.
  * Please do not remove this and leave it at the end of the file, where