From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:53027) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1affcb-0004BM-JN for qemu-devel@nongnu.org; Mon, 14 Mar 2016 23:26:15 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1affcY-0004WB-BB for qemu-devel@nongnu.org; Mon, 14 Mar 2016 23:26:13 -0400 Received: from [59.151.112.132] (port=47313 helo=heian.cn.fujitsu.com) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1affcX-0004VD-Vp for qemu-devel@nongnu.org; Mon, 14 Mar 2016 23:26:10 -0400 References: <1457320380-5111-1-git-send-email-jasowang@redhat.com> <56DE802F.2060502@redhat.com> <56DE8436.60304@cn.fujitsu.com> <56DE859B.8020404@redhat.com> <56DE9630.5020109@cn.fujitsu.com> <56E0DBBF.8060703@redhat.com> <56E0EF3D.8070404@cn.fujitsu.com> <56E77C55.8060805@redhat.com> From: Li Zhijian Message-ID: <56E780BD.8080802@cn.fujitsu.com> Date: Tue, 15 Mar 2016 11:25:49 +0800 MIME-Version: 1.0 In-Reply-To: <56E77C55.8060805@redhat.com> Content-Type: text/plain; charset="utf-8"; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PULL 00/14] Net patches List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Jason Wang , Peter Maydell , Zhang Chen Cc: QEMU Developers On 03/15/2016 11:07 AM, Jason Wang wrote: > > > On 03/10/2016 11:51 AM, Li Zhijian wrote: >> >> >> 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 >>>> 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 ? > > I think the problem is the race in main loop between the two handlers. > If the socket netdev read handler was proceed before chardev read > handler, since connected was false the packet will be dropped silently. > After we place whateve a qmp command in the middled, it's guaranteed > that all handlers were proceed after qmp command was executed, so we are > sure the connected is true when doing iov_send(). > Got it, thank for your explain. we will send V9 with '-chardev socket' and add an qmp sync point soon. Thanks Li Zhijian >> >> Thanks >> Li Zhijian >>> >>> >>> >> >> >> > > > > . >