[st][PATCH] externalpipe sigaction

This patch should be applied on top of the externalpipe patch. It
prevents the reset of the signal handler set on SIGCHILD, when the
forked process that executes the external process exits. I opted for
switching from signal to sigaction instead of rearming the signal in the
sigchld function, just because it is the recommended function (although I
tried both ways and both worked).
This commit is contained in:
bakkeby 2020-04-20 12:43:04 +02:00
parent bda5b50b99
commit 5ad2174cf9
3 changed files with 25 additions and 1 deletions

View File

@ -15,7 +15,7 @@ Refer to [https://st.suckless.org/](https://st.suckless.org/) for details on the
### Changelog:
2020-04-20 - Added the force redraw on pselect after key is pressed patch
2020-04-20 - Added the force redraw on pselect after key is pressed patch and the externalpipe sigaction patch
2020-03-29 - Added invert and workingdir patches
@ -60,6 +60,9 @@ Refer to [https://st.suckless.org/](https://st.suckless.org/) for details on the
- [externalpipe](https://st.suckless.org/patches/externalpipe/)
- this patch allows for eading and writing st's screen through a pipe, e.g. to pass info to dmenu
- [externalpipe-sigaction](https://lists.suckless.org/hackers/2004/17216.html)
- this patch prevents the reset of the signal handler set on SIGCHILD, when the forked process that executes the external process exits
- [~fixime~](https://st.suckless.org/patches/fix_ime/)
- adds better Input Method Editor (IME) support
- (included in the base as per [35f7db](https://git.suckless.org/st/commit/e85b6b64660214121164ea97fb098eaa4935f7db.html))

View File

@ -68,6 +68,13 @@
*/
#define EXTERNALPIPE_PATCH 0
/* This patch prevents the reset of the signal handler set on SIGCHILD, when
* the forked process that executes the external process exits.
* This patch depends on EXTERNALPIPE_PATCH being enabled.
* https://lists.suckless.org/hackers/2004/17216.html
*/
#define EXTERNALPIPE_SIGACTION_PATCH 0
/* This patch allows command line applications to use all the fancy key combinations
* that are available to GUI applications.
* https://st.suckless.org/patches/fix_keyboard_input/

14
st.c
View File

@ -782,7 +782,11 @@ sigchld(int a)
int stat;
pid_t p;
#if EXTERNALPIPE_SIGACTION_PATCH && EXTERNALPIPE_PATCH
if ((p = waitpid(-1, &stat, WNOHANG)) < 0)
#else
if ((p = waitpid(pid, &stat, WNOHANG)) < 0)
#endif // EXTERNALPIPE_SIGACTION_PATCH
die("waiting for pid %hd failed: %s\n", pid, strerror(errno));
if (pid != p)
@ -823,6 +827,9 @@ int
ttynew(char *line, char *cmd, char *out, char **args)
{
int m, s;
#if EXTERNALPIPE_SIGACTION_PATCH && EXTERNALPIPE_PATCH
struct sigaction sa;
#endif // EXTERNALPIPE_SIGACTION_PATCH
if (out) {
term.mode |= MODE_PRINT;
@ -878,7 +885,14 @@ ttynew(char *line, char *cmd, char *out, char **args)
#endif
close(s);
cmdfd = m;
#if EXTERNALPIPE_SIGACTION_PATCH && EXTERNALPIPE_PATCH
memset(&sa, 0, sizeof(sa));
sigemptyset(&sa.sa_mask);
sa.sa_handler = sigchld;
sigaction(SIGCHLD, &sa, NULL);
#else
signal(SIGCHLD, sigchld);
#endif // EXTERNALPIPE_SIGACTION_PATCH
break;
}
return cmdfd;