From nobody Mon Apr 29 05:04:01 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1492674548791818.2992764133667; Thu, 20 Apr 2017 00:49:08 -0700 (PDT) Received: from localhost ([::1]:52073 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d16pv-0004d0-4A for importer@patchew.org; Thu, 20 Apr 2017 03:49:07 -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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" 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 =3D=3D ((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; =20 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); =20 + qemu_sem_post(&s->thread_ready); + g_main_loop_run(s->compare_loop); =20 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); =20 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); =20 return; } --=20 1.8.3.1 From nobody Mon Apr 29 05:04:01 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1492674548918648.0952808230077; Thu, 20 Apr 2017 00:49:08 -0700 (PDT) Received: from localhost ([::1]:52072 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d16pu-0004cy-S5 for importer@patchew.org; Thu, 20 Apr 2017 03:49:06 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:54245) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d16oi-00041d-Dw 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-0001Et-SK for qemu-devel@nongnu.org; Thu, 20 Apr 2017 03:47:52 -0400 Received: from szxga02-in.huawei.com ([45.249.212.188]:3442 helo=dggrg02-dlp.huawei.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_ARCFOUR_SHA1:16) (Exim 4.71) (envelope-from ) id 1d16od-00013x-5s 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 AMB82781; 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:32 +0800 From: zhanghailiang To: , Date: Thu, 20 Apr 2017 15:46:54 +0800 Message-ID: <1492674416-9408-3-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.58F8679E.0061, 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: c4609c648b5c6ee71041d7eb55936db3 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 2/3] colo-compare: Check main_loop value before call g_main_loop_quit 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" If some errors happen before main_loop is initialized in colo compare thread, qemu will go into finalizing process where we call g_main_loop_quit(s->main_loop), if main_loop is NULL, there will be an error report: "(process:14861): GLib-CRITICAL **: g_main_loop_quit: assertion 'loop !=3D = NULL' failed". We need to check if main_loop is NULL or not before call g_main_loop_quit(). Signed-off-by: zhanghailiang --- net/colo-compare.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/net/colo-compare.c b/net/colo-compare.c index a6bf419..d6a5e4c 100644 --- a/net/colo-compare.c +++ b/net/colo-compare.c @@ -770,7 +770,9 @@ static void colo_compare_finalize(Object *obj) s->worker_context, true); qemu_chr_fe_deinit(&s->chr_out); =20 - g_main_loop_quit(s->compare_loop); + if (s->compare_loop) { + g_main_loop_quit(s->compare_loop); + } qemu_thread_join(&s->thread); =20 /* Release all unhandled packets after compare thead exited */ --=20 1.8.3.1 From nobody Mon Apr 29 05:04:01 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zoho.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 14926746313122.302643774281364; Thu, 20 Apr 2017 00:50:31 -0700 (PDT) Received: from localhost ([::1]:52080 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d16rE-0005RR-Vk for importer@patchew.org; Thu, 20 Apr 2017 03:50:29 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:54249) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1d16oi-00041k-Io 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 1d16oh-0001GG-L7 for qemu-devel@nongnu.org; Thu, 20 Apr 2017 03:47:52 -0400 Received: from szxga02-in.huawei.com ([45.249.212.188]:3445 helo=dggrg02-dlp.huawei.com) by eggs.gnu.org with esmtps (TLS1.0:RSA_ARCFOUR_SHA1:16) (Exim 4.71) (envelope-from ) id 1d16oh-0001FL-9o for qemu-devel@nongnu.org; Thu, 20 Apr 2017 03:47:51 -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 AMB82800; Thu, 20 Apr 2017 15:47:44 +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:34 +0800 From: zhanghailiang To: , Date: Thu, 20 Apr 2017 15:46:55 +0800 Message-ID: <1492674416-9408-4-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.0A090201.58F867A4.01A1, 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: 270b756677e760a4b78d0fd1c9288276 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 3/3] colo-compare: fix a memory leak 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+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" g_timeout_source_new() will initialize GSource's reference count to 1, and g_source_attach() will increase the count by 1, so it will not be enough to call just g_source_unref() which only reduce the value by 1. It will lead to memory leak. We need to call g_source_destroy() before g_source_unref(). Signed-off-by: zhanghailiang --- net/colo-compare.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/net/colo-compare.c b/net/colo-compare.c index d6a5e4c..97bf0e5 100644 --- a/net/colo-compare.c +++ b/net/colo-compare.c @@ -562,7 +562,9 @@ static void *colo_compare_thread(void *opaque) =20 g_main_loop_run(s->compare_loop); =20 + g_source_destroy(timeout_source); g_source_unref(timeout_source); + g_main_loop_unref(s->compare_loop); g_main_context_unref(s->worker_context); return NULL; --=20 1.8.3.1