summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLouis Burda <quent.burda@gmail.com>2022-07-03 03:53:28 +0200
committerLouis Burda <quent.burda@gmail.com>2023-06-23 00:35:52 +0200
commit5fb2935eb5b953e3b8a56be301e13f581cadc546 (patch)
tree8187ab833636d8f08b1d75c2cc79db64e676df0e
parent26658a5e72e1443e36b85877d8b133cf0bfaa1a9 (diff)
downloadwmsl-5fb2935eb5b953e3b8a56be301e13f581cadc546.tar.gz
wmsl-5fb2935eb5b953e3b8a56be301e13f581cadc546.zip
Let block script die within 1s time limit instead of killing instantly
-rw-r--r--wmsl.c23
1 files changed, 14 insertions, 9 deletions
diff --git a/wmsl.c b/wmsl.c
index f05292d..e57ba16 100644
--- 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