Commit 2e65d90c54 for qemu.org

commit 2e65d90c54e8b2d7c9d2a2b7294b7f9190d2f396
Author: Daniel P. Berrangé <berrange@redhat.com>
Date:   Mon Oct 26 16:38:48 2026 +0000

    qtest: multiple fixes to socket_accept()

    If the very first iteration of the loop breaks early due to the
    dead QEMU process, 'ret' is never initialized. Furthermore the
    listener socket is not closed on success and there is no error
    message printed if timing out after all iterations are complete.
    These problems were introduced by the recent refactoring to check
    QEMU is alive.

    CID 1688281

    Reported-by: Markus Armbruster <armbru@redhat.com>
    Fixes: c12ad5378739 ("qtest: fail fast when QEMU terminates early")
    Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
    Reviewed-by: Markus Armbruster <armbru@redhat.com>
    Signed-off-by: Fabiano Rosas <farosas@suse.de>

diff --git a/tests/qtest/libqtest.c b/tests/qtest/libqtest.c
index 22b0dc193c..dcce889ccc 100644
--- a/tests/qtest/libqtest.c
+++ b/tests/qtest/libqtest.c
@@ -119,7 +119,7 @@ static int qtest_socket_accept(QTestState *s, int sock)
 {
     struct sockaddr_un addr;
     socklen_t addrlen;
-    int ret;
+    int ret = -1;
     size_t i;
 #ifndef _WIN32
     struct timeval timeout = { .tv_sec = 0,
@@ -145,14 +145,13 @@ static int qtest_socket_accept(QTestState *s, int sock)

         addrlen = sizeof(addr);
         ret = accept(sock, (struct sockaddr *)&addr, &addrlen);
-        if (ret == -1) {
-            if (errno == EINTR || errno == EAGAIN) {
-                continue;
-            } else {
-                fprintf(stderr, "%s failed: %s\n", __func__, strerror(errno));
-            }
+        if (ret == -1 && (errno == EINTR || errno == EAGAIN)) {
+            continue;
         }
-        return ret;
+        break;
+    }
+    if (ret == -1) {
+        fprintf(stderr, "%s failed: %s\n", __func__, strerror(errno));
     }

  cleanup: