[Openmcl-cvs-notifications] r13898 - /release/1.5/source/lisp-kernel/thread_manager.c

gb at clozure.com gb at clozure.com
Tue Jun 29 14:25:34 UTC 2010


Author: gb
Date: Tue Jun 29 08:25:33 2010
New Revision: 13898

Log:
Propagate r13869 from trunk to 1.5.

Modified:
    release/1.5/source/lisp-kernel/thread_manager.c

Modified: release/1.5/source/lisp-kernel/thread_manager.c
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=
=3D=3D=3D
--- release/1.5/source/lisp-kernel/thread_manager.c (original)
+++ release/1.5/source/lisp-kernel/thread_manager.c Tue Jun 29 08:25:33 2010
@@ -99,6 +99,8 @@
       (target->unwinding !=3D 0) ||
       (!((where < (pc)lisp_global(HEAP_END)) &&
          (where >=3D (pc)lisp_global(HEAP_START))) &&
+       (!((where < (pc)(managed_static_area->active)) &&
+	 (where >=3D (pc)(readonly_area->low)))) &&
        !((where < spentry_end) && (where >=3D spentry_start)) &&
        !((where < subprims_end) && (where >=3D subprims_start)) &&
        !((where < (pc) 0x16000) &&
@@ -1946,7 +1948,11 @@
 #ifdef WIN_64
     *pcontext =3D * (CONTEXT *)(pcontext->Rcx);
 #else
-    *pcontext =3D * (CONTEXT *)(pcontext->Ecx);
+    if (where =3D=3D restore_windows_context_start) {
+      *pcontext =3D * (CONTEXT *)((pcontext->Esp)+4);
+    } else {
+      *pcontext =3D * (CONTEXT *)(pcontext->Ecx);
+    }
 #endif
   } else {
     /* Most of the context has already been restored; fix %rcx
@@ -1969,6 +1975,11 @@
 #endif
   }
   tcr->pending_exception_context =3D NULL;
+  /* We basically never return from an exception unless we
+     were executing lisp code when the exception returned.
+     If that ever changes, we need to know what valence
+     would have been restored here.*/
+  tcr->valence =3D TCR_STATE_LISP;
 }
 =

 Boolean
@@ -2015,6 +2026,8 @@
            point. */
         if (!((where < (pc)lisp_global(HEAP_END)) &&
               (where >=3D (pc)lisp_global(HEAP_START))) &&
+	    (!((where < (pc)(managed_static_area->active)) &&
+	      (where >=3D (pc)(readonly_area->low)))) &&
             !((where < spentry_end) && (where >=3D spentry_start)) &&
             !((where < subprims_end) && (where >=3D subprims_start)) &&
             !((where < (pc) 0x16000) &&



More information about the Openmcl-cvs-notifications mailing list