Skip to content

Commit

Permalink
logtee: time out after a period of no output
Browse files Browse the repository at this point in the history
Travis cuts us short after 10 minutes of slience, giving us no chance to puke
out the output. Be faster.
  • Loading branch information
lkundrak authored and danimo committed Nov 11, 2019
1 parent f5d48a3 commit 10f8438
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 4 deletions.
2 changes: 1 addition & 1 deletion fedora-test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ else

cd test

time sudo make \
time sudo LOGTEE_TIMEOUT_MS=590000 make \
KVERSION=$(rpm -qa kernel --qf '%{VERSION}-%{RELEASE}.%{ARCH}\n' | sort -rn | head -1) \
TEST_RUN_ID=$RUN_ID \
${TESTS:+TESTS="$TESTS"} \
Expand Down
25 changes: 22 additions & 3 deletions logtee.c
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
#define _GNU_SOURCE
#include <fcntl.h>
#include <poll.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
Expand All @@ -13,13 +14,26 @@ main(int argc, char *argv[])
{
int fd;
int len, slen;
int ret;
int timeout;
char *timeout_env;
struct pollfd fds[] = {{
.fd = STDIN_FILENO,
.events = POLLIN | POLLERR,
}};

timeout_env = getenv("LOGTEE_TIMEOUT_MS");
if (timeout_env)
timeout = atoi(timeout_env);
else
timeout = -1;

if (argc != 2) {
fprintf(stderr, "Usage: %s <file>\n", argv[0]);
exit(EXIT_FAILURE);
}

fd = open(argv[1], O_WRONLY | O_CREAT | O_TRUNC, 0644);
fd = open(argv[1], O_WRONLY | O_CREAT | O_TRUNC | O_NONBLOCK, 0644);
if (fd == -1) {
perror("open");
exit(EXIT_FAILURE);
Expand All @@ -30,8 +44,13 @@ main(int argc, char *argv[])
slen = 0;

do {
ret = poll (fds, sizeof(fds) / sizeof(fds[0]), timeout);
if (ret == 0) {
fprintf (stderr, "Timed out after %d milliseconds of no output.\n", timeout);
exit(EXIT_FAILURE);
}
len = splice(STDIN_FILENO, NULL, fd, NULL,
BUFLEN, SPLICE_F_MOVE);
BUFLEN, SPLICE_F_MOVE | SPLICE_F_NONBLOCK);

if (len < 0) {
if (errno == EAGAIN)
Expand All @@ -51,4 +70,4 @@ main(int argc, char *argv[])
close(fd);
fprintf(stderr, "\n");
exit(EXIT_SUCCESS);
}
}

0 comments on commit 10f8438

Please sign in to comment.