commit 5fb2935eb5b953e3b8a56be301e13f581cadc546
parent 26658a5e72e1443e36b85877d8b133cf0bfaa1a9
Author: Louis Burda <quent.burda@gmail.com>
Date: Sun, 3 Jul 2022 03:53:28 +0200
Let block script die within 1s time limit instead of killing instantly
Diffstat:
M | wmsl.c | | | 23 | ++++++++++++++--------- |
1 file changed, 14 insertions(+), 9 deletions(-)
diff --git a/wmsl.c b/wmsl.c
@@ -156,6 +156,7 @@ read_block(int fd, char *buf, ssize_t size)
{
struct timeval timeout;
struct timespec start, stop;
+ char tmp[256];
fd_set fdset;
int ret, nread;
uint64_t ns;
@@ -163,6 +164,7 @@ read_block(int fd, char *buf, ssize_t size)
clock_gettime(CLOCK_REALTIME, &start);
+ tok = NULL;
ns = 0;
do {
FD_ZERO(&fdset);
@@ -181,19 +183,22 @@ read_block(int fd, char *buf, ssize_t size)
if (ret < 0 && errno == EINTR) continue;
if (ret <= 0) break;
- nread = read(fd, buf, size);
- if (nread <= 0) break;
+ if (!tok) {
+ nread = read(fd, buf, size);
+ if (nread <= 0) break;
- if ((tok = memchr(buf, '\n', nread))) {
- *tok = '\0';
- return true;
- }
+ tok = memchr(buf, '\n', nread);
+ if (tok) *tok = '\0';
- buf += nread;
- size -= nread;
+ buf += nread;
+ size -= nread;
+ } else {
+ nread = read(fd, tmp, sizeof(tmp));
+ if (nread <= 0) break;
+ }
} while (ns < 1000000000);
- return false;
+ return tok != NULL;
}
void