On 03/10/2016 10:28 AM, Jason Wang wrote:


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().



it seem works, but i don't know.
Is this because that both qemu accepting the connection and qmp command are 
working under *iothread*,
so that when the qemu command returns, we can guaranteed the connection is 
accepted ?

Thanks
Li Zhijian






Reply via email to