Hi Peter,

On 4/13/23 14:05, Peter Maydell wrote:
On Thu, 13 Apr 2023 at 11:50, Peter Maydell <peter.mayd...@linaro.org> wrote:

I just found a hung netdev-socket test on our s390 CI runner.
Looks like a deadlock, no processes using CPU.
Here's the backtrace; looks like both QEMU processes are sat
idle but the test process is sat waiting forever for something
in test_stream_inet_reconnect(). Any ideas?

May well not be related, but I think there's a race condition
in this test's inet_get_free_port() code. The code tries
to find a free port number by creating a socket, looking
at what port it is bound to, and then closing the socket.
If there are several copies of this test running at once
(as is plausible in a 'make -j8' setup), then you can
get an interleaving:

  test 1                       test 2
    find a port number
    close the socket
                               find a port number
                               (get the same number as test 1)
                               close the socket
    use port number for test
                               use port number for test
                               (fail because of test 1)


I don't see an easy way to avoid to race, but perhaps we can change the test to use unix socket rather than inet one? In this case we can use an unique name.

Thanks,
Laurent


Reply via email to