From patchwork Thu Apr 20 07:46:53 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zhanghailiang X-Patchwork-Id: 9689781 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 3F6F0600C8 for ; Thu, 20 Apr 2017 07:48:50 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 2E54F2787C for ; Thu, 20 Apr 2017 07:48:50 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 1EFF628178; Thu, 20 Apr 2017 07:48:50 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 6466B2787C for ; Thu, 20 Apr 2017 07:48:48 +0000 (UTC) Received: from localhost ([::1]:52071 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d16pa-00043W-VF for patchwork-qemu-devel@patchwork.kernel.org; Thu, 20 Apr 2017 03:48:47 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:54244) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d16oi-00041c-Dl for qemu-devel@nongnu.org; Thu, 20 Apr 2017 03:47:53 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1d16od-0001En-Pj for qemu-devel@nongnu.org; Thu, 20 Apr 2017 03:47:52 -0400 Received: from szxga02-in.huawei.com ([45.249.212.188]:3444 helo=dggrg02-dlp.huawei.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_ARCFOUR_SHA1:16) (Exim 4.71) (envelope-from ) id 1d16od-000153-5Z for qemu-devel@nongnu.org; Thu, 20 Apr 2017 03:47:47 -0400 Received: from 172.30.72.56 (EHLO DGGEML403-HUB.china.huawei.com) ([172.30.72.56]) by dggrg02-dlp.huawei.com (MOS 4.4.6-GA FastPath queued) with ESMTP id AMB82784; Thu, 20 Apr 2017 15:47:40 +0800 (CST) Received: from localhost (10.177.24.212) by DGGEML403-HUB.china.huawei.com (10.3.17.33) with Microsoft SMTP Server id 14.3.301.0; Thu, 20 Apr 2017 15:47:31 +0800 From: zhanghailiang To: , Date: Thu, 20 Apr 2017 15:46:53 +0800 Message-ID: <1492674416-9408-2-git-send-email-zhang.zhanghailiang@huawei.com> X-Mailer: git-send-email 2.7.2.windows.1 In-Reply-To: <1492674416-9408-1-git-send-email-zhang.zhanghailiang@huawei.com> References: <1492674416-9408-1-git-send-email-zhang.zhanghailiang@huawei.com> MIME-Version: 1.0 X-Originating-IP: [10.177.24.212] X-CFilter-Loop: Reflected X-Mirapoint-Virus-RAPID-Raw: score=unknown(0), refid=str=0001.0A090206.58F8679F.002E, ss=1, re=0.000, recu=0.000, reip=0.000, cl=1, cld=1, fgs=0, ip=0.0.0.0, so=2014-11-16 11:51:01, dmn=2013-03-21 17:37:32 X-Mirapoint-Loop-Id: 3a64e9bfc7498904cee3e6140e4ba106 X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.4.x-2.6.x [generic] [fuzzy] X-Received-From: 45.249.212.188 Subject: [Qemu-devel] [PATCH 1/3] colo-compare: serialize compare thread's initialization with main thread X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: weidong.huang@huawei.com, qemu-devel@nongnu.org, zhanghailiang Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP We call qemu_chr_fe_set_handlers() in colo-compare thread, it is used to detach watched fd from default main context, so it has chance to handle the same watched fd with main thread concurrently, which will trigger an error report: "qemu-char.c:918: io_watch_poll_finalize: Assertion `iwp->src == ((void *)0)' failed." Fix it by serializing compare thread's initialization with main thread. Signed-off-by: zhanghailiang --- net/colo-compare.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/net/colo-compare.c b/net/colo-compare.c index 54e6d40..a6bf419 100644 --- a/net/colo-compare.c +++ b/net/colo-compare.c @@ -83,6 +83,7 @@ typedef struct CompareState { GHashTable *connection_track_table; /* compare thread, a thread for each NIC */ QemuThread thread; + QemuSemaphore thread_ready; GMainContext *worker_context; GMainLoop *compare_loop; @@ -557,6 +558,8 @@ static void *colo_compare_thread(void *opaque) (GSourceFunc)check_old_packet_regular, s, NULL); g_source_attach(timeout_source, s->worker_context); + qemu_sem_post(&s->thread_ready); + g_main_loop_run(s->compare_loop); g_source_unref(timeout_source); @@ -707,12 +710,15 @@ static void colo_compare_complete(UserCreatable *uc, Error **errp) connection_key_equal, g_free, connection_destroy); + qemu_sem_init(&s->thread_ready, 0); sprintf(thread_name, "colo-compare %d", compare_id); qemu_thread_create(&s->thread, thread_name, colo_compare_thread, s, QEMU_THREAD_JOINABLE); compare_id++; + qemu_sem_wait(&s->thread_ready); + qemu_sem_destroy(&s->thread_ready); return; }