From nobody Mon May 6 01:36:04 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=web.de ARC-Seal: i=1; a=rsa-sha256; t=1616427830; cv=none; d=zohomail.com; s=zohoarc; b=CU0MDic3cXA2+hrpZaLHZBs0VdrCHDO/vYVGI7OgTK/ohke/6vf4cIf3t6IWsKkqjqGILZbaFx5B4BJW/bHXrOYpTGFgtnMOQbA1S+ilUWrzDEEhZ1Ky+MX1MnFYmjsp4a5Dvy3vqQCjX6VkzvLawXc2m8eDSapLhAIwA0Aeqew= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1616427830; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=7dhUvYJhd1kqbXAofyb/aAyk03XiA/MANwDZJrN06Yc=; b=Q6AbKJF5O9+qUACmwETkM2WMJ5zAUePCU2ClvQzz0Vfa0MHQtwMlBQEylCTJNpojlU1kB/XZcHLcYdi1sQXhcLKWl64g/adXMRshGMP3UbJzUmP7TXhIsN+93B6LipwQM3QkBDpEjHhuQ9C3kOG7NGL7NNeEQQpnOyYICGEG3vc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1616427830321399.6534727445751; Mon, 22 Mar 2021 08:43:50 -0700 (PDT) Received: from localhost ([::1]:50220 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lOMib-00020s-43 for importer@patchew.org; Mon, 22 Mar 2021 11:43:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37376) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lOMgG-0000IJ-EO for qemu-devel@nongnu.org; Mon, 22 Mar 2021 11:41:26 -0400 Received: from mout.web.de ([212.227.17.12]:38745) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lOMgE-00052e-FI for qemu-devel@nongnu.org; Mon, 22 Mar 2021 11:41:24 -0400 Received: from gecko.fritz.box ([94.134.180.232]) by smtp.web.de (mrweb101 [213.165.67.124]) with ESMTPSA (Nemesis) id 0MgfJz-1l4LW61XvD-00NzkG; Mon, 22 Mar 2021 16:41:17 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1616427677; bh=Seds2x/uRPH8CueU9WBlv+slAJOyRLmoXlrz0O6G/0c=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=nhgtTlSKOkHWxdyiCsHehapW2EgHz4UXtJzTsshL8inTLGhN9V32M593BbGFjVana LkdEkXqEWuShfqu9Lnemzdt0tv29Z/aybUKVZJTcrwNiWVS7rMGjaia6X9+MuWaRJj hjzdrdy37hGFYY6+tb4K9VyvG8VXtjgnzhl76XHs= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Date: Mon, 22 Mar 2021 16:41:15 +0100 From: Lukas Straub To: qemu-devel Subject: [PATCH v2 1/5] tests: Use the normal yank code instead of stubs in relevant tests Message-ID: <950007e82e19e75831b29fac07ab990c213d2352.1616427054.git.lukasstraub2@web.de> In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_//PrJ5vlsuz+nY_uAjJx4sNV"; protocol="application/pgp-signature"; micalg=pgp-sha256 X-Provags-ID: V03:K1:qDEc5Hrg2PMbxUtiF40TEuke7tXgnIwEwTKLdnkRYEKabLhC8lE TQGmxVyZvK9QbAMQyKC/bzR7i4KH+QLYBO8LE+veSbJZ322KKGM6QMKFp3Df9dA7Djx2VMp 2380Ht7EccXqUwuXC4nNgUgTZjwUYxdVaioYXy9PnQgjmu/0aROLgSsFsO2yINqB/OZAVyj rKyZE1d0XptbmkOYS02qA== X-UI-Out-Filterresults: notjunk:1;V03:K0:py2NFqFjVAY=:2ZWSErJTLMOzzJTIk0Puil i+Io2XkzwjfXzudtbBjQZzAyprrHMv7fAhjztBm/ruWkcb3Zg05MdgPeP9WJpqpHY3bX/P/p+ nOeywACnKeIpdbHZSh/J65PCeKorL5/C6sAK1N7aNAYhP5ddbxpabafIeMby7NNUAh+BuDCeJ rNZBFJ6i2xYVzce9znZ8IA4BYMELDj7CIK4RI44GdwQu797evI5oxK1vorIdVR8iFlOsTnr6e +GQATuo4o8pwEBxNT5pcWOk8BK426WX4gTk7URyH0CPQ1rGb1e8GjUrBPFLT02KlzybkVSKw7 ynHqngqzXS7G8RStEuZ6sdVp2D0rdeyIP1hMD0a8n34YrYw5CQOuk75xqwtFK3F1ezpem5eYi GzgW2daYHvzRswXrDMzHlD6f+SKLsaDEibm5KKtF6NS07tC9DAMxqtwX5ozV/2RsOoNeyhObM ppqY2v+D+vt80/mSKrw0CSv2XrnNKzGOnErJewj6+c2QCh6t/NOrHyhG7fUwAFD6gZ5aUgSd4 x3v/lU1G8QpkCla6uYWS7XVhueYb066Qos8rmMVz9TmVbXi+ciYM5r2WjoKF1cHspub7D/PR3 tROTVpAvwfSdDcDmdGhsUTgvjARBWu3wsbfTnLLPIbNzFai6cd+YUuzG88QrAWNA/mwskQBZ7 xPfIiaSzWyBxlyXQZvwJpg1DyWtla2XQ/YAgwUKUHEc/EibeKg7REMlzBBb/K/M5QXZWP+yaN tOPrVYKEQzrhWEqHQp8SVAY2UeTCPn8r+wLI4x36Gm6GJ1/SHbqwANLRvyE4fWRXFDfY6iw+m pi5EjPilVZik7wmYhrViXhSHvQIf7UuNA9KkjA2S/GjmjNcIiOp4rnk0fxJ8cca+9e34bfgUn KNAV3haKJTy39qNQL8Tg== Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=212.227.17.12; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Marc-Andre Lureau , Thomas Huth , Li Zhang , Paolo Bonzini Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-Zoho-Virus-Status: 1 X-ZohoMail-DKIM: fail (Header signature does not verify) --Sig_//PrJ5vlsuz+nY_uAjJx4sNV Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Use the normal yank code instead of stubs in relevant tests to increase coverage and to ensure that registering and unregistering of yank instances and functions is done correctly. Signed-off-by: Lukas Straub --- tests/qtest/meson.build | 6 +++--- tests/unit/meson.build | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/qtest/meson.build b/tests/qtest/meson.build index 66ee9fbf45..40e1f495f7 100644 --- a/tests/qtest/meson.build +++ b/tests/qtest/meson.build @@ -234,9 +234,9 @@ tpmemu_files =3D ['tpm-emu.c', 'tpm-util.c', 'tpm-tests= .c'] qtests =3D { 'bios-tables-test': [io, 'boot-sector.c', 'acpi-utils.c', 'tpm-emu.c'], 'cdrom-test': files('boot-sector.c'), - 'dbus-vmstate-test': files('migration-helpers.c') + dbus_vmstate1, + 'dbus-vmstate-test': ['migration-helpers.c', dbus_vmstate1, '../../monit= or/yank.c'], 'ivshmem-test': [rt, '../../contrib/ivshmem-server/ivshmem-server.c'], - 'migration-test': files('migration-helpers.c'), + 'migration-test': ['migration-helpers.c', io, '../../monitor/yank.c'], 'pxe-test': files('boot-sector.c'), 'qos-test': [chardev, io, qos_test_ss.apply(config_host, strict: false).= sources()], 'tpm-crb-swtpm-test': [io, tpmemu_files], @@ -266,7 +266,7 @@ foreach dir : target_dirs endif qtest_env.set('G_TEST_DBUS_DAEMON', meson.source_root() / 'tests/dbus-vm= state-daemon.sh') qtest_env.set('QTEST_QEMU_BINARY', './qemu-system-' + target_base) - + foreach test : target_qtests # Executables are shared across targets, declare them only the first t= ime we # encounter them diff --git a/tests/unit/meson.build b/tests/unit/meson.build index 4bfe4627ba..8ccf60af66 100644 --- a/tests/unit/meson.build +++ b/tests/unit/meson.build @@ -123,7 +123,7 @@ if have_system 'test-util-sockets': ['socket-helpers.c'], 'test-base64': [], 'test-bufferiszero': [], - 'test-vmstate': [migration, io] + 'test-vmstate': [migration, io, '../../monitor/yank.c'] } if 'CONFIG_INOTIFY1' in config_host tests +=3D {'test-util-filemonitor': []} @@ -135,7 +135,7 @@ if have_system if 'CONFIG_TSAN' not in config_host if 'CONFIG_POSIX' in config_host tests +=3D { - 'test-char': ['socket-helpers.c', qom, io, chardev] + 'test-char': ['socket-helpers.c', qom, io, chardev, '../../monit= or/yank.c'] } endif -- 2.30.2 --Sig_//PrJ5vlsuz+nY_uAjJx4sNV Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEg/qxWKDZuPtyYo+kNasLKJxdslgFAmBYupsACgkQNasLKJxd sljS8g//bbAOJ8jkwNrEr2PLX8hN22P0tc5P4uDsPVwmH+SEEsQLrNEEpTzJ1xRD 1lQhkaxBjArd3kGDOZ243VVJz2idxMa4AyuKPnHHvNKGUkRULfa959avEu5yB3aH SZoicXP7oWhuYXBZxEpZZj3OuV+VXvM3S3y70oxlCzhQQ3pfY1ozonfxiCgqOhov FZ/luzxa8mQar1xeyap+2/SnchLHXOnbSxTs53zMQukNrzRQTFP3/ct+mkwgiRLx ITOc6fXgLJOu35YVgO2XugqAUr9S7Jh6fTGDSGHnJYVBK/jTT6SBFIBfEMEn89wd ReROaul1EnckvpPE6tVajUFC5pFyyMqxTj0EHdgpGclRrn30X1N2ik4LAaftTQFy hvopWMw0OOIiPox7kYOWrvyIwZFvPRluqxg84hYhoWFsj5HcpjPLkmT38xYRddFv 0dsK84NOjRPH6SzJBifkZNhi78dUe4SeFutADdsi7C8N4/sgwJeoDneUKFUmIC60 WGH9r/qK3Qyg8Od5tkWiQPGOXdrrPS68M7aqtgERiSLjeQxi2376/1AM4bo1bArb XWbLZlH1kj6JR9JXytX4nzXHFToUHqxkp6tynzqKKUV1uc5w/LDkMkZgjRKuco6h bH/ewT+DSp1ZKQs0+mpKI/z5kdQwb1TdhcXU9U/UHEo3bnjP4Iw= =ze9p -----END PGP SIGNATURE----- --Sig_//PrJ5vlsuz+nY_uAjJx4sNV-- From nobody Mon May 6 01:36:04 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=web.de ARC-Seal: i=1; a=rsa-sha256; t=1616428008; cv=none; d=zohomail.com; s=zohoarc; b=hUS+LO6qhgHwhqMZUwjesg/dq8W6Gv0YhY/CK4M9gKOnQHtAHyGSI9U9KCRTXzvlTqrmEv2J2m7xCuf6/nlsHV4Lb7Vt/3kY8fCTFByREWmQX+1u8hPMAv58lhLlQqKxWfSemNO/f8pilEUtOHmC5mXfJzYVtoasiFPkO4onrwg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1616428008; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=7kKfKQVOYkAcBA0c/7GwKm3IU4SwG9fsge6Mzfi6C5A=; b=M8amZZFG5coHqd2VPfxsQ3PU7TQXRFrsBQAKbqGqhfJ69A+lv1atiGrWL3J7eJ//7ilXFbn1ToBAGWnxljPE/xVi08ejuZVzMKBbjyKASEqW5uO2Z/ZAvjYNj7s8VPwua0VRWS3ZYeopYvwTANSNv1t77akrGfEs13pV08F29jg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1616428008844716.5720028373481; Mon, 22 Mar 2021 08:46:48 -0700 (PDT) Received: from localhost ([::1]:58708 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lOMlQ-0005fy-UM for importer@patchew.org; Mon, 22 Mar 2021 11:46:45 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37672) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lOMgi-0000SC-4W for qemu-devel@nongnu.org; Mon, 22 Mar 2021 11:41:52 -0400 Received: from mout.web.de ([212.227.17.12]:47719) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lOMgd-0005GL-Q7 for qemu-devel@nongnu.org; Mon, 22 Mar 2021 11:41:51 -0400 Received: from gecko.fritz.box ([94.134.180.232]) by smtp.web.de (mrweb105 [213.165.67.124]) with ESMTPSA (Nemesis) id 1M8T7K-1lJwpw2w0u-004hOH; Mon, 22 Mar 2021 16:41:24 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1616427684; bh=5qU7aaCHSk1bI1bCEfLbJChxRnkYoxmqTr9kqFB2wZU=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=CUmdrJpunjdB6rPC/4+nMxL+gYavH77PuDVUcQxsRIi1J6i/iBRgeg1G6iA4CuNRk xCIOSUapYX78uC8ihkbcOxQ94dAFWdEwV5WqaBn+KRyxv8QK6YME+3SqlMI3pSQjWe NfHwtRZUeSrNRa6lTBUg3T0UvTREN4vLtTnD7lZY= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Date: Mon, 22 Mar 2021 16:41:23 +0100 From: Lukas Straub To: qemu-devel Subject: [PATCH v2 2/5] tests: Add tests for yank with the chardev-change case Message-ID: <22ff5d8a4714a492e34609f21888e62abb06db43.1616427054.git.lukasstraub2@web.de> In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/_hMhZUq/sMde1ij=AUzzIzp"; protocol="application/pgp-signature"; micalg=pgp-sha256 X-Provags-ID: V03:K1:+T+bVaWdPeyTmRfCdrFiq3LzURsgFOXl7EZGwyKn7T52R36nzZr yQOfnQvjcgcILSieceqajeoa3spgFei2gN2TyU0ls41N1FIRNCkk/6XIZ2KxrfkIA38BTbJ ySglHk6dbVEz7yqu9YoQykC4u0v9npabgrVzCuBH/PACcVhFh9M0fXYiqlqEbydM6+p/ior FEdSAZu3XoM6X9x4MaojQ== X-UI-Out-Filterresults: notjunk:1;V03:K0:k1GiqNboc4I=:gsFwCbvKO7Oi+D2FtqsVv/ /CRsNzDyjmoopJXAVo54M59CnIhRGcfiz2Fdxkc8wTX6FkXkjSAQibLe+vKLJ9/9jXND6SQgq ONmAo4k96430pbYNYvjAKgPbnFLUZTizCv6B7LnGaeWAY4Ms8NAw40C1CFIl4Vr0XGZWvtdD0 F/U8crRP/CO41nWQXXyw2Tr7qa77ofLTzXl0ygubRCBLA78ODgtiYhhQKJ9UKw7YXre+k81Rh 7X1W49ZccDQyQKIPX4EPKFf1VFqvikB2szEspgsUFqpfjPf3+kd6hAYweG/PW9NvU27T/3DFW sTTzEGPGQzm1NGcTeQ/XaSeKrjfMN5edLS3Pkx2qG2ZQZqOoVN0XmwEyGzLcv9xMhpN3sBP8f 8SG9EPVworKr4TRW1/5/iwjcfZrvMU7y18qxjJZ2fSMu6Bi5GigU4eedy8vwZFxj9qIz7X1EO x84eJBtntvSi58Y+lBGG/RpjyFjeOBM2cewLP9MIMRV/A2SrjjKub1+I6zmrBQAHz7xnwLfUy nj6/YJju/xRFrHDOMOKzbxLDUcqCtL3jdXYDbnVwf5Qk2rfO3WgxBQqCJFIPkqwckLsA20oIg ndOKlHXqOUvSAb1g4Js2m64f/LkIhxU6QfFfGEfiYgkebAA+1T1gUQfvW29jW06eqcymtq2S2 U1ymGT7gERCNGmjClCkqab92639xEM79FPmrWIcMZPWXCblllmTrpJAu5Y6RIgi6BXe4Ik/gc GcnfFKpplNk0mf66b7nK/wvIKXMjH0g+dUDICHXuGWYsMeBCQBxHYk+msIPoTYwldK0tcBpmy OrK79fZPB538eCMPkiqGH8NK+IJ1xcdJ5F6faARA+SlW/7nVN6xi7mdeJjV4D0VFWCIqH/y/P LodwvCBd64QInCDqFShg== Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=212.227.17.12; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Marc-Andre Lureau , Thomas Huth , Li Zhang , Paolo Bonzini Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-Zoho-Virus-Status: 1 X-ZohoMail-DKIM: fail (Header signature does not verify) --Sig_/_hMhZUq/sMde1ij=AUzzIzp Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Add tests for yank with the chardev-change case. Signed-off-by: Lukas Straub --- MAINTAINERS | 1 + tests/unit/meson.build | 3 +- tests/unit/test-yank.c | 201 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 204 insertions(+), 1 deletion(-) create mode 100644 tests/unit/test-yank.c diff --git a/MAINTAINERS b/MAINTAINERS index aa024eed17..a8a7f0d1c2 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -2817,6 +2817,7 @@ F: monitor/yank.c F: stubs/yank.c F: include/qemu/yank.h F: qapi/yank.json +F: tests/unit/test-yank.c COLO Framework M: zhanghailiang diff --git a/tests/unit/meson.build b/tests/unit/meson.build index 8ccf60af66..38e5dba920 100644 --- a/tests/unit/meson.build +++ b/tests/unit/meson.build @@ -123,7 +123,8 @@ if have_system 'test-util-sockets': ['socket-helpers.c'], 'test-base64': [], 'test-bufferiszero': [], - 'test-vmstate': [migration, io, '../../monitor/yank.c'] + 'test-vmstate': [migration, io, '../../monitor/yank.c'], + 'test-yank': ['socket-helpers.c', qom, io, chardev, '../../monitor/yan= k.c'] } if 'CONFIG_INOTIFY1' in config_host tests +=3D {'test-util-filemonitor': []} diff --git a/tests/unit/test-yank.c b/tests/unit/test-yank.c new file mode 100644 index 0000000000..5cb94c2fe4 --- /dev/null +++ b/tests/unit/test-yank.c @@ -0,0 +1,201 @@ +/* + * Tests for QEMU yank feature + * + * Copyright (c) Lukas Straub + * + * This work is licensed under the terms of the GNU GPL, version 2 or late= r. + * See the COPYING file in the top-level directory. + */ + +#include "qemu/osdep.h" +#include + +#include "qemu/config-file.h" +#include "qemu/module.h" +#include "qemu/option.h" +#include "chardev/char-fe.h" +#include "sysemu/sysemu.h" +#include "qapi/error.h" +#include "qapi/qapi-commands-char.h" +#include "qapi/qapi-types-char.h" +#include "qapi/qapi-commands-yank.h" +#include "qapi/qapi-types-yank.h" +#include "io/channel-socket.h" +#include "socket-helpers.h" + +typedef struct { + SocketAddress *addr; + bool old_yank; + bool new_yank; + bool fail; +} CharChangeTestConfig; + +static int chardev_change(void *opaque) +{ + return 0; +} + +static bool is_yank_instance_registered(void) +{ + YankInstanceList *list; + bool ret; + + list =3D qmp_query_yank(&error_abort); + + ret =3D !!list; + + qapi_free_YankInstanceList(list); + + return ret; +} + +static void char_change_test(gconstpointer opaque) +{ + CharChangeTestConfig *conf =3D (gpointer) opaque; + SocketAddress *addr; + Chardev *chr; + CharBackend be; + ChardevReturn *ret; + QIOChannelSocket *ioc; + + /* + * Setup a listener socket and determine its address + * so we know the TCP port for the client later + */ + ioc =3D qio_channel_socket_new(); + g_assert_nonnull(ioc); + qio_channel_socket_listen_sync(ioc, conf->addr, 1, &error_abort); + addr =3D qio_channel_socket_get_local_address(ioc, &error_abort); + g_assert_nonnull(addr); + + ChardevBackend backend[2] =3D { + /* doesn't support yank */ + { .type =3D CHARDEV_BACKEND_KIND_NULL }, + /* supports yank */ + { + .type =3D CHARDEV_BACKEND_KIND_SOCKET, + .u.socket.data =3D &(ChardevSocket) { + .addr =3D &(SocketAddressLegacy) { + .type =3D SOCKET_ADDRESS_LEGACY_KIND_INET, + .u.inet.data =3D &addr->u.inet + }, + .has_server =3D true, + .server =3D false + } + } }; + + ChardevBackend fail_backend[2] =3D { + /* doesn't support yank */ + { + .type =3D CHARDEV_BACKEND_KIND_UDP, + .u.udp.data =3D &(ChardevUdp) { + .remote =3D &(SocketAddressLegacy) { + .type =3D SOCKET_ADDRESS_LEGACY_KIND_UNIX, + .u.q_unix.data =3D &(UnixSocketAddress) { + .path =3D (char *)"" + } + } + } + }, + /* supports yank */ + { + .type =3D CHARDEV_BACKEND_KIND_SOCKET, + .u.socket.data =3D &(ChardevSocket) { + .addr =3D &(SocketAddressLegacy) { + .type =3D SOCKET_ADDRESS_LEGACY_KIND_INET, + .u.inet.data =3D &(InetSocketAddress) { + .host =3D (char *)"127.0.0.1", + .port =3D (char *)"0" + } + }, + .has_server =3D true, + .server =3D false + } + } }; + + g_assert(!is_yank_instance_registered()); + + ret =3D qmp_chardev_add("chardev", &backend[conf->old_yank], &error_ab= ort); + qapi_free_ChardevReturn(ret); + chr =3D qemu_chr_find("chardev"); + g_assert_nonnull(chr); + + g_assert(is_yank_instance_registered() =3D=3D conf->old_yank); + + qemu_chr_wait_connected(chr, &error_abort); + qemu_chr_fe_init(&be, chr, &error_abort); + /* allow chardev-change */ + qemu_chr_fe_set_handlers(&be, NULL, NULL, + NULL, chardev_change, NULL, NULL, true); + + if (conf->fail) { + g_setenv("QTEST_SILENT_ERRORS", "1", 1); + ret =3D qmp_chardev_change("chardev", &fail_backend[conf->new_yank= ], + NULL); + g_assert_null(ret); + g_assert(be.chr =3D=3D chr); + g_assert(is_yank_instance_registered() =3D=3D conf->old_yank); + g_unsetenv("QTEST_SILENT_ERRORS"); + } else { + ret =3D qmp_chardev_change("chardev", &backend[conf->new_yank], + &error_abort); + g_assert_nonnull(ret); + g_assert(be.chr !=3D chr); + g_assert(is_yank_instance_registered() =3D=3D conf->new_yank); + } + + object_unparent(OBJECT(be.chr)); + object_unref(OBJECT(ioc)); + qapi_free_ChardevReturn(ret); +} + +static SocketAddress tcpaddr =3D { + .type =3D SOCKET_ADDRESS_TYPE_INET, + .u.inet.host =3D (char *)"127.0.0.1", + .u.inet.port =3D (char *)"0", +}; + +int main(int argc, char **argv) +{ + bool has_ipv4, has_ipv6; + + qemu_init_main_loop(&error_abort); + socket_init(); + + g_test_init(&argc, &argv, NULL); + + if (socket_check_protocol_support(&has_ipv4, &has_ipv6) < 0) { + g_printerr("socket_check_protocol_support() failed\n"); + goto end; + } + + if (!has_ipv4) { + goto end; + } + + module_call_init(MODULE_INIT_QOM); + qemu_add_opts(&qemu_chardev_opts); + +#define CHAR_CHANGE_TEST(name, _old_yank, _new_yank) = \ + do { = \ + g_test_add_data_func("/yank/char_change/success/" # name, = \ + &(CharChangeTestConfig) { .addr =3D &tcpaddr,= \ + .old_yank =3D (_old= _yank),\ + .new_yank =3D (_new= _yank),\ + .fail =3D false }, = \ + char_change_test); = \ + g_test_add_data_func("/yank/char_change/fail/" # name, = \ + &(CharChangeTestConfig) { .addr =3D &tcpaddr,= \ + .old_yank =3D (_old= _yank),\ + .new_yank =3D (_new= _yank),\ + .fail =3D true }, = \ + char_change_test); = \ + } while (0) + + CHAR_CHANGE_TEST(to_yank, false, true); + CHAR_CHANGE_TEST(yank_to_yank, true, true); + CHAR_CHANGE_TEST(from_yank, true, false); + +end: + return g_test_run(); +} -- 2.30.2 --Sig_/_hMhZUq/sMde1ij=AUzzIzp Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEg/qxWKDZuPtyYo+kNasLKJxdslgFAmBYuqMACgkQNasLKJxd sljScg//QQ+UwwY/P/TaKgywVIu5jGyOn3PcTIPS+F/HjuCTIrUDBG+Vp1pHw6Ap Cy8X7m0Iqu2WomUM11kwPwfhHKTf6zF/la+GCRYmh60GZ7W7dBAHhGIHXpWPXFmk ELmTevrIkaXQc5GvcLB/pDAjLKhbPsXfKL5eT3HRhlxAMPHXs8gFUkJo7p4eDYCS /PZwNpzrA1kDZd/T3iLAhiHvoqSQgaw/kpkUJnC320Y0yEW+HHFudr+LssoJHDpZ R8gYyVtr5R7L68TF6YmSPrDK5fhbarVPqfi1RTfmx42FVkUHjKXBxGNRorfA9210 UM7o4MmP1x7UylYYCwx29IVIWcAgb42ZvaFex7BgoKbyIpHmVhgAtPPRrN7lnio8 IpjQI/U9kSIfscWZ3EFe2GvkD6tFOmXZNjPXMv/dWr5VKTy9oMdBX45FGwzVIP9f vY1ganuQ1JGfn8VMS0C3tZJyZPpaspvdF9GsY6/jlQvzR/JbeXjS3xc+FTEH+bAu P1ee6VlRk52DZEAiCOjGeXm7EUrcHQp6tKY0uEWuSVJUXu5fftI4wXQuT4QZTzlo kWcSgI2bRLGmLDzlW6a9K1stc+Si46AXjDmBO5ZzxqsdbCCju57T6ReuqaiUU1Yp F4FnEcGmADo+PkqTP+wHEBdOQjtzGC0cmKRCR74QSdgoa6EWrbg= =VMmg -----END PGP SIGNATURE----- --Sig_/_hMhZUq/sMde1ij=AUzzIzp-- From nobody Mon May 6 01:36:04 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=web.de ARC-Seal: i=1; a=rsa-sha256; t=1616428193; cv=none; d=zohomail.com; s=zohoarc; b=Pey87/ivC8ZtH8ZtEb5o4wOL9ngc2mSAV3uLmE41i4az7IC9ECLsSn4FCkeXak5tb2M3NYkJUpYPGzEYqXgUVvURzIPTg/eIaml+gJ6RzvSHuN4XlQV5+j/qr4oBNouEGJYlfzq5NO7ZAqzdMNMLuF5ENAuav/BIQh3nN9l77sE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1616428193; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=yqBXUDE9FDGd22PuvfRXGF/iqVVCYe6Qx7BGNYgsbfY=; b=XShxsT+CaTedHBsfidNjIPkv25IOKUMV+94/L0RC7KqK//NaWYp84dFB7qhYTVRwhX++onfAiBQSpc7iOD0lEB6/nyq0Tg3/85X5ECzC/FNhS8aIihOJSU03lvMmBRuWTA3q+1lT/l/lkvaS+8z5EciZdL9XhJfv6xKcyUU0gGg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1616428193414819.4368417749064; Mon, 22 Mar 2021 08:49:53 -0700 (PDT) Received: from localhost ([::1]:40988 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lOMoS-0001dZ-CK for importer@patchew.org; Mon, 22 Mar 2021 11:49:52 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37630) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lOMgh-0000Q7-4Y for qemu-devel@nongnu.org; Mon, 22 Mar 2021 11:41:51 -0400 Received: from mout.web.de ([217.72.192.78]:42963) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lOMgR-0005E6-Me for qemu-devel@nongnu.org; Mon, 22 Mar 2021 11:41:50 -0400 Received: from gecko.fritz.box ([94.134.180.232]) by smtp.web.de (mrweb106 [213.165.67.124]) with ESMTPSA (Nemesis) id 1M9IOj-1lLsNj3Ue7-006ZDh; Mon, 22 Mar 2021 16:41:28 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1616427689; bh=Gl33u9j2TbXFFO3Gf5oBmhcCMRF22sas4Sh0IKghxLo=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=OOXJuQUWwXYbXYgtIE1HZJWRF/AFSLEA3ge7+HpzEzubp2P7mfVrYrAxw7R2aZUoi nKluI8OY5hHgVhzLWb41cUwywKiQhjLoY5La5z1z5AsopYglU5XjLKvmskDJdFGbAL nY6x6Eou3lXoaVWvcTqMMxP8ftWOxsy1HN7HYTIQ= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Date: Mon, 22 Mar 2021 16:41:27 +0100 From: Lukas Straub To: qemu-devel Subject: [PATCH v2 3/5] chardev/char.c: Move object_property_try_add_child out of chardev_new Message-ID: In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/TGd6SVci5DbR2+sSrlf=PCY"; protocol="application/pgp-signature"; micalg=pgp-sha256 X-Provags-ID: V03:K1:WWEqgPAmKKwYCrOwOCbVK5mvX7SBvcyRp9Ng0BOJpG+ySXjq08g eMD4g2ocFWKjMhwQBzOXy0SkdUUDB7gbhSln/RV/pol4AMqrpRDNp+2J9gLgHpaRXDfrK91 S51KZwP8tmDZAclcmrKJg+LgMNjHiUxYa1Sr/zXFrRUPl9F2nkUuh0EIV1/+UPkEltwmRc3 XvzO9Ii99ljmGiAr91upg== X-UI-Out-Filterresults: notjunk:1;V03:K0:k2eb/rfNrc0=:1KtGjgKH8iwyBIKL63yGW6 pHAXg/aAN3xcaPAKfsF3TGbEXUEuc6zFYotpKK7YuyFikcJCtvGTB40LfWp8x9Gt21MzvP52a +5VaDyQFFb19Q9d6609U3sXGGvVeyy9AZ9Gcl5/8Gb5gPEVKYdMIfQXVJgfLprpKaD/5v9w94 bA3sAtaEjkJzCJbpxHM06AURCekbc3bVITcOplYNsItpM3H2kWA+kGTH+w8zupbtL51Ji37SH 311AXlfNa0gcKjuLh2x4LS6eFrpeZx67nTebLBQzQMiH/c4mMuWEwJeQo8eK3MWMb+s+TKDL4 knjYR26qpXGMYzqLb9bwuYbaXJcaXnHBVZ80knWTo4tvmKFS0EodBsdAhVArHgYnZG/oTEjZT hVrsp/WKQvMHvm+ZDWhEx6clRgyed3kh8ccToXVlU47Qbom96ENv2dpj6l7MKONcAcR/OlJ52 eB81GMHgoPY1bPXUJ/F6tuhF5opaNOkpMi9hngHWKBI16l+Fb0SQQ2j0h7YKhVrG0F5BSmgeK WUVbB0TrEz4rFO+TndN/g3Qpu/FDb12lCtnL+GhMlf2QKSbxKybXHlZp9T1VzFOBNbxb+XcOy GessLkfHg50ssnQj0eOVL8oBH3Et7gtK7iSUZSG+ejkqsACPs5YWrRazpJTCn/8u11qqqMieu kjGVpr7A+2z7YJ54VmttKTCZ2JYbcGqmKbiNNpaGT56b1WB3tx3OC+a9m3txPl7LYE3E0Yvym kDH+trMOrGPZqJp5GRBrK+7+5BgD3L0Cw4WRbXdK+02c/62KOdKH8HV+wUunPrW/ILmYEzvT0 XrNOMQk/2KU9+yXbBddUcfHG4USuLVRR8X1TdQeEPwRy47jxX0Ei9OWRMukcJbxpqAVt8rVEY pExGIAuExplULf92vcbQ== Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=217.72.192.78; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Marc-Andre Lureau , Thomas Huth , Li Zhang , Paolo Bonzini Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-Zoho-Virus-Status: 1 X-ZohoMail-DKIM: fail (Header signature does not verify) --Sig_/TGd6SVci5DbR2+sSrlf=PCY Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Move object_property_try_add_child out of chardev_new into it's callers. This is a preparation for the next patches to fix yank with the chardev-change case. Signed-off-by: Lukas Straub Reviewed-by: Marc-Andr=C3=A9 Lureau Tested-by: Li Zhang --- chardev/char.c | 42 ++++++++++++++++++++++++------------------ 1 file changed, 24 insertions(+), 18 deletions(-) diff --git a/chardev/char.c b/chardev/char.c index 97cafd6849..1584865027 100644 --- a/chardev/char.c +++ b/chardev/char.c @@ -972,7 +972,9 @@ static Chardev *chardev_new(const char *id, const char = *typename, qemu_char_open(chr, backend, &be_opened, &local_err); if (local_err) { - goto end; + error_propagate(errp, local_err); + object_unref(obj); + return NULL; } if (!chr->filename) { @@ -982,22 +984,6 @@ static Chardev *chardev_new(const char *id, const char= *typename, qemu_chr_be_event(chr, CHR_EVENT_OPENED); } - if (id) { - object_property_try_add_child(get_chardevs_root(), id, obj, - &local_err); - if (local_err) { - goto end; - } - object_unref(obj); - } - -end: - if (local_err) { - error_propagate(errp, local_err); - object_unref(obj); - return NULL; - } - return chr; } @@ -1006,6 +992,7 @@ Chardev *qemu_chardev_new(const char *id, const char *= typename, GMainContext *gcontext, Error **errp) { + Chardev *chr; g_autofree char *genid =3D NULL; if (!id) { @@ -1013,7 +1000,19 @@ Chardev *qemu_chardev_new(const char *id, const char= *typename, id =3D genid; } - return chardev_new(id, typename, backend, gcontext, errp); + chr =3D chardev_new(id, typename, backend, gcontext, errp); + if (!chr) { + return NULL; + } + + if (!object_property_try_add_child(get_chardevs_root(), id, OBJECT(chr= ), + errp)) { + object_unref(OBJECT(chr)); + return NULL; + } + object_unref(OBJECT(chr)); + + return chr; } ChardevReturn *qmp_chardev_add(const char *id, ChardevBackend *backend, @@ -1034,6 +1033,13 @@ ChardevReturn *qmp_chardev_add(const char *id, Chard= evBackend *backend, return NULL; } + if (!object_property_try_add_child(get_chardevs_root(), id, OBJECT(chr= ), + errp)) { + object_unref(OBJECT(chr)); + return NULL; + } + object_unref(OBJECT(chr)); + ret =3D g_new0(ChardevReturn, 1); if (CHARDEV_IS_PTY(chr)) { ret->pty =3D g_strdup(chr->filename + 4); -- 2.30.2 --Sig_/TGd6SVci5DbR2+sSrlf=PCY Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEg/qxWKDZuPtyYo+kNasLKJxdslgFAmBYuqcACgkQNasLKJxd sliXahAAjuy36LExhdg5RRk9C/6kiKBncGBq8Hd/rblV9d/UtMrZoEjUycEaxSni ZiUscUBqHG8McWkTC1/lX3ayndq4/KvgYbNfSPFtiup7MSgJ3qvshtisAGhBekRW pmQEpFDIW8A62WbU0lsUsI3lI23DSwy5x4ENvu+uBCGiRY1WD3XLZmUVIkh5XNpR Cjw4SfuvKKbD0pBOA8lE0izwP4Y8pZtpi/C/FENx0xuxopSEiLUSqa0QaNWU9SY4 ketSCIb7HcjdFraNVKM1ApFTt5xoALDWZb9WWTcR1iBB61zMStHczp9vCfNKkvI3 vipCwY/r1/U/wMcOkVEb6h2Njn/rNkWNKECC080UXwHVIjvObX1qX2FZh+tNNs6L XKL4YnkoHZAAtzfO6L0Acgd6FiLimz0522ZYONTtqUt7hJUCqIFk7CYQzEeZWuhz /Wop6Wu+KJcHMoIyPplFV+WqMCK+IEa9WnCesxUxxW2Llc8ICGzusHUyeSDRXZDZ DPGx/XSx7pvkbgJ6qwaiPQOwBwEtH7sWYHXW6OhAzSMeR8NNYzqwYuZiJpc9fXpA LBXk2Lz60c9XkCcgwyxkLTSWBfpzVTA/yOkanYEv0WOzVEl59fp819Hb3RWQp9vp Max7IGdV2a/RvrXvZSFxNc2/LH0v/hHd+sx9jtJ3qV1Ko6BxKaE= =hDYX -----END PGP SIGNATURE----- --Sig_/TGd6SVci5DbR2+sSrlf=PCY-- From nobody Mon May 6 01:36:04 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=web.de ARC-Seal: i=1; a=rsa-sha256; t=1616427971; cv=none; d=zohomail.com; s=zohoarc; b=JHG1Z8tDZv8TvcAw2QA9SE9OgMuoX3mDBLrNnF+xfHid9zkCKR80OYc3jYHb32fT+SV1UnXSs78Hp9vU61OzQBqVg4bBUbX6EQ8qAe44anXXB0Rq8NxXNir+LsfIGDA1DYywKXBiKCHlPhiKk7UqKdCsj3FgVzyvZ1/UBklz6o4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1616427971; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=OAG8b4igbV8p29YT9+MvghQGswMSoxl/GySVkjruDvc=; b=mOBFpybMfrk4/sCXRhme/XF4uzR8+OITumhFOZw7i8LF36Ic7V5lQL0wcdICjxGUCI+f+N/MSAmTfbiT/bjwBJ5gPC531uSaPddeC0Uw8qFvXcV5kaD5AEVtcwqvSk2ZMdy0COqPPAspqv7rWZgUQbEGfeZ0Q7aKuXk3AP5vDlY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1616427971951476.7273902044474; Mon, 22 Mar 2021 08:46:11 -0700 (PDT) Received: from localhost ([::1]:57530 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lOMks-00053Q-U8 for importer@patchew.org; Mon, 22 Mar 2021 11:46:10 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37562) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lOMge-0000Mj-3E for qemu-devel@nongnu.org; Mon, 22 Mar 2021 11:41:49 -0400 Received: from mout.web.de ([217.72.192.78]:40069) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lOMgV-0005En-Hs for qemu-devel@nongnu.org; Mon, 22 Mar 2021 11:41:47 -0400 Received: from gecko.fritz.box ([94.134.180.232]) by smtp.web.de (mrweb101 [213.165.67.124]) with ESMTPSA (Nemesis) id 0LqDQS-1lt0Xc326i-00djuf; Mon, 22 Mar 2021 16:41:32 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1616427692; bh=L0ltj/xPM+GfqShAW2BRzGcukYQkjtL8g+z+vrC2mSs=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=F9XSbMm52JRPR96DiU92HSRFPsHG96Q7E6a8jpOx3rKpynYggSScCNBjs8M89HK0S outSSbzVTit7T/e7ISu5pxCSDaZzpaZo3zrDJhtJZM0ml9cK9MUXiSO3Mti2w9CCCv 53waQ1HQa6b83YHlM3ESqMa6v2PmUNZLZWNYYirw= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Date: Mon, 22 Mar 2021 16:41:31 +0100 From: Lukas Straub To: qemu-devel Subject: [PATCH v2 4/5] chardev/char.c: Always pass id to chardev_new Message-ID: <3ecfe359056401c1c986949a00cdb5951aab06da.1616427054.git.lukasstraub2@web.de> In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/Hfmc=Pst+OVZltXWVk=YOxn"; protocol="application/pgp-signature"; micalg=pgp-sha256 X-Provags-ID: V03:K1:C5gVK/GUUTcEEcOA+1kHvBcsP/zVagWVo42r5nU/yQmQA428WDV YpSZV6/5OFvZrtXcL74/KghhW+aoNZrFwhWbn6/rdqrse8iabgYSZNxGvEWYG6YI1VPeHyP C4wNljXdc0A8/lgkzs+IWaTANOXYKRrzOEQB/yGfPuArJ23GSs84Ng4hwOy26wSyWNQJslx 7XD5woGwrHVbPP+8VAcqg== X-UI-Out-Filterresults: notjunk:1;V03:K0:TUkqUaRY2H4=:odrNsvJqHeGYXiUXttlNIV 5nINf4O6TQ5HxBzdBfS64KFHPAO781k+z9tb5lMTRtvyg7GDN1I+COt8uNOAbGCQfLiePFOw/ Pb8K7+p59atBBOh4zeVIC6K2XDUjvx+yMt8Jd3xhfU/XNK+rdEjEyn9gCZdk+DG9ZPybRHvFy h2u0KpY94CcRRFSRxZoN255Xgc62+1CNUlbKS41dAqsbrLULnvMr8JCtP/Fkv7fi9hfpDv0Ep 5LHYsyF6xCQukmVLJxbuYQB8S2KJsSNEkqOHEC9nADK051oTVJelcUV0Vr5+NJeJdGJzPFwyQ qTqO8jy4V8VUbQyXxOHR07jUup9ZKZIh48Gau5H0vfjsPn85fhPLghJ108bOmcldhrtlZOqzB nXxPLglrRMDAEHIGvP0Kovv7joN9VKpu4pYyVBksGp2dr/ETYKAohpmYBoTHyiwLZEBS66HsA pKX3Tcyq24dcNbRZ6OG9qDBGVxvq870q9aLJtQ0Bf5gN1KPosmHd1Wbft3TuXVVU3Ff0aKhSb rXNLXDLAaT9usE3Yf2Fg57hjK0v6PmOeAfU0m5gi01i/UcvaUG5OFugNmxxgL3teeawPDFN0I IWHPVKRt7/OdEbOzm/Huv68kk5tDrSGl3qAJSrMWn9Q5jNp2gclcTMWSDY8eef2PxQ/QPhXWZ mXPyX31nNay25BXB4vqDexP/Vrz3260jF3zHwH9+kjdtVylJvaVZOpzo5EGNEnkiKUoWEig+Z USVqZTeaRs3ZgPJXlC40j6Sb1gqBr1oyI0cUl+0o7ArF5BGaPLYRgBqGacZ6z8a2PTNQZbGj9 6CS8L4skWbos/GkFyiMtoq1i233sMtKzeqovzi3ad68TRUMSSRe6k/BUjlb8H5rGUGZPMOpbB cmsEGYXsMdQKANNZ9v6A== Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=217.72.192.78; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Marc-Andre Lureau , Thomas Huth , Li Zhang , Paolo Bonzini Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-Zoho-Virus-Status: 1 X-ZohoMail-DKIM: fail (Header signature does not verify) --Sig_/Hfmc=Pst+OVZltXWVk=YOxn Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Always pass the id to chardev_new, since it is needed to register the yank instance for the chardev. Also, after checking that nothing calls chardev_new with id=3DNULL, assert() that id!=3DNULL. This fixes a crash when using chardev-change to change a chardev to chardev-socket, which attempts to register a yank instance. This in turn tries to dereference the NULL-pointer. Signed-off-by: Lukas Straub Reviewed-by: Marc-Andr=C3=A9 Lureau Tested-by: Li Zhang --- chardev/char.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/chardev/char.c b/chardev/char.c index 1584865027..ad416c0714 100644 --- a/chardev/char.c +++ b/chardev/char.c @@ -964,6 +964,7 @@ static Chardev *chardev_new(const char *id, const char = *typename, bool be_opened =3D true; assert(g_str_has_prefix(typename, "chardev-")); + assert(id); obj =3D object_new(typename); chr =3D CHARDEV(obj); @@ -1092,12 +1093,11 @@ ChardevReturn *qmp_chardev_change(const char *id, C= hardevBackend *backend, return NULL; } - chr_new =3D chardev_new(NULL, object_class_get_name(OBJECT_CLASS(cc)), + chr_new =3D chardev_new(id, object_class_get_name(OBJECT_CLASS(cc)), backend, chr->gcontext, errp); if (!chr_new) { return NULL; } - chr_new->label =3D g_strdup(id); if (chr->be_open && !chr_new->be_open) { qemu_chr_be_event(chr, CHR_EVENT_CLOSED); -- 2.30.2 --Sig_/Hfmc=Pst+OVZltXWVk=YOxn Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEg/qxWKDZuPtyYo+kNasLKJxdslgFAmBYuqsACgkQNasLKJxd slgL5BAAoKxzPuo1BP3t5tckgorz5SS5ql6eVDdx+pX8PtGTTLr064JnZus9PixO Ynnceuli/9HP5PgWAxlfYWkqo3/EJAcJAmIZqW4z1tKWnDbGBt6fqD+Fz0aYfXXv fMVpvUPNKgHNqId+K0ApHEe8cSU9Mf5S+j6pbIuMxn7w6UzYou4WUoej9st2Uwpa aRj9lcU6gthsRNYCdLB56xS0Wvk7j/kQbRt6ovsYxYSMimM7eDsfFmxala9X67d6 OX/FMSlaYfIwi0xpFrj2G+ALm/x1R0iLMPSUEyZKj3/BovfMhjFlNTnZc+UNQOq7 1PdpJyUdzhZQCUEGhqZIBOsTdy5GjWhuwweekneKX1u55KXNK0pRW4pvWwsK9JSC hY/2nrzjMBW86jBjNTdF/A7GyAKSWIYQfFqhSeFYWPK5cVcJ6zol6UQbQzHGx3St ELhR5h/aeYDRjzfo34aqLU69Qnwdwn00x5U2YP+AxdS3IF86U+khyV1yk82yXO4H AAt6/kzsDCe0gyYoir/Pw59QHihQY9LAxswCgQTm1dQKAJrRDzkeB0RUvKrkZ2oC LKjKKlw9Wegog0JW3j2jfBmHdCFMBW8KDMSdD5EaAA6/HyjVcD5smRPzSsjSds9s +CTRQ6LiXfZXxDkIXe0XQx0EwJEaKAJ865FaTC+UzdifV3tZHho= =JRyi -----END PGP SIGNATURE----- --Sig_/Hfmc=Pst+OVZltXWVk=YOxn-- From nobody Mon May 6 01:36:04 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=web.de ARC-Seal: i=1; a=rsa-sha256; t=1616427837; cv=none; d=zohomail.com; s=zohoarc; b=eSdhUeR4LnkgmG8a98kqU/tXlTJEQ3aNTdBbe02qwv5m2lrFmADn5BXGL+g6BjhM1ibs4ryyFHjtlQolUDW7bN0avMr78svU8EDjByJHIOBDfOFEke0MGNmleUQBUeQZikZ0H4zF4TnoTwoTbUiHlxmCG579+CI5bJ9bqGz1sJ4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1616427837; h=Content-Type:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=d7ZA17VDnD+WrkoR3syYChTaRFHNoLWc2ntUhMAla8w=; b=cOCzHD02jlhwWpgUjTBTtea4Ko3yP/rZwCaYmkTrdt9Fay5BDShugZT+iWynN0A+ldJr1Ml/oLFmu6lLRIoT+gn8POMPodrvkMKD+NzkhYyA5qX6FK4GmU82hvMq9ySE1h/YUh7iazjvY+uJthtAaEVK6fJAP4AGRZM9/dlsnvk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1616427836976774.5648644354338; Mon, 22 Mar 2021 08:43:56 -0700 (PDT) Received: from localhost ([::1]:50536 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lOMif-000296-Ox for importer@patchew.org; Mon, 22 Mar 2021 11:43:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37610) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lOMgg-0000Nu-9G for qemu-devel@nongnu.org; Mon, 22 Mar 2021 11:41:50 -0400 Received: from mout.web.de ([217.72.192.78]:48125) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lOMgY-0005FO-3c for qemu-devel@nongnu.org; Mon, 22 Mar 2021 11:41:49 -0400 Received: from gecko.fritz.box ([94.134.180.232]) by smtp.web.de (mrweb102 [213.165.67.124]) with ESMTPSA (Nemesis) id 0MPYNR-1lKDwn0tHN-004o0c; Mon, 22 Mar 2021 16:41:36 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=web.de; s=dbaedf251592; t=1616427696; bh=OF6dwf/LvxT6SIekZpv6byIhoBmvfTGfPJjzhen9Z3A=; h=X-UI-Sender-Class:Date:From:To:Cc:Subject:In-Reply-To:References; b=FPgyQSpWLXeEbvdC/pqT+Y9R+I0jXOpqMXVJDIKzZ5p2wDsU3B/GSPgpZ28QXnGuL ZcO9s8pJEGcmACnNYOC6f1a5sXLeDpBMBF9Tloqx+XcnCGGkz2XH7rUQctmdz5O4I8 ZwJgLoIlo+0kJukSleTIh+cgRT2+vQmYAzmL+rdo= X-UI-Sender-Class: c548c8c5-30a9-4db5-a2e7-cb6cb037b8f9 Date: Mon, 22 Mar 2021 16:41:34 +0100 From: Lukas Straub To: qemu-devel Subject: [PATCH v2 5/5] chardev: Fix yank with the chardev-change case Message-ID: <9d26845c5dc18241bcfd2ef5b8c4797c35b4b178.1616427054.git.lukasstraub2@web.de> In-Reply-To: References: MIME-Version: 1.0 Content-Type: multipart/signed; boundary="Sig_/oblpt4EBIBb7yhv0j5oGeeT"; protocol="application/pgp-signature"; micalg=pgp-sha256 X-Provags-ID: V03:K1:lXvr+MJ5KpTYUuw7HQExiNErNLCmHFMbdSxyIypPLEbU+76CQN6 DRHEXOWPU2ImyIuQ12IslnHEpX4ogfTcuh5l+jFuyU0k0MwuboHDH3JvgpAhe1adi3CyICk ouFFXJrz8F3g8lv51wYLD4UVcJ68g/G0CgXmC3gOVcYBYZiF2zWzTBaoN5rMAnu8WkGxoCI ylBkeDjry7lw9ptBQ6A1A== X-UI-Out-Filterresults: notjunk:1;V03:K0:skz1ysuLjlU=:vXfnpYSG18ol6FeCIC3vBh 3RIyMP03vP2QAkfCO9Asva0G0lxQZAKTY3cCc1458W8Tpv+SR/1ruK58Es3WJTcd/BO4NAA3W F1Dg6aas78vS1gTPBf43614dZbtnCSgu/sD4hUol7INid1DzcElu8srW7VoyyFf9gOYlp2wUE 95ISvgWuOT60rHKDCAcngErGL6Q7EKwK58pOhywg/vdqtoWopJr9OSLC3TKteOhN/YW/cHy+R 8X2jRUU/D+B/tCcAsTzt24xmf8aDRWIcIBzWV5XbOlKDB/u/dYbks85rvQDOSkzYvMBvAvTJ1 yMkHzIM/V3aWIPH14WgP6eGOHDuScHMptlEHtBEk3LQhT3RdHyw1rY0udoi2yq9er3Jjvq+cl Q5E8RDtJkTszQm033lr17fsXRhfqaX3N5VfXvoBVNuEZ+/m7YX1o8wFQVhCY1RAq9ArPP2cRU WOfSG2Ex99ydruW8bj7FZrPmQf4U8rqDl1ILYkKSaOUjRCjA/l4gbBmFKQD8NIwFu5vn9aAS4 GO2hlv9JN7MvNhK/r/cCCc+ihfJntSB+h8rjEOuGYsGguAZXyN7DopAEByC05hcd6zghWB6Gs OGcEQ+TpNQ+7gcL45CfVSsib4h7RCTpybJFdz0IN9ewf8Hzr2zrARvbHooNk3HohclyIzvNn1 UKRvXFMGVOHtRvBY4jv8ZoV2pBilipUVggwIbgM0Np/dlWHxYzxx15ghjnA4hRLR6AdXv6a2c fMfwY8aj1Lt9gp/GKaH4nXy6UwwvvObugkHA+H6Ba+Mw8fZvmFOEMPThLSM5bUspXyBecK/Kj b6BBl6waLg5kXtDWMbqQvJpQ08ejVZTGOtkMUTK3qfNiDQTR45GXBFSvdEvdiEDgM7VwPZNIh a2z+CBh/5jhZjieo+1oQ== Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=217.72.192.78; envelope-from=lukasstraub2@web.de; helo=mout.web.de X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Laurent Vivier , Marc-Andre Lureau , Thomas Huth , Li Zhang , Paolo Bonzini Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-Zoho-Virus-Status: 1 X-ZohoMail-DKIM: fail (Header signature does not verify) --Sig_/oblpt4EBIBb7yhv0j5oGeeT Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" When changing from chardev-socket (which supports yank) to chardev-socket again, it fails, because the new chardev attempts to register a new yank instance. This in turn fails, as there still is the yank instance from the current chardev. Also, the old chardev shouldn't unregister the yank instance when it is freed. To fix this, now the new chardev only registers a yank instance if the current chardev doesn't support yank and thus hasn't registered one already. Also, when the old chardev is freed, it now only unregisters the yank instance if the new chardev doesn't need it. If the initialization of the new chardev fails, it still has chr->handover_yank_instance set and won't unregister the yank instance when it is freed. s->registered_yank is always true here, as chardev-change only works on user-visible chardevs and those are guraranteed to register a yank instance as they are initialized via chardev_new() qemu_char_open() cc->open() (qmp_chardev_open_socket()). Signed-off-by: Lukas Straub Tested-by: Li Zhang --- chardev/char-socket.c | 20 +++++++++++++++++--- chardev/char.c | 35 ++++++++++++++++++++++++++++------- include/chardev/char.h | 3 +++ 3 files changed, 48 insertions(+), 10 deletions(-) diff --git a/chardev/char-socket.c b/chardev/char-socket.c index c8bced76b7..0cbe91f002 100644 --- a/chardev/char-socket.c +++ b/chardev/char-socket.c @@ -1119,7 +1119,13 @@ static void char_socket_finalize(Object *obj) } g_free(s->tls_authz); if (s->registered_yank) { - yank_unregister_instance(CHARDEV_YANK_INSTANCE(chr->label)); + /* + * In the chardev-change special-case, we shouldn't unregister the= yank + * instance, as it still may be needed. + */ + if (!chr->handover_yank_instance) { + yank_unregister_instance(CHARDEV_YANK_INSTANCE(chr->label)); + } } qemu_chr_be_event(chr, CHR_EVENT_CLOSED); @@ -1421,8 +1427,14 @@ static void qmp_chardev_open_socket(Chardev *chr, qemu_chr_set_feature(chr, QEMU_CHAR_FEATURE_FD_PASS); } - if (!yank_register_instance(CHARDEV_YANK_INSTANCE(chr->label), errp)) { - return; + /* + * In the chardev-change special-case, we shouldn't register a new yank + * instance, as there already may be one. + */ + if (!chr->handover_yank_instance) { + if (!yank_register_instance(CHARDEV_YANK_INSTANCE(chr->label), err= p)) { + return; + } } s->registered_yank =3D true; @@ -1564,6 +1576,8 @@ static void char_socket_class_init(ObjectClass *oc, v= oid *data) { ChardevClass *cc =3D CHARDEV_CLASS(oc); + cc->supports_yank =3D true; + cc->parse =3D qemu_chr_parse_socket; cc->open =3D qmp_chardev_open_socket; cc->chr_wait_connected =3D tcp_chr_wait_connected; diff --git a/chardev/char.c b/chardev/char.c index ad416c0714..9d8ec81a73 100644 --- a/chardev/char.c +++ b/chardev/char.c @@ -39,6 +39,7 @@ #include "qemu/option.h" #include "qemu/id.h" #include "qemu/coroutine.h" +#include "qemu/yank.h" #include "chardev-internal.h" @@ -266,6 +267,7 @@ static void char_init(Object *obj) { Chardev *chr =3D CHARDEV(obj); + chr->handover_yank_instance =3D false; chr->logfd =3D -1; qemu_mutex_init(&chr->chr_write_lock); @@ -956,6 +958,7 @@ void qemu_chr_set_feature(Chardev *chr, static Chardev *chardev_new(const char *id, const char *typename, ChardevBackend *backend, GMainContext *gcontext, + bool handover_yank_instance, Error **errp) { Object *obj; @@ -968,6 +971,7 @@ static Chardev *chardev_new(const char *id, const char = *typename, obj =3D object_new(typename); chr =3D CHARDEV(obj); + chr->handover_yank_instance =3D handover_yank_instance; chr->label =3D g_strdup(id); chr->gcontext =3D gcontext; @@ -1001,7 +1005,7 @@ Chardev *qemu_chardev_new(const char *id, const char = *typename, id =3D genid; } - chr =3D chardev_new(id, typename, backend, gcontext, errp); + chr =3D chardev_new(id, typename, backend, gcontext, false, errp); if (!chr) { return NULL; } @@ -1029,7 +1033,7 @@ ChardevReturn *qmp_chardev_add(const char *id, Charde= vBackend *backend, } chr =3D chardev_new(id, object_class_get_name(OBJECT_CLASS(cc)), - backend, NULL, errp); + backend, NULL, false, errp); if (!chr) { return NULL; } @@ -1054,9 +1058,10 @@ ChardevReturn *qmp_chardev_change(const char *id, Ch= ardevBackend *backend, Error **errp) { CharBackend *be; - const ChardevClass *cc; + const ChardevClass *cc, *cc_new; Chardev *chr, *chr_new; bool closed_sent =3D false; + bool handover_yank_instance; ChardevReturn *ret; chr =3D qemu_chr_find(id); @@ -1088,13 +1093,20 @@ ChardevReturn *qmp_chardev_change(const char *id, C= hardevBackend *backend, return NULL; } - cc =3D char_get_class(ChardevBackendKind_str(backend->type), errp); - if (!cc) { + cc =3D CHARDEV_GET_CLASS(chr); + cc_new =3D char_get_class(ChardevBackendKind_str(backend->type), errp); + if (!cc_new) { return NULL; } - chr_new =3D chardev_new(id, object_class_get_name(OBJECT_CLASS(cc)), - backend, chr->gcontext, errp); + /* + * The new chardev should not register a yank instance if the current + * chardev has registered one already. + */ + handover_yank_instance =3D cc->supports_yank && cc_new->supports_yank; + + chr_new =3D chardev_new(id, object_class_get_name(OBJECT_CLASS(cc_new)= ), + backend, chr->gcontext, handover_yank_instance, = errp); if (!chr_new) { return NULL; } @@ -1118,6 +1130,15 @@ ChardevReturn *qmp_chardev_change(const char *id, Ch= ardevBackend *backend, return NULL; } + /* change successfull, clean up */ + chr_new->handover_yank_instance =3D false; + + /* + * When the old chardev is freed, it should not unregister the yank + * instance if the new chardev needs it. + */ + chr->handover_yank_instance =3D handover_yank_instance; + object_unparent(OBJECT(chr)); object_property_add_child(get_chardevs_root(), chr_new->label, OBJECT(chr_new)); diff --git a/include/chardev/char.h b/include/chardev/char.h index 4181a2784a..7c0444f90d 100644 --- a/include/chardev/char.h +++ b/include/chardev/char.h @@ -65,6 +65,8 @@ struct Chardev { char *filename; int logfd; int be_open; + /* used to coordinate the chardev-change special-case: */ + bool handover_yank_instance; GSource *gsource; GMainContext *gcontext; DECLARE_BITMAP(features, QEMU_CHAR_FEATURE_LAST); @@ -251,6 +253,7 @@ struct ChardevClass { ObjectClass parent_class; bool internal; /* TODO: eventually use TYPE_USER_CREATABLE */ + bool supports_yank; void (*parse)(QemuOpts *opts, ChardevBackend *backend, Error **errp); void (*open)(Chardev *chr, ChardevBackend *backend, -- 2.30.2 --Sig_/oblpt4EBIBb7yhv0j5oGeeT Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQIzBAEBCAAdFiEEg/qxWKDZuPtyYo+kNasLKJxdslgFAmBYuq4ACgkQNasLKJxd slg1rg//csv4jjK2RJG1FcuLSWS1ZTLrkkYcfICIFpGIp/sMAJrc8sU5ySfBF9eI nsmHjIndYtlRf6RDy1dKKLtimmHhTpyP4ASlJN8tvjNViy0yz6eRKoEFRMDGVaVb mDTNfKgyQT3/M796qDAE2nSQwLedXL1IVrbMpEbVmHHQPUSuVj3jC7mQGWz9RFmy fp4ovwmfyN6VNAe5DpmemtCgMrTH1Y3fV9jMqln9h6+9cxcSIWWCwp21rkRnYqKu aGy6RJjAx+MmjfNfLn3wHtKozepUenufACEg1lloJt2CoW9vqUZbYBbnFvYFRxYI lWbpefITIWqhpR8bSBzJ0bAuKWMa9v/a6eJx0fZECHHLKnB7sST0BKxNlzhvLUd6 +sF47wLnAw4gfxu/hLonQgz/Ol69kgFDOYMuQRHKKNRJP8tMmtFSVE0u5yYYwKHx qeSYobASa4IbeMp4CCE01cn6tVGEZJFn6HXYg5aec+mI2D1isI5yGvnRiRR5BOVK KAFRk282VLgJmGYkQkpqRDLf5uJ3qdmbuUdsFDk+Lz6WsiBh0YKTFSZwSwsGuxb4 mONWuvm0qPTRbKwJrEdxGIpuAFipn8VCOO2CBz6UYeiHiwIJrPEZoFFZkSMLuiC8 DQ+XRR3K4kLyDF1/2GBykGnW7b3CH0hhotiDIMeyC+YC+VDS/B4= =ZQNk -----END PGP SIGNATURE----- --Sig_/oblpt4EBIBb7yhv0j5oGeeT--