diff options
| author | Louis Burda <quent.burda@gmail.com> | 2022-07-03 03:53:28 +0200 |
|---|---|---|
| committer | Louis Burda <quent.burda@gmail.com> | 2023-06-23 00:35:52 +0200 |
| commit | 5fb2935eb5b953e3b8a56be301e13f581cadc546 (patch) | |
| tree | 8187ab833636d8f08b1d75c2cc79db64e676df0e | |
| parent | 26658a5e72e1443e36b85877d8b133cf0bfaa1a9 (diff) | |
| download | wmsl-5fb2935eb5b953e3b8a56be301e13f581cadc546.tar.gz wmsl-5fb2935eb5b953e3b8a56be301e13f581cadc546.zip | |
Let block script die within 1s time limit instead of killing instantly
| -rw-r--r-- | wmsl.c | 23 |
1 files changed, 14 insertions, 9 deletions
@@ -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 |
