{
     FILE *pipeobj = NULL;
     int pipefd [2];
+    sigset_t oldmask, newmask;
 
     if (!out && !err) {
         errno = EINVAL;
         PIPE_CTOR_FAIL("pipe");
     }
 
+    sigfillset (&newmask);
+    sigprocmask (SIG_SETMASK, &newmask, &oldmask);
+
     errno = 0;
     pid_t childpid = fork ();
     switch (childpid) {
         case -1: {
+            sigprocmask (SIG_SETMASK, &oldmask, NULL);
             PIPE_CTOR_FAIL("fork");
             break;
         }
 
             close (pipefd [1]);
 
+            sigprocmask (SIG_SETMASK, &oldmask, NULL);
+
             errno = 0;
             if (path) {
                 execvpe (argv [0], const_cast <char *const *>(argv), environ);
         default: {
             close (pipefd [1]);
 
+            sigprocmask (SIG_SETMASK, &oldmask, NULL);
+
             errno = 0;
             if ((pipeobj = fdopen (pipefd [0], "r")) == NULL) {
                 PIPE_CTOR_FAIL("fdopen");