From 2e6a0abcd078c2bfe5a9786f3327f36d43ad4709 Mon Sep 17 00:00:00 2001 From: Alan Maguire Date: Tue, 22 Aug 2023 09:39:53 +0100 Subject: [PATCH] bpftune: unexpected exit on suspend bpftune was exiting on suspend; the reason is we get an -EINTR while polling. However because it is not a SIGINT/SIGTERM, we should not exit the polling routine for this error; the signal handling logic will do this for the signals we care about. Tested via $ systemctl suspend bpftune service/program keeps running where it previously exited. Reported by: Tungsten842 (https://github.com/Tungsten842) Signed-off-by: Alan Maguire --- src/libbpftune.c | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/src/libbpftune.c b/src/libbpftune.c index fa41afa..1bbb1f2 100644 --- a/src/libbpftune.c +++ b/src/libbpftune.c @@ -167,12 +167,17 @@ void bpftune_set_log(int level, bpftune_set_bpf_log(true); } -void bpftune_log_bpf_err(int err, const char *fmt) +static void bpftune_log_bpf(int level, int err, const char *fmt) { char errbuf[256]; (void) libbpf_strerror(err, errbuf, sizeof(errbuf)); - bpftune_log(LOG_ERR, fmt, errbuf); + bpftune_log(level, fmt, errbuf); +} + +void bpftune_log_bpf_err(int err, const char *fmt) +{ + bpftune_log_bpf(LOG_ERR, err, fmt); } static const cap_value_t cap_vector[] = { @@ -807,9 +812,13 @@ int bpftune_ring_buffer_poll(void *ring_buffer, int interval) err = ring_buffer__poll(rb, interval); if (err < 0) { /* -EINTR means we got signal; don't report as error. */ + bpftune_log_bpf(err == -EINTR ? LOG_DEBUG : LOG_ERR, + err, "ring_buffer__poll: %s\n"); + /* signals we have not masked will fini the ring buffer + * so do not exit for -EINTR. + */ if (err != -EINTR) - bpftune_log_bpf_err(err, "ring_buffer__poll: %s\n"); - break; + break; } } ring_buffer__free(rb);