[Openmcl-cvs-notifications] r11769 - /release/1.3/source/lisp-kernel/thread_manager.c

rme at clozure.com rme at clozure.com
Mon Feb 23 21:48:21 EST 2009


Author: rme
Date: Mon Feb 23 21:48:21 2009
New Revision: 11769

Log:
Merge part of r11742 from trunk (left out the cooperative threads
stuff.)

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

Modified: release/1.3/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.3/source/lisp-kernel/thread_manager.c (original)
+++ release/1.3/source/lisp-kernel/thread_manager.c Mon Feb 23 21:48:21 2009
@@ -574,7 +574,18 @@
   Boolean gs_was_tcr =3D ensure_gs_pthread();
 #endif
   TCR *tcr =3D get_interrupt_tcr(false);
-
+  =

+  if (tcr =3D=3D NULL) {
+    /* Got a suspend signal sent to the pthread. */
+    extern natural initial_stack_size;
+    void register_thread_tcr(TCR *);
+    =

+    tcr =3D new_tcr(initial_stack_size, MIN_TSTACK_SIZE);
+    tcr->suspend_count =3D 1;
+    tcr->vs_area->active -=3D node_size;
+    *(--tcr->save_vsp) =3D lisp_nil;
+    register_thread_tcr(tcr);
+  }
   if (TCR_INTERRUPT_LEVEL(tcr) <=3D (-2<<fixnumshift)) {
     SET_TCR_FLAG(tcr,TCR_FLAG_BIT_PENDING_SUSPEND);
   } else {
@@ -1837,7 +1848,7 @@
     LispObj callback_macptr =3D nrs_FOREIGN_THREAD_CONTROL.vcell,
       callback_ptr =3D ((macptr *)ptr_from_lispobj(untag(callback_macptr))=
)->address;
     int i, nbindwords =3D 0;
-    extern unsigned initial_stack_size;
+    extern natural initial_stack_size;
     =

     /* Make one. */
     current =3D new_tcr(initial_stack_size, MIN_TSTACK_SIZE);



More information about the Openmcl-cvs-notifications mailing list