Using sigsetjmp(3)/siglongjmp(3) instead of setjmp(3)/longjmp(3)
authorMatthew Mondor <mmondor@pulsar-zone.net>
Thu, 20 Jan 2005 11:28:30 +0000 (11:28 +0000)
committerMatthew Mondor <mmondor@pulsar-zone.net>
Thu, 20 Jan 2005 11:28:30 +0000 (11:28 +0000)
for better portability (some pre ANSI C implementations did not save the
signal mask), and the currently used functions are POSIX hence suitable
for UNIX systems.

mmsoftware/mmlib/mmserver2.c

index 6098bef..9e3c1b3 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: mmserver2.c,v 1.45 2004/12/05 07:02:41 mmondor Exp $ */
+/* $Id: mmserver2.c,v 1.46 2005/01/20 11:28:30 mmondor Exp $ */
 
 /*
  * Copyright (C) 2004, Matthew Mondor
 
 MMCOPYRIGHT("@(#) Copyright (c) 2004\n\
 \tMatthew Mondor. All rights reserved.\n");
-MMRCSID("$Id: mmserver2.c,v 1.45 2004/12/05 07:02:41 mmondor Exp $");
+MMRCSID("$Id: mmserver2.c,v 1.46 2005/01/20 11:28:30 mmondor Exp $");
 
 
 
@@ -2215,7 +2215,7 @@ child_main(void)
      * at any time resume here (including at SIGPIPE signal handler)
      * without the need for a finite state machine.
      */
-    (void) setjmp(local.jmpbuf);
+    (void) sigsetjmp(local.jmpbuf, 1);
     /* Advertize to parent that we're a ready process (not PSTAT_BUSY) */
     local.status->status = PSTAT_READY;
 
@@ -2658,7 +2658,7 @@ child_close(bool resume)
     }
     if (resume)
        /* This will automatically set process to PSTAT_READY */
-       (void) longjmp(local.jmpbuf, 0);
+       (void) siglongjmp(local.jmpbuf, 0);
 }
 
 /* Child process exit point, Depending on state, this process will be