[Qemu-devel] [PATCH] tests/libqtest.c: Delete possible stale unix sockets

Peter Maydell posted 1 patch 6 years, 12 months ago
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/1490963801-27870-1-git-send-email-peter.maydell@linaro.org
Test checkpatch passed
Test docker passed
Test s390x passed
tests/libqtest.c | 8 ++++++++
1 file changed, 8 insertions(+)
[Qemu-devel] [PATCH] tests/libqtest.c: Delete possible stale unix sockets
Posted by Peter Maydell 6 years, 12 months ago
Occasionally if a test crashes or is interrupted by the user
at the wrong moment it could leave behind a stale UNIX
socket in /tmp/. This will then cause a subsequent test
run to fail spuriously with
 tests/libqtest.c:70:init_socket: assertion failed (ret != -1): (-1 != -1)
if it happens to reuse the same PID.

Defend against this by deleting any stray stale socket before
trying to open the new ones for this test.

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
This seems like an easy way to shut up this infrequent but irritating
error case...

 tests/libqtest.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/tests/libqtest.c b/tests/libqtest.c
index a5c3d2b..99b1195 100644
--- a/tests/libqtest.c
+++ b/tests/libqtest.c
@@ -167,6 +167,14 @@ QTestState *qtest_init_without_qmp_handshake(const char *extra_args)
     socket_path = g_strdup_printf("/tmp/qtest-%d.sock", getpid());
     qmp_socket_path = g_strdup_printf("/tmp/qtest-%d.qmp", getpid());
 
+    /* It's possible that if an earlier test run crashed it might
+     * have left a stale unix socket lying around. Delete any
+     * stale old socket to avoid spurious test failures with
+     * tests/libqtest.c:70:init_socket: assertion failed (ret != -1): (-1 != -1)
+     */
+    unlink(socket_path);
+    unlink(qmp_socket_path);
+
     sock = init_socket(socket_path);
     qmpsock = init_socket(qmp_socket_path);
 
-- 
2.7.4


Re: [Qemu-devel] [PATCH] tests/libqtest.c: Delete possible stale unix sockets
Posted by Philippe Mathieu-Daudé 6 years, 12 months ago
On 03/31/2017 09:36 AM, Peter Maydell wrote:
> Occasionally if a test crashes or is interrupted by the user
> at the wrong moment it could leave behind a stale UNIX
> socket in /tmp/. This will then cause a subsequent test
> run to fail spuriously with
>  tests/libqtest.c:70:init_socket: assertion failed (ret != -1): (-1 != -1)
> if it happens to reuse the same PID.
>
> Defend against this by deleting any stray stale socket before
> trying to open the new ones for this test.
>
> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>

Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>

> ---
> This seems like an easy way to shut up this infrequent but irritating
> error case...
>
>  tests/libqtest.c | 8 ++++++++
>  1 file changed, 8 insertions(+)
>
> diff --git a/tests/libqtest.c b/tests/libqtest.c
> index a5c3d2b..99b1195 100644
> --- a/tests/libqtest.c
> +++ b/tests/libqtest.c
> @@ -167,6 +167,14 @@ QTestState *qtest_init_without_qmp_handshake(const char *extra_args)
>      socket_path = g_strdup_printf("/tmp/qtest-%d.sock", getpid());
>      qmp_socket_path = g_strdup_printf("/tmp/qtest-%d.qmp", getpid());
>
> +    /* It's possible that if an earlier test run crashed it might
> +     * have left a stale unix socket lying around. Delete any
> +     * stale old socket to avoid spurious test failures with
> +     * tests/libqtest.c:70:init_socket: assertion failed (ret != -1): (-1 != -1)
> +     */
> +    unlink(socket_path);
> +    unlink(qmp_socket_path);
> +
>      sock = init_socket(socket_path);
>      qmpsock = init_socket(qmp_socket_path);
>
>

Re: [Qemu-devel] [PATCH] tests/libqtest.c: Delete possible stale unix sockets
Posted by Eric Blake 6 years, 12 months ago
On 03/31/2017 07:36 AM, Peter Maydell wrote:
> Occasionally if a test crashes or is interrupted by the user
> at the wrong moment it could leave behind a stale UNIX
> socket in /tmp/. This will then cause a subsequent test
> run to fail spuriously with
>  tests/libqtest.c:70:init_socket: assertion failed (ret != -1): (-1 != -1)
> if it happens to reuse the same PID.
> 
> Defend against this by deleting any stray stale socket before
> trying to open the new ones for this test.
> 
> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
> ---
> This seems like an easy way to shut up this infrequent but irritating
> error case...

There is a related failure in qemu-iotests that I hit yesterday:

+mkfifo: cannot create fifo
'/home/eblake/qemu/tests/qemu-iotests/scratch/qmp-out-3812_0': File exists

that is probably also worth addressing, but that can be a separate patch.

Reviewed-by: Eric Blake <eblake@redhat.com>

-- 
Eric Blake   eblake redhat com    +1-919-301-3266
Libvirt virtualization library http://libvirt.org

Re: [Qemu-devel] [PATCH] tests/libqtest.c: Delete possible stale unix sockets
Posted by Stefan Hajnoczi 6 years, 11 months ago
On Fri, Mar 31, 2017 at 01:36:41PM +0100, Peter Maydell wrote:
> Occasionally if a test crashes or is interrupted by the user
> at the wrong moment it could leave behind a stale UNIX
> socket in /tmp/. This will then cause a subsequent test
> run to fail spuriously with
>  tests/libqtest.c:70:init_socket: assertion failed (ret != -1): (-1 != -1)
> if it happens to reuse the same PID.
> 
> Defend against this by deleting any stray stale socket before
> trying to open the new ones for this test.
> 
> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
> ---
> This seems like an easy way to shut up this infrequent but irritating
> error case...
> 
>  tests/libqtest.c | 8 ++++++++
>  1 file changed, 8 insertions(+)

Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>