1.0.7.14: thread-safe INTERN, EXPORT, &co
[sbcl.git] / src / runtime / interrupt.h
index 405b354..4e0a45f 100644 (file)
@@ -27,6 +27,8 @@
 #define REAL_SIGSET_SIZE_BYTES ((NSIG/8))
 
 extern void check_blockables_blocked_or_lose();
+extern void check_gc_signals_unblocked_or_lose();
+extern void unblock_gc_signals();
 
 static inline void
 sigcopyset(sigset_t *new, sigset_t *old)
@@ -64,7 +66,7 @@ extern void interrupt_init();
 extern void fake_foreign_function_call(os_context_t* context);
 extern void undo_fake_foreign_function_call(os_context_t* context);
 extern void arrange_return_to_lisp_function(os_context_t *, lispobj);
-extern void interrupt_handle_now(int, siginfo_t*, void*);
+extern void interrupt_handle_now(int, siginfo_t*, os_context_t*);
 extern void interrupt_handle_pending(os_context_t*);
 extern void interrupt_internal_error(os_context_t*, boolean continuable);
 extern boolean handle_guard_page_triggered(os_context_t *,os_vm_address_t);
@@ -80,13 +82,12 @@ extern void do_pending_interrupt(void);
 extern void interrupt_thread_handler(int, siginfo_t*, void*);
 extern void sig_stop_for_gc_handler(int, siginfo_t*, void*);
 #endif
-extern void undoably_install_low_level_interrupt_handler (int signal,
-                                                          void
-                                                          handler(int,
-                                                                  siginfo_t*,
-                                                                  void*));
+typedef void (*interrupt_handler_t)(int, siginfo_t *, void *);
+extern void undoably_install_low_level_interrupt_handler (
+                        int signal,
+                        interrupt_handler_t handler);
 extern unsigned long install_handler(int signal,
-                                     void handler(int, siginfo_t*, void*));
+                                     interrupt_handler_t handler);
 
 extern union interrupt_handler interrupt_handlers[NSIG];
 
@@ -104,7 +105,7 @@ extern void block_blockable_signals();
  * "cleanly" with union types is in fact a mess. */
 #define ARE_SAME_HANDLER(x, y) ((void*)(x) == (void*)(y))
 
-extern boolean maybe_handle_trap(os_context_t *context, int trap);
+extern void handle_trap(os_context_t *context, int trap);
 
 #ifndef LISP_FEATURE_WIN32
 extern void lisp_memory_fault_error(os_context_t *context, os_vm_address_t addr);