commit 80bb4b8ab7db1044d16b6e76ac5ca9ef2c13f12b
parent 56931acefbdd61ecc6ba04304760ec5d7b5c8031
Author: bakkeby <bakkeby@gmail.com>
Date: Sat, 15 May 2021 11:44:09 +0200
externalpipe: sigchld changes interfere with right-click-to-plumb and opencopied patches, proposed fix ref. #27
Diffstat:
3 files changed, 12 insertions(+), 1 deletion(-)
diff --git a/patch/externalpipe.c b/patch/externalpipe.c
@@ -1,3 +1,5 @@
+int extpipeactive = 0;
+
void
#if EXTERNALPIPEIN_PATCH
extpipe(const Arg *arg, int in)
@@ -58,6 +60,7 @@ externalpipe(const Arg *arg)
close(to[1]);
/* restore */
signal(SIGPIPE, oldsigpipe);
+ extpipeactive = 1;
}
#if EXTERNALPIPEIN_PATCH
diff --git a/st.c b/st.c
@@ -977,7 +977,7 @@ sigchld(int a)
pid_t p;
#if EXTERNALPIPEIN_PATCH && EXTERNALPIPE_PATCH
- if ((p = waitpid(-1, &stat, WNOHANG)) < 0)
+ if ((p = waitpid((extpipeactive ? -1 : pid), &stat, WNOHANG)) < 0)
#else
if ((p = waitpid(pid, &stat, WNOHANG)) < 0)
#endif // EXTERNALPIPEIN_PATCH
@@ -985,11 +985,15 @@ sigchld(int a)
#if EXTERNALPIPE_PATCH
if (pid != p) {
+ if (!extpipeactive)
+ return;
+
if (p == 0 && wait(&stat) < 0)
die("wait: %s\n", strerror(errno));
/* reinstall sigchld handler */
signal(SIGCHLD, sigchld);
+ extpipeactive = 0;
return;
}
#else
diff --git a/st.h b/st.h
@@ -345,6 +345,10 @@ extern unsigned int tabspaces;
extern unsigned int defaultfg;
extern unsigned int defaultbg;
extern unsigned int defaultcs;
+#if EXTERNALPIPE_PATCH
+extern int extpipeactive;
+#endif // EXTERNALPIPE_PATCH
+
#if BOXDRAW_PATCH
extern const int boxdraw, boxdraw_bold, boxdraw_braille;
#endif // BOXDRAW_PATCH