From nobody Sun Sep 28 15:58:58 2025 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; 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 Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1758964263265372.6894924190244; Sat, 27 Sep 2025 02:11:03 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1v2Qs8-0004cQ-DT; Sat, 27 Sep 2025 05:05:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1v2Qrx-0004VP-4o; Sat, 27 Sep 2025 05:05:32 -0400 Received: from isrv.corpit.ru ([212.248.84.144]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1v2Qrk-0007AB-Py; Sat, 27 Sep 2025 05:05:27 -0400 Received: from tsrv.corpit.ru (tsrv.tls.msk.ru [192.168.177.2]) by isrv.corpit.ru (Postfix) with ESMTP id 207EA158562; Sat, 27 Sep 2025 12:03:03 +0300 (MSK) Received: from think4mjt.origo (mjtthink.wg.tls.msk.ru [192.168.177.146]) by tsrv.corpit.ru (Postfix) with ESMTP id F22D229157F; Sat, 27 Sep 2025 12:03:05 +0300 (MSK) From: Michael Tokarev To: qemu-devel@nongnu.org Cc: qemu-stable@nongnu.org, =?UTF-8?q?Marc-Andr=C3=A9=20Lureau?= , =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= , John Snow , Michael Tokarev Subject: [Stable-7.2.21 13/16] python/qemu/machine: use socketpair() for QMP by default Date: Sat, 27 Sep 2025 12:02:57 +0300 Message-ID: <20250927090304.2901324-13-mjt@tls.msk.ru> X-Mailer: git-send-email 2.47.3 In-Reply-To: References: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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.248.84.144; envelope-from=mjt@tls.msk.ru; helo=isrv.corpit.ru X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 5.0 requ) BAYES_00=-1.9, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=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.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZM-MESSAGEID: 1758964264018116600 From: Marc-Andr=C3=A9 Lureau When no monitor address is given, establish the QMP communication through a socketpair() (API is also supported on Windows since Python 3.5) Signed-off-by: Marc-Andr=C3=A9 Lureau Reviewed-by: Daniel P. Berrang=C3=A9 Message-id: 20230111080101.969151-4-marcandre.lureau@redhat.com [Resolved conflicts, fixed typing error. --js] Signed-off-by: John Snow (cherry picked from commit bd4c0ef409140bd1be393407c04005ac077d4574) (Mjt: this fixes quite a few qemu iotests which was probably racing somewhe= re) Signed-off-by: Michael Tokarev diff --git a/python/qemu/machine/machine.py b/python/qemu/machine/machine.py index 5df210c810..b6cb366584 100644 --- a/python/qemu/machine/machine.py +++ b/python/qemu/machine/machine.py @@ -158,17 +158,13 @@ def __init__(self, self._qmp_timer =3D qmp_timer =20 self._name =3D name or f"{id(self):x}" + self._sock_pair: Optional[Tuple[socket.socket, socket.socket]] =3D= None self._temp_dir: Optional[str] =3D None self._base_temp_dir =3D base_temp_dir self._sock_dir =3D sock_dir self._log_dir =3D log_dir =20 - if monitor_address is not None: - self._monitor_address =3D monitor_address - else: - self._monitor_address =3D os.path.join( - self.sock_dir, f"{self._name}.qmp" - ) + self._monitor_address =3D monitor_address =20 self._console_log_path =3D console_log if self._console_log_path: @@ -303,7 +299,11 @@ def _base_args(self) -> List[str]: args =3D ['-display', 'none', '-vga', 'none'] =20 if self._qmp_set: - if isinstance(self._monitor_address, tuple): + if self._sock_pair: + fd =3D self._sock_pair[0].fileno() + os.set_inheritable(fd, True) + moncdev =3D f"socket,id=3Dmon,fd=3D{fd}" + elif isinstance(self._monitor_address, tuple): moncdev =3D "socket,id=3Dmon,host=3D{},port=3D{}".format( *self._monitor_address ) @@ -337,10 +337,17 @@ def _pre_launch(self) -> None: self._remove_files.append(self._console_address) =20 if self._qmp_set: + monitor_address =3D None + sock =3D None + if self._monitor_address is None: + self._sock_pair =3D socket.socketpair() + sock =3D self._sock_pair[1] if isinstance(self._monitor_address, str): self._remove_files.append(self._monitor_address) + monitor_address =3D self._monitor_address self._qmp_connection =3D QEMUMonitorProtocol( - self._monitor_address, + address=3Dmonitor_address, + sock=3Dsock, server=3DTrue, nickname=3Dself._name ) @@ -360,6 +367,8 @@ def _pre_launch(self) -> None: )) =20 def _post_launch(self) -> None: + if self._sock_pair: + self._sock_pair[0].close() if self._qmp_connection: self._qmp.accept(self._qmp_timer) =20 --=20 2.47.3