[Openmcl-cvs-notifications] r14199 - /trunk/source/lisp-kernel/thread_manager.c

gb at clozure.com gb at clozure.com
Wed Aug 18 07:41:02 CDT 2010


Author: gb
Date: Wed Aug 18 07:41:02 2010
New Revision: 14199

Log:
Free the (separate) signal stack on thread exit on ARM Linux.

Modified:
    trunk/source/lisp-kernel/thread_manager.c

Modified: trunk/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
--- trunk/source/lisp-kernel/thread_manager.c (original)
+++ trunk/source/lisp-kernel/thread_manager.c Wed Aug 18 07:41:02 2010
@@ -1433,6 +1433,22 @@
     if (cs) {
       condemn_area_holding_area_lock(cs);
     }
+    /* On some platforms - currently just linuxarm - we have to
+       allocate a separate alternate signal stack (rather than just
+       using a few pages of the thread's main stack.)  Disable and
+       free that alternate stack here.
+    */
+#ifdef ARM
+#if defined(LINUX)
+    {
+      stack_t new, current;
+      new.ss_flags =3D SS_DISABLE;
+      if (sigaltstack(&new, &current) =3D=3D 0) {
+        munmap(current.ss_sp, current.ss_size);
+      }
+    }
+#endif
+#endif
     destroy_semaphore(&tcr->suspend);
     destroy_semaphore(&tcr->resume);
     destroy_semaphore(&tcr->reset_completion);



More information about the Openmcl-cvs-notifications mailing list