From 3afcab0d7e7f13d2db185f43d97039a34613c107 Mon Sep 17 00:00:00 2001 From: LinuxDev9002 Date: Sat, 18 Jul 2026 14:18:14 -0700 Subject: [PATCH] Simplify fsession polling control flow --- src/52-fsession-latency/fsession_latency.c | 48 ++++++++++++---------- 1 file changed, 27 insertions(+), 21 deletions(-) diff --git a/src/52-fsession-latency/fsession_latency.c b/src/52-fsession-latency/fsession_latency.c index 4f65d92..cdc91a8 100644 --- a/src/52-fsession-latency/fsession_latency.c +++ b/src/52-fsession-latency/fsession_latency.c @@ -145,6 +145,31 @@ static int handle_event(void *context, void *data, size_t size) return 0; } +static int poll_until_deadline(struct ring_buffer *ring, long long deadline) +{ + while (!exiting) { + long long now = monotonic_milliseconds(); + int consumed; + + if (now < 0) + return (int)now; + if (now >= deadline) + break; + + consumed = ring_buffer__poll(ring, + deadline - now > 100 ? 100 : deadline - now); + if (consumed == -EINTR) + continue; + if (consumed < 0) { + fprintf(stderr, "ring buffer poll failed: %s\n", + strerror(-consumed)); + return consumed; + } + } + + return 0; +} + int main(int argc, char **argv) { struct fsession_latency_bpf *skel = NULL; @@ -206,27 +231,8 @@ int main(int argc, char **argv) } deadline = now + env.duration * 1000LL; - while (!exiting) { - now = monotonic_milliseconds(); - if (now < 0) { - err = now; - break; - } - if (now >= deadline) - break; - - err = ring_buffer__poll(ring, deadline - now > 100 ? 100 : deadline - now); - if (err == -EINTR) { - err = 0; - continue; - } - if (err < 0) { - fprintf(stderr, "ring buffer poll failed: %s\n", strerror(-err)); - break; - } - err = 0; - } - if (err < 0) + err = poll_until_deadline(ring, deadline); + if (err) goto cleanup; fsession_latency_bpf__detach(skel);