From 78c0e788b69c07403d795626a009be3091a22cfb Mon Sep 17 00:00:00 2001 From: Dima Krasner Date: Mon, 27 Jun 2022 06:53:55 +0000 Subject: [PATCH] apply joewing/jwm#577 --- woof-code/rootfs-petbuilds/jwm/577.patch | 35 ++++++++++++++++++++++++ woof-code/rootfs-petbuilds/jwm/petbuild | 1 + 2 files changed, 36 insertions(+) create mode 100644 woof-code/rootfs-petbuilds/jwm/577.patch diff --git a/woof-code/rootfs-petbuilds/jwm/577.patch b/woof-code/rootfs-petbuilds/jwm/577.patch new file mode 100644 index 00000000000..63e7348d12e --- /dev/null +++ b/woof-code/rootfs-petbuilds/jwm/577.patch @@ -0,0 +1,35 @@ +From 7381bffb118436535349134ff96c240b4d68c324 Mon Sep 17 00:00:00 2001 +From: Dima Krasner +Date: Mon, 27 Jun 2022 06:46:44 +0000 +Subject: [PATCH] Retry select() on dynamic menu pipe if interrupted by SIGCHLD + +--- + src/command.c | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/src/command.c b/src/command.c +index 9f21922..02e49c5 100644 +--- a/src/command.c ++++ b/src/command.c +@@ -15,6 +15,7 @@ + #include "timing.h" + + #include ++#include + + /** Structure to represent a list of commands. */ + typedef struct CommandNode { +@@ -202,7 +203,9 @@ char *ReadFromProcess(const char *command, unsigned timeout_ms) + tv.tv_usec = (diff_ms % 1000) * 1000; + + /* Wait for data (or a timeout). */ +- rc = select(fds[0] + 1, &fs, NULL, &fs, &tv); ++ do { ++ rc = select(fds[0] + 1, &fs, NULL, &fs, &tv); ++ } while(rc < 0 && errno == EINTR); + if(rc == 0) { + close(fds[0]); + /* Timeout */ +-- +2.34.1 + diff --git a/woof-code/rootfs-petbuilds/jwm/petbuild b/woof-code/rootfs-petbuilds/jwm/petbuild index f5db45da7ad..713a3e171c4 100755 --- a/woof-code/rootfs-petbuilds/jwm/petbuild +++ b/woof-code/rootfs-petbuilds/jwm/petbuild @@ -6,6 +6,7 @@ build() { tar -xJf jwm-2.4.2.tar.xz cd jwm-2.4.2 patch -p1 < ../571.patch + patch -p1 < ../577.patch ./configure --prefix=/usr --sysconfdir=/etc make install }