From 2ae1f19d4385cf5d4b864c52d37e145cfc607cb8 Mon Sep 17 00:00:00 2001 From: Michal Privoznik Date: Thu, 1 Dec 2022 16:23:55 +0100 Subject: [PATCH] commandtest: Comply with FreeBSD poll() In one of recent commits I've introduced a new test case to commandtest. In the test case I'm using poll() to wait for data on a pipe (the write end is passed to commandhelper). However, on FreeBSD the POLLIN semantic is a bit different: POLLIN Data other than high priority data may be read without blocking. Well, the pipe is non-blocking, so even if there's no data to be read the flag is set (and subsequent read() returns 0). On the other hand, POLLHUP is set too, BUT, if the commandhelper manages to write everything into the pipe and die right after we'd get both POLLIN and POLLHUP after the very first time poll() returns. That's very unfortunate, but okay - we can just check whether read() returned zero and break from the reading loop. Signed-off-by: Michal Privoznik Reviewed-by: Martin Kletzander --- tests/commandtest.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tests/commandtest.c b/tests/commandtest.c index 62275ba96d..688cf59160 100644 --- a/tests/commandtest.c +++ b/tests/commandtest.c @@ -1205,6 +1205,9 @@ test29(const void *unused G_GNUC_UNUSED) goto cleanup; } + if (rc == 0) + break; + outactual = g_renew(char, outactual, outactuallen + rc + 1); memcpy(outactual + outactuallen, buf, rc); outactuallen += rc;