Displaying 5 results from an estimated 5 matches for "sigclearmask".
2020 Mar 28
0
[klibc:update-dash] dash: eval: Add vfork support
...else
forkparent(jp, n, mode, pid);
+
return pid;
}
+struct job *vforkexec(union node *n, char **argv, const char *path, int idx)
+{
+ struct job *jp;
+ int pid;
+
+ jp = makejob(n, 1);
+
+ sigblockall(NULL);
+ vforked++;
+
+ pid = vfork();
+
+ if (!pid) {
+ forkchild(jp, n, FORK_FG);
+ sigclearmask();
+ shellexec(argv, path, idx);
+ /* NOTREACHED */
+ }
+
+ vforked = 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)
{...
2020 Mar 28
0
[klibc:update-dash] dash: system: Disable glibc warning on sigsetmask
...hings <ben at decadent.org.uk>
---
usr/dash/system.h | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/usr/dash/system.h b/usr/dash/system.h
index c8424f75..f23e3863 100644
--- a/usr/dash/system.h
+++ b/usr/dash/system.h
@@ -36,8 +36,17 @@
static inline void sigclearmask(void)
{
-#ifdef HAVE_SIGSETMASK
+#if defined(HAVE_SIGSETMASK) && \
+ (!defined(__GLIBC__) || \
+ (defined(__GNUC__) && (__GNUC__ * 1000 + __GNUC_MINOR__) >= 4006))
+#ifdef __GLIBC__
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wdeprecated-declaratio...
2019 Jan 25
0
[klibc:update-dash] trap: Globally rename pendingsigs to pending_sig
...8 + pending_sig;
goto out;
}
@@ -1146,7 +1146,7 @@ waitproc(int block, int *status)
sigfillset(&mask);
sigprocmask(SIG_SETMASK, &mask, &oldmask);
- while (!gotsigchld && !pendingsigs)
+ while (!gotsigchld && !pending_sig)
sigsuspend(&oldmask);
sigclearmask();
diff --git a/usr/dash/miscbltin.c b/usr/dash/miscbltin.c
index c47fdbf8..fc14dc4b 100644
--- a/usr/dash/miscbltin.c
+++ b/usr/dash/miscbltin.c
@@ -207,7 +207,7 @@ readcmd(int argc, char **argv)
case 1:
break;
default:
- if (errno == EINTR && !pendingsigs)
+ if (errno == EIN...
2020 Mar 28
0
[klibc:update-dash] dash: trap: Globally rename pendingsigs to pending_sig
...8 + pending_sig;
goto out;
}
@@ -1146,7 +1146,7 @@ waitproc(int block, int *status)
sigfillset(&mask);
sigprocmask(SIG_SETMASK, &mask, &oldmask);
- while (!gotsigchld && !pendingsigs)
+ while (!gotsigchld && !pending_sig)
sigsuspend(&oldmask);
sigclearmask();
diff --git a/usr/dash/miscbltin.c b/usr/dash/miscbltin.c
index c47fdbf8..fc14dc4b 100644
--- a/usr/dash/miscbltin.c
+++ b/usr/dash/miscbltin.c
@@ -207,7 +207,7 @@ readcmd(int argc, char **argv)
case 1:
break;
default:
- if (errno == EINTR && !pendingsigs)
+ if (errno == EIN...
2020 Mar 28
0
[klibc:update-dash] dash: jobs: Only clear gotsigchld when waiting for everything
...hld = 0;
err = wait3(status, flags, NULL);
- if (err || !block)
+ if (err || (err = -!block))
break;
- block = 0;
-
sigfillset(&mask);
sigprocmask(SIG_SETMASK, &mask, &oldmask);
@@ -1159,6 +1127,8 @@ waitproc(int block, int *status)
sigsuspend(&oldmask);
sigclearmask();
+
+ err = 0;
} while (gotsigchld);
return err;