Displaying 6 results from an estimated 6 matches for "dowait_block".
2019 Jan 25
0
[klibc:update-dash] jobs - Do not block when waiting on SIGCHLD
...usr/dash/jobs.c
index 4548ae69..2b8e1afe 100644
--- a/usr/dash/jobs.c
+++ b/usr/dash/jobs.c
@@ -974,10 +974,17 @@ waitforjob(struct job *jp)
int st;
TRACE(("waitforjob(%%%d) called\n", jp ? jobno(jp) : 0));
- while ((jp && jp->state == JOBRUNNING) || gotsigchld)
- dowait(DOWAIT_BLOCK, jp);
- if (!jp)
+ if (!jp) {
+ int pid = gotsigchld;
+
+ while (pid > 0)
+ pid = dowait(DOWAIT_NORMAL, NULL);
+
return exitstatus;
+ }
+
+ while (jp->state == JOBRUNNING)
+ dowait(DOWAIT_BLOCK, jp);
st = getstatus(jp);
#if JOBS
if (jp->jobctl) {
2020 Mar 28
0
[klibc:update-dash] dash: jobs - Do not block when waiting on SIGCHLD
...usr/dash/jobs.c
index 3ea7e122..400628ff 100644
--- a/usr/dash/jobs.c
+++ b/usr/dash/jobs.c
@@ -974,10 +974,17 @@ waitforjob(struct job *jp)
int st;
TRACE(("waitforjob(%%%d) called\n", jp ? jobno(jp) : 0));
- while ((jp && jp->state == JOBRUNNING) || gotsigchld)
- dowait(DOWAIT_BLOCK, jp);
- if (!jp)
+ if (!jp) {
+ int pid = gotsigchld;
+
+ while (pid > 0)
+ pid = dowait(DOWAIT_NORMAL, NULL);
+
return exitstatus;
+ }
+
+ while (jp->state == JOBRUNNING)
+ dowait(DOWAIT_BLOCK, jp);
st = getstatus(jp);
#if JOBS
if (jp->jobctl) {
2020 Mar 28
0
[klibc:update-dash] dash: jobs: Only clear gotsigchld when waiting for everything
...FORK_NOJOB && jp->jobctl) {
int pgrp;
@@ -974,17 +966,10 @@ waitforjob(struct job *jp)
int st;
TRACE(("waitforjob(%%%d) called\n", jp ? jobno(jp) : 0));
- if (!jp) {
- int pid = gotsigchld;
-
- while (pid > 0)
- pid = dowait(DOWAIT_NORMAL, NULL);
-
+ dowait(jp ? DOWAIT_BLOCK : DOWAIT_NORMAL, jp);
+ if (!jp)
return exitstatus;
- }
- while (jp->state == JOBRUNNING)
- dowait(DOWAIT_BLOCK, jp);
st = getstatus(jp);
#if JOBS
if (jp->jobctl) {
@@ -1012,8 +997,7 @@ waitforjob(struct job *jp)
* Wait for a process to terminate.
*/
-STATIC int
-dowait(int b...
2019 Jan 25
0
[klibc:update-dash] eval: Reap zombies after built-in commands and functions
...+973,11 @@ waitforjob(struct job *jp)
{
int st;
- TRACE(("waitforjob(%%%d) called\n", jobno(jp)));
- while (jp->state == JOBRUNNING) {
+ TRACE(("waitforjob(%%%d) called\n", jp ? jobno(jp) : 0));
+ while ((jp && jp->state == JOBRUNNING) || gotsigchld)
dowait(DOWAIT_BLOCK, jp);
- }
+ if (!jp)
+ return exitstatus;
st = getstatus(jp);
#if JOBS
if (jp->jobctl) {
2020 Mar 28
0
[klibc:update-dash] dash: eval: Reap zombies after built-in commands and functions
...+973,11 @@ waitforjob(struct job *jp)
{
int st;
- TRACE(("waitforjob(%%%d) called\n", jobno(jp)));
- while (jp->state == JOBRUNNING) {
+ TRACE(("waitforjob(%%%d) called\n", jp ? jobno(jp) : 0));
+ while ((jp && jp->state == JOBRUNNING) || gotsigchld)
dowait(DOWAIT_BLOCK, jp);
- }
+ if (!jp)
+ return exitstatus;
st = getstatus(jp);
#if JOBS
if (jp->jobctl) {
2020 Mar 28
0
[klibc:update-dash] dash: eval: Add vfork support
...= 0;
+ sigclearmask();
+ forkparent(jp, n, FORK_FG, pid);
+
+ return jp;
+}
+
/*
* Wait for job to finish.
*
@@ -1105,7 +1152,7 @@ static int dowait(int block, struct job *jp)
STATIC int
waitproc(int block, int *status)
{
- sigset_t mask, oldmask;
+ sigset_t oldmask;
int flags = block == DOWAIT_BLOCK ? 0 : WNOHANG;
int err;
@@ -1119,8 +1166,7 @@ waitproc(int block, int *status)
if (err || (err = -!block))
break;
- sigfillset(&mask);
- sigprocmask(SIG_SETMASK, &mask, &oldmask);
+ sigblockall(&oldmask);
while (!gotsigchld && !pending_sig)
sigsuspen...