0.9.17.2: fix two potential GC deadlocks
[sbcl.git] / src / runtime / interr.c
index 4ef3766..8d0b01b 100644 (file)
@@ -28,6 +28,7 @@
 #include "genesis/static-symbols.h"
 #include "genesis/vector.h"
 #include "thread.h"
+#include "monitor.h"
 \f
 /* the way that we shut down the system on a fatal error */
 
@@ -37,19 +38,23 @@ default_lossage_handler(void)
     exit(1);
 }
 static void (*lossage_handler)(void) = default_lossage_handler;
-void
-set_lossage_handler(void handler(void))
+
+void enable_lossage_handler(void)
 {
-    lossage_handler = handler;
+    lossage_handler = monitor_or_something;
+}
+void disable_lossage_handler(void)
+{
+    lossage_handler = default_lossage_handler;
 }
 
-never_returns
+void
 lose(char *fmt, ...)
 {
     va_list ap;
     fprintf(stderr, "fatal error encountered in SBCL pid %d",getpid());
 #if defined(LISP_FEATURE_SB_THREAD)
-    fprintf(stderr, "(tid %ld)",thread_self());
+    fprintf(stderr, "(tid %lu)",thread_self());
 #endif
     if (fmt) {
         fprintf(stderr, ":\n");