In `dstack_set_position', must unblock signals while the protector
authorChris Hanson <org/chris-hanson/cph>
Sat, 6 Jul 1991 21:42:41 +0000 (21:42 +0000)
committerChris Hanson <org/chris-hanson/cph>
Sat, 6 Jul 1991 21:42:41 +0000 (21:42 +0000)
runs, and re-block afterwards, in case the protector does something to
change the signal mask.  Otherwise, the change to the signal mask will
be undone when the final call to unblock_signals is performed.

v7/src/microcode/wind.c

index 3c71f7826942d54ce3332443625ef3b2fc677c24..834fe86036a8a33df9f6cd4a28976d1c8c3d7430 100644 (file)
@@ -14,7 +14,7 @@
    along with this program; if not, write to the Free Software
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */
 
-/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/wind.c,v 1.3 1991/07/05 23:28:57 cph Exp $ */
+/* $Header: /Users/cph/tmp/foo/mit-scheme/mit-scheme/v7/src/microcode/wind.c,v 1.4 1991/07/06 21:42:41 cph Exp $ */
 
 #include <stdio.h>
 #include "obstack.h"
@@ -141,7 +141,14 @@ DEFUN (dstack_set_position, (position), PTR position)
        {
          PTR sp = dstack_position;
          struct winding_record * record = current_winding_record;
+         /* Must unblock signals while the protector runs, and
+            re-block afterwards, in case the protector does something
+            to change the signal mask.  Otherwise, the change to the
+            signal mask will be undone when the final call to
+            unblock_signals is performed.  */
+         unblock_signals ();
          (* (record -> protector)) (record -> environment);
+         block_signals ();
          if (sp != dstack_position)
            error ("dstack_set_position", "stack slipped during unwind");
          current_winding_record = (record -> next);