Update of /cvsroot/sbcl/sbcl/src/runtime
In directory sc8-pr-cvs8.sourceforge.net:/tmp/cvs-serv23629/src/runtime
Modified Files:
interrupt.c win32-os.c
Log Message:
1.0.4.20: Win32 build fix
* interrupt_handle_pending turned out to be required on win32.
* whitespace damage.
Index: interrupt.c
===================================================================
RCS file: /cvsroot/sbcl/sbcl/src/runtime/interrupt.c,v
retrieving revision 1.126
retrieving revision 1.127
diff -u -d -r1.126 -r1.127
--- interrupt.c 2 Apr 2007 15:20:50 -0000 1.126
+++ interrupt.c 3 Apr 2007 15:54:55 -0000 1.127
@@ -406,14 +406,19 @@
void
interrupt_handle_pending(os_context_t *context)
{
-#ifdef LISP_FEATURE_WIN32
- /* Actually this part looks almost good to go for
- * Windows too, but currently we never save anything
- * on Windows, so ending up here would be pretty bad. */
- lose("Pending interrupts unimplemented on Windows.");
-#else
+ /* There are three ways we can get here. First, if an interrupt
+ * occurs within pseudo-atomic, it will be deferred, and we'll
+ * trap to here at the end of the pseudo-atomic block. Second, if
+ * the GC (in alloc()) decides that a GC is required, it will set
+ * *GC-PENDING* and pseudo-atomic-interrupted, and alloc() is
+ * always called from within pseudo-atomic, and thus we end up
+ * here again. Third, when calling GC-ON or at the end of a
+ * WITHOUT-GCING, MAYBE-HANDLE-PENDING-GC will trap to here if
+ * there is a pending GC. */
+
+ /* Win32 only needs to handle the GC cases (for now?) */
+
struct thread *thread = arch_os_get_current_thread();
- struct interrupt_data *data = thread->interrupt_data;
FSHOW_SIGNAL((stderr, "/entering interrupt_handle_pending\n"));
@@ -442,6 +447,7 @@
check_blockables_blocked_or_lose();
}
+#ifndef LISP_FEATURE_WIN32
/* we may be here only to do the gc stuff, if interrupts are
* enabled run the pending handler */
if (!((SymbolValue(INTERRUPTS_ENABLED,thread) == NIL) ||
@@ -450,6 +456,7 @@
(!foreign_function_call_active) &&
#endif
arch_pseudo_atomic_atomic(context)))) {
+ struct interrupt_data *data = thread->interrupt_data;
/* There may be no pending handler, because it was only a gc
* that had to be executed or because pseudo atomic triggered
Index: win32-os.c
===================================================================
RCS file: /cvsroot/sbcl/sbcl/src/runtime/win32-os.c,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -d -r1.31 -r1.32
--- win32-os.c 2 Apr 2007 17:28:14 -0000 1.31
+++ win32-os.c 3 Apr 2007 15:55:01 -0000 1.32
@@ -341,7 +341,7 @@
}
if (exception_record->ExceptionCode == EXCEPTION_BREAKPOINT) {
- unsigned char trap;
+ unsigned char trap;
/* This is just for info in case the monitor wants to print an
* approximation. */
current_control_stack_pointer =
|