Formerly job.c.~63~

This commit is contained in:
Roland McGrath 1992-04-30 21:50:23 +00:00
parent d052fb99ee
commit 56f17eb659

32
job.c
View file

@ -378,6 +378,25 @@ free_child (child)
free ((char *) child); free ((char *) child);
} }
#ifdef POSIX
extern sigset_t fatal_signal_set;
static void
unblock_sigs ()
{
sigset_t empty;
sigemptyset (&empty);
sigprocmask (SIG_SETMASK, &empty, (sigset_t *) 0);
}
#else
#ifndef USG
extern int fatal_signal_mask;
#define unblock_sigs() sigsetmask (0)
#else
#define unblock_sigs()
#endif
#endif
/* Start a job to run the commands specified in CHILD. /* Start a job to run the commands specified in CHILD.
CHILD is updated to reflect the commands and ID of the child process. */ CHILD is updated to reflect the commands and ID of the child process. */
@ -539,15 +558,27 @@ start_job (child)
/* Fork the child process. */ /* Fork the child process. */
#ifdef POSIX
(void) sigprocmask (SIG_BLOCK, &fatal_signal_set, (sigset_t *) 0);
#else
#ifndef USG
(void) sigblock (fatal_signal_mask);
#endif
#endif
child->remote = 0; child->remote = 0;
child->pid = vfork (); child->pid = vfork ();
if (child->pid == 0) if (child->pid == 0)
{
/* We are the child side. */ /* We are the child side. */
unblock_sigs ();
child_execute_job (child->good_stdin ? 0 : bad_stdin, 1, child_execute_job (child->good_stdin ? 0 : bad_stdin, 1,
argv, child->environment); argv, child->environment);
}
else if (child->pid < 0) else if (child->pid < 0)
{ {
/* Fork failed! */ /* Fork failed! */
unblock_sigs ();
perror_with_name (VFORK_NAME, ""); perror_with_name (VFORK_NAME, "");
goto error; goto error;
} }
@ -616,6 +647,7 @@ new_job (file)
children = c; children = c;
/* One more job slot is in use. */ /* One more job slot is in use. */
++job_slots_used; ++job_slots_used;
unblock_sigs ();
break; break;
case cs_finished: case cs_finished: