On 03/08/2016 05:54 PM, Peter Maydell wrote: > On 8 March 2016 at 16:06, Zhang Chen <zhangchen.f...@cn.fujitsu.com> wrote: >> I found the reason for this problem is that >> unix_connect() have not connect to sock_path before iov_send(). >> It need time to establish connection. so can we fix it with usleep() >> like this: >> >> recv_sock = unix_connect(sock_path, NULL); >> g_assert_cmpint(recv_sock, !=, -1); >> + usleep(1000); >> >> ret = iov_send(send_sock[0], iov, 2, 0, sizeof(size) + >> sizeof(send_buf)); >> g_assert_cmpint(ret, ==, sizeof(send_buf) + sizeof(size)); >> close(send_sock[0]); >> >> ret = qemu_recv(recv_sock, &len, sizeof(len), 0); > I would prefer it if we could find a way to fix this race > reliably rather than just inserting a delay and hoping it > is sufficient. Otherwise the test is likely to be unreliable > if run on a heavily loaded or slow machine. > > thanks > -- PMM >
+1 To make sure the connected socket to be proceeded before iov_send(), you could use some like qmp("{ 'execute' : 'query-status'}") before iov_send(). With this we are guaranteed that connected is setting to true before iov_send().