From nobody Mon Jun 8 12:13:50 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1780903051; cv=none; d=zohomail.com; s=zohoarc; b=fZDeOUzLwOyLyG1gYcN/F3whC21WWOKa+tkbQGlmGdpWvvz+b8D95dDOMDkDTGogX9rQe+dHUMYyXbaVZa3o4DKyW/vjcaE/qIMzeqqk+ZfegTsSKZwQD4oJmu8EvUQlZGEP30AZfh/LiC0UDisRcF4s5CHIiethbO3ewFOzN1k= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780903051; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=b1gkuruH5XWMTJyA5erpca7lqSDKedkWZ3gg3SM5nBk=; b=UIcaNRt4bEU6pRqJ6+TT5d0lcqkkXv6GDvgg+r4DHRtHxEGUcLZP6xesK0TWFvYWSgrlGBqKyV3acXE4KUbmiDs3VXCebiJUvwkyp+WCdkloX48Pkg7foVHxSEFySbw4a9cflFV0MkL/+EGy3LhQ1ASc8ISaHT/x6MQR3YALbTU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 178090305148631.558999239941045; Mon, 8 Jun 2026 00:17:31 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWUES-0007XY-4o; Mon, 08 Jun 2026 03:17:12 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUEM-0007WO-Sx for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:17:07 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUEJ-0008HU-SX for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:17:06 -0400 Received: from mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-446-9Se4UYf7OW25JBe7gUa4sg-1; Mon, 08 Jun 2026 03:16:58 -0400 Received: from mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.111]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id EBE4B195DBB0; Mon, 8 Jun 2026 07:16:43 +0000 (UTC) Received: from localhost (unknown [10.44.22.16]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 2666018005B8; Mon, 8 Jun 2026 07:16:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780903022; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=b1gkuruH5XWMTJyA5erpca7lqSDKedkWZ3gg3SM5nBk=; b=PqFJAUko4e1xrF9RnAwHqInYq9FjPbC1PIRpI7E7HAXNYgX26mJ71imIKushM9dlsC13Hp /NBnAoj6NyymgKQVug5/aebGmDIQzr5LNv7mzEniJtjDO4JfzD9aljROxP8ONRsXO+rkO4 cYAvWlZE3Cv5NELT0Ng240jq7FxWLZU= X-MC-Unique: 9Se4UYf7OW25JBe7gUa4sg-1 X-Mimecast-MFC-AGG-ID: 9Se4UYf7OW25JBe7gUa4sg_1780903016 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Mon, 08 Jun 2026 11:16:19 +0400 Subject: [PATCH v2 01/33] ui/gtk: fix bad widget realize on non-GFX VC MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260608-b4-ui-v2-1-9ea6355ea08f@redhat.com> References: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> In-Reply-To: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> To: qemu-devel@nongnu.org Cc: Paolo Bonzini , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Pierrick Bouvier , Fabiano Rosas , Laurent Vivier , Alex Williamson , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Peter Maydell , Akihiko Odaki , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= X-Developer-Signature: v=1; a=openpgp-sha256; l=791; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=1HVXF5aqswsOauiRIK5zGEQJ8C97FyfNU89DV/WKbEw=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqJmxH+40tXh3vUuws3fBfWhUU/KuHRbFHr7anI JHj/XIeMkiJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCaiZsRwAKCRDa6OEJdZac 5RkBEACdtCwfpIBmh9tf1qnj3HIbATMG0/pvV9K/vScLGbn2TxqTrpUqfEvkVvOPLrtzdCM2USm 5rpUOJAJsjflMxewHpOr4X8w2cMMgQT1R5TdxZ7dd/aWgC+lmxg3qUaDA5/sDJ61LkvVSddZLRW jzbqUoImH3MJcj0Le2y3x3BAcBvZ+5HsM7W6W6cjd5cdr4D4HGPQE1+z1X9tzmWFFNXo9mK88qM f9tNGkmOePuuZbeANmW6/I1G4tmeH3qgg7rsYXPUzayg0+ZbiLvHTFU6ujfmOL+19fhjGy4rL0q dmOGVFvXzhwg+HSLc7vlJJXmrJpTJuJXCs1uC/VPc+35kE21DuDIrYymfgPLZ229iVCKxAS2xdX FHTdyBGaOAKC8UJQ4d2M8S5Umzu9uL44cYXjMRWLs2Vej5yUVVu9KWLUQQkuLSV3pxxtMq+E8Gc IiDD0wj5MoY66mD0TUmVUr0UQN/IYoZwbWF7VIsAIP73uF8Ns6Pq7hB5VU3y+xT3ede7JGoh5DF 0ZSWmtT9kMD9n9thefd/mmyoeBDmjysv06pCldF0BQIap3TE4FmZ3pHnqocKBzy+oaHi+/BeB03 YzO/eZ9p653r7cYFn1Zc9izfTAXufqRq7jmcSP8nihaAymCSwwlVBrv0GDZ2x9qxeDKbmHb5ejK aoPG26wLOXlaTkg== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.111 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 8 X-Spam_score: 0.8 X-Spam_bar: / X-Spam_report: (0.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1780903054724154100 The GTK VirtualConsole is a union, it may be .gfx or .vte depending on the type. Fixes: 565f85a9c2 ("ui/gtk: force realization of drawing area") Signed-off-by: Marc-Andr=C3=A9 Lureau Reviewed-by: Daniel P. Berrang=C3=A9 --- ui/gtk.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/ui/gtk.c b/ui/gtk.c index 4f706c6bbb2..2ee826b56fb 100644 --- a/ui/gtk.c +++ b/ui/gtk.c @@ -2585,7 +2585,9 @@ static void gtk_display_init(DisplayState *ds, Displa= yOptions *opts) if (!con) { break; } - gtk_widget_realize(s->vc[idx].gfx.drawing_area); + if (s->vc[idx].type =3D=3D GD_VC_GFX) { + gtk_widget_realize(s->vc[idx].gfx.drawing_area); + } } =20 if (opts->u.gtk.has_show_menubar && --=20 2.54.0 From nobody Mon Jun 8 12:13:50 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1780903069; cv=none; d=zohomail.com; s=zohoarc; b=emQAWaovQs+i10zAhY9HjGnWDDPAl08ywvIGPpYkDGNkzv6PNVt8fa6MofRhhAh0xXOC1zoFTkttThcW+IujgOoZ6ORDMmHCtygIDmoG68/vuv6B9diC2yjSKs/9Rna5sOAaOiQBiaf2byiDQf9v83sMAiMuNn3a3ScUSkWHyJk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780903069; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=2NOLZxbPovEmcF485gB8YHfSGPUMzoplq1iZoovF3nM=; b=Gw6vd/CqPOv1910NY1yy83L3dqHOQhosOMn0FLZTKvPvMWeEutGWG5ctj0nZfbgpug69Kb6iv1WrmQGgBSUYlgc8z+PzeNDXNQRdDomyvvsZ186ZDRLiwmcaYzxqH6nVX2zn56ppcvc5MTjCHfAzdlkkL+j1gqy+UtxiTask7CQ= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1780903069442685.9052743420568; Mon, 8 Jun 2026 00:17:49 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWUET-0007YQ-Iy; Mon, 08 Jun 2026 03:17:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUEQ-0007Wv-CO for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:17:11 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUEO-0008Ik-Fl for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:17:10 -0400 Received: from mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-645-u90KAHsiOvSiQ8MY_3cy8A-1; Mon, 08 Jun 2026 03:17:03 -0400 Received: from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 9946F18005A6; Mon, 8 Jun 2026 07:16:49 +0000 (UTC) Received: from localhost (unknown [10.44.22.16]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id E898B19560A2; Mon, 8 Jun 2026 07:16:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780903027; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=2NOLZxbPovEmcF485gB8YHfSGPUMzoplq1iZoovF3nM=; b=Kx6QwbVOpTQLxx6lq449tmDnYo4f08XXiAa96ubRYjFEegt+Kbfcc2hLW2Hls1uh0LfTij POZJmrQUu75cPLkAjpl/c3F6BQtgnRkPvfUvEsYSZZrTC+t5MSaPvd0B2li0h7BBHjp5LT biSESY8HeUhwNAEPPT66fVibx/dcV9Q= X-MC-Unique: u90KAHsiOvSiQ8MY_3cy8A-1 X-Mimecast-MFC-AGG-ID: u90KAHsiOvSiQ8MY_3cy8A_1780903022 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Mon, 08 Jun 2026 11:16:20 +0400 Subject: [PATCH v2 02/33] build-sys: build with -fno-omit-frame-pointer with ASAN MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260608-b4-ui-v2-2-9ea6355ea08f@redhat.com> References: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> In-Reply-To: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> To: qemu-devel@nongnu.org Cc: Paolo Bonzini , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Pierrick Bouvier , Fabiano Rosas , Laurent Vivier , Alex Williamson , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Peter Maydell , Akihiko Odaki , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= X-Developer-Signature: v=1; a=openpgp-sha256; l=780; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=gmRieSy7YIQF3DAHwWXNcE5raE5XS8w6VE6DgvhJdaI=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqJmxHqF8JnReriRintlpyIy+szK4T8G5ei/6zn tRenmifyAuJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCaiZsRwAKCRDa6OEJdZac 5UG8EACkjoFzhyW5J8KrF6YsexN25RXyfgVlgdUcXvLvweqfEEEaq4UKc/8UNNch+lWEp+hIQXS ZOsOAUDYLS4tknBZJqAjn8+qqxyKcbrftUzNA4oqqlBmymQg1XDyO3JDCKaivIAG7USCavvqvfd 5oSFY42cxrGUrK3y2br+Ll4Uqu2hHN6dJfTMMWMSMhA0kOhWKQfJJZvg4dDlDqbkhBOvsshh+YW G7WvDqHvgVWrgQB0L8shI2x/fcQWOjTrxGxXyCpyM8a2pQdDtInhMB9/8GMKMNLmxxkFk/EOV7b tCOMTWgzVX6Mfqx6NW2/+KQQpQ3vYcTp1eGbHdbWlR3jlBBpPCYQUvIGcogMfv/IsyzCnedTyqw fVnuQZqnPcQdc/QxSSXgYJkU4wutnIl02JoBZU26s8i8B+SUTnzmDR5mLy9zxsn6Mxbbe6GNghs XWM2ZohD51MHYJRMbudTWUH8HRIZ+XoKlIDZkAUHCctO1rtt++aMudPLL6/J9yTLUWQDnB54/l0 PLlf6KOIjFDmXFAfjrwg0CcEj5kZb81tN59PxqBNRmEwyx1c8G3gZnTxzU48dc9np0RMWsYtZJr PPMWJ6jYUOgXtXr+1NbiFQaN4eUmDfFPITu49egspuPBJBZPwAiNuUV54gRXBa+P41o5JRAn6yr rlXRi+aiiPCtyWg== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.12 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com 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, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-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: qemu development 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-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1780903072524154100 On fc44, LSan fails to suppress leak:qemu_irq_intercept_in, because the backtrace isn't deep enough. Signed-off-by: Marc-Andr=C3=A9 Lureau Reviewed-by: Daniel P. Berrang=C3=A9 --- meson.build | 2 ++ 1 file changed, 2 insertions(+) diff --git a/meson.build b/meson.build index 19e123423b5..3711483b95e 100644 --- a/meson.build +++ b/meson.build @@ -545,6 +545,8 @@ if get_option('asan') if cc.has_argument('-fsanitize=3Daddress') qemu_cflags =3D ['-fsanitize=3Daddress'] + qemu_cflags qemu_ldflags =3D ['-fsanitize=3Daddress'] + qemu_ldflags + # Ensure complete stack traces for LSan suppressions to match correctl= y. + qemu_cflags +=3D ['-fno-omit-frame-pointer'] else error('Your compiler does not support -fsanitize=3Daddress') endif --=20 2.54.0 From nobody Mon Jun 8 12:13:50 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1780903077; cv=none; d=zohomail.com; s=zohoarc; b=ZuI1HCmncKWaXfrdgD8KnCJelfj5wC1ksAA+ghbQAj91CEx5KgXl2gepWHsrBJ91+oFiyZpI9HosZ2YB3iDyHekaBVYO9sY4xcQoa9ovlPJjNUVSTtSRZQDyLmLyHWnUTSgITWjR+p/EKV8Pld5u1ZHa7/6cscxk8OaXR/ob1SA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780903077; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Smidf6FMOj3LuQCqpb0c6LifDKbvfiyh56oQEfYvK00=; b=knSyVzATyJn5h4m/t7bKViod+Z7LYPzemRaep5v23gx4NMqboMf9vl5V/vF4AGlJlFwCF6iW5dWqCF5t2bbBa59+MxQF9vXSA7XxQeiOpskXQWz2wifdx1jHIy8Rclho6GvtumRqJR7m1e4k5yhpe44EkjMIN/lkg6f0+nxsTdI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1780903077481156.0381557645327; Mon, 8 Jun 2026 00:17:57 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWUEY-0007ZC-S5; Mon, 08 Jun 2026 03:17:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUEV-0007Yi-Dr for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:17:15 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUES-0008Jz-Ju for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:17:15 -0400 Received: from mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-187-mMpK1EXsMiKwiwJX3bYJhA-1; Mon, 08 Jun 2026 03:17:08 -0400 Received: from mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.93]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 5BA931953964; Mon, 8 Jun 2026 07:16:55 +0000 (UTC) Received: from localhost (unknown [10.44.22.16]) by mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id B0B361800367; Mon, 8 Jun 2026 07:16:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780903031; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Smidf6FMOj3LuQCqpb0c6LifDKbvfiyh56oQEfYvK00=; b=E++HpKZirn/v3CZ062xLrea5knaqrDyHuGBRgzrWK4jNlhPOXLkgcCIaf5vBOF3LJPzLCK 2tuqFZ21XgIYuS/QKeQ3iA/IOySh//fFVNjQug/o/qbUcn1ORQf4jwDbnhNJ16pmAqCXSK dQpTt255AaQNqp1R4l/aBBc+hUD+Yqk= X-MC-Unique: mMpK1EXsMiKwiwJX3bYJhA-1 X-Mimecast-MFC-AGG-ID: mMpK1EXsMiKwiwJX3bYJhA_1780903027 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Mon, 08 Jun 2026 11:16:21 +0400 Subject: [PATCH v2 03/33] irq: add per-IRQ observer to fix qemu_irq_intercept_in leak MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260608-b4-ui-v2-3-9ea6355ea08f@redhat.com> References: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> In-Reply-To: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> To: qemu-devel@nongnu.org Cc: Paolo Bonzini , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Pierrick Bouvier , Fabiano Rosas , Laurent Vivier , Alex Williamson , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Peter Maydell , Akihiko Odaki , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= X-Developer-Signature: v=1; a=openpgp-sha256; l=4758; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=AgfY59Jw3FWwwFgiVCxaDztJQCKR319w+PzxgVpWWCs=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqJmxIzsaMU2+QvNuqIarn069RwIgoXo3GSi6fT O3CIqfLpOaJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCaiZsSAAKCRDa6OEJdZac 5U9XD/9G+WwVZkimFzPt9JCYwG2kIPdD18cnufFYfqrus+x9WPyEUTtk/zPf4VQRBpJTdgnrvNv Vv9n4J5mpiZUmwiHFsrOgv6V0dnjBb4qKTJ1vGP7/FPr+KsjqEK17INPpylixIE2OgGBJfgiiI8 4Scei2TSrAoNyKQXtuFMM6ndEbk0Lh4pU+/d0fYE4vahRH6y8d7XKXMugjevMAhvs73+eTdiPvq 5IIuJI52zoMhooaG3q8Hml9sY1JpB/Bvp/B7SlVa75wvh0BK/3/COlrHpVntLJ88UOo+vRAXKuQ E3xN0/SL9bVE+A9+nDC7t9Dar9VK+0uyX9mCYUL2t3CiHnYKoEGifz6lxGunY8+cUgOMbTvXbtf +o73Yd6o2G7A4SACvhJP4hQ/7YRyEh9Sh0QdESCFez5fFNh81IFDabOF3lPZcfn85Wy9W7oqo7P FM1Exn8y811XLfnfeQ5yuvxPovjjmvmIAF0CRckbSuNkJKKiJq3tAOTTisC+XFhTwKrQ49W0mb1 iW/6xdjbKR4ITI7XziA76UHe0pb2pV8i3kxKiEZj/KdcRDmw0SWd6xZIag7A9j/P0wRfde5022O JNt8HPd1esRoakaBHe3XGKzP1jdbu6YVqrCka7jE1in1Joi7HsRAhVPoy7D7mR0SkUqqHtSnOHe snHRrBAkOxLbFJQ== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.93 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 8 X-Spam_score: 0.8 X-Spam_bar: / X-Spam_report: (0.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1780903080766154100 qemu_irq_intercept_in() saves original IRQ handlers by allocating new QOM objects, which are never freed. On a PC machine, this leaks IRQ objects (one per IOAPIC pin) on every qtest run. Rather than tracking allocations to free later, avoid them: add an "observer" field to IRQState, called by qemu_set_irq() after the real handler. Interception sets the observer instead of rewriting handlers, so there's nothing to save and nothing to leak. Fix qemu_notirq() to route through qemu_set_irq() so inverted IRQs trigger observers too. Drop the LSan suppression. Reviewed-by: Fabiano Rosas Signed-off-by: Marc-Andr=C3=A9 Lureau --- include/hw/core/irq.h | 6 +++--- hw/core/irq.c | 12 ++++++------ system/qtest.c | 5 +---- scripts/lsan_suppressions.txt | 8 -------- 4 files changed, 10 insertions(+), 21 deletions(-) diff --git a/include/hw/core/irq.h b/include/hw/core/irq.h index 291fdd67df4..299a4a9a8ce 100644 --- a/include/hw/core/irq.h +++ b/include/hw/core/irq.h @@ -14,6 +14,7 @@ struct IRQState { qemu_irq_handler handler; void *opaque; int n; + qemu_irq_handler observer; }; =20 void qemu_set_irq(qemu_irq irq, int level); @@ -96,9 +97,8 @@ void qemu_free_irq(qemu_irq irq); /* Returns a new IRQ with opposite polarity. */ qemu_irq qemu_irq_invert(qemu_irq irq); =20 -/* For internal use in qtest. Similar to qemu_irq_split, but operating - on an existing vector of qemu_irq. */ -void qemu_irq_intercept_in(qemu_irq *gpio_in, qemu_irq_handler handler, in= t n); +/* For internal use in qtest. */ +void qemu_irq_set_observer(qemu_irq *gpio_in, qemu_irq_handler handler, in= t n); =20 /** * qemu_irq_is_connected: Return true if IRQ line is wired up diff --git a/hw/core/irq.c b/hw/core/irq.c index 106805e2417..1b610e75e15 100644 --- a/hw/core/irq.c +++ b/hw/core/irq.c @@ -32,6 +32,9 @@ void qemu_set_irq(qemu_irq irq, int level) return; =20 irq->handler(irq->opaque, irq->n, level); + if (unlikely(irq->observer)) { + irq->observer(irq->opaque, irq->n, level); + } } =20 static void init_irq_fields(IRQState *irq, qemu_irq_handler handler, @@ -111,7 +114,7 @@ static void qemu_notirq(void *opaque, int line, int lev= el) { IRQState *irq =3D opaque; =20 - irq->handler(irq->opaque, irq->n, !level); + qemu_set_irq(irq, !level); } =20 qemu_irq qemu_irq_invert(qemu_irq irq) @@ -121,14 +124,11 @@ qemu_irq qemu_irq_invert(qemu_irq irq) return qemu_allocate_irq(qemu_notirq, irq, 0); } =20 -void qemu_irq_intercept_in(qemu_irq *gpio_in, qemu_irq_handler handler, in= t n) +void qemu_irq_set_observer(qemu_irq *gpio_in, qemu_irq_handler handler, in= t n) { int i; - qemu_irq *old_irqs =3D qemu_allocate_irqs(NULL, NULL, n); for (i =3D 0; i < n; i++) { - *old_irqs[i] =3D *gpio_in[i]; - gpio_in[i]->handler =3D handler; - gpio_in[i]->opaque =3D &old_irqs[i]; + gpio_in[i]->observer =3D handler; } } =20 diff --git a/system/qtest.c b/system/qtest.c index fd37bcbfaab..cf301239177 100644 --- a/system/qtest.c +++ b/system/qtest.c @@ -326,9 +326,6 @@ void qtest_sendf(CharFrontend *chr, const char *fmt, ..= .) =20 static void qtest_irq_handler(void *opaque, int n, int level) { - qemu_irq old_irq =3D *(qemu_irq *)opaque; - qemu_set_irq(old_irq, level); - if (irq_levels[n] !=3D level) { CharFrontend *chr =3D &qtest->qtest_chr; irq_levels[n] =3D level; @@ -421,7 +418,7 @@ static void qtest_process_command(CharFrontend *chr, gc= har **words) interception_succeeded =3D true; } } else { - qemu_irq_intercept_in(ngl->in, qtest_irq_handler, + qemu_irq_set_observer(ngl->in, qtest_irq_handler, ngl->num_in); interception_succeeded =3D true; } diff --git a/scripts/lsan_suppressions.txt b/scripts/lsan_suppressions.txt index f88bbab18b8..30256bc6d01 100644 --- a/scripts/lsan_suppressions.txt +++ b/scripts/lsan_suppressions.txt @@ -16,11 +16,3 @@ leak:/lib64/libxkbcommon.so.0 # https://github.com/GNOME/glib/blob/main/tools/glib.supp # This avoids false positive leak reports for the qga-ssh-test. leak:g_set_user_dirs - -# qemu_irq_intercept_in is only used by the qtest harness, and -# its API inherently involves a leak. -# While we could keep track of the old IRQ data structure -# in order to free it, it doesn't seem very important to fix -# since it is only used by the qtest test harness. -# Just ignore the leak, at least for the moment. -leak:qemu_irq_intercept_in --=20 2.54.0 From nobody Mon Jun 8 12:13:50 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1780903057; cv=none; d=zohomail.com; s=zohoarc; b=NNn5XhXNklM30XSBdwylVSur+eqiOoFi7qOhoZpOQMTmTO4WRUfeCI2VgpjOT4fGekq3s3Tjorb8IxxLT5d0fPGw5fYqXX0TdASMTNUHdl9J793JvjuOKDYXbaDqoEfhhj1iG0SvXuULl0L9jCgxmMYDXVR0gqYdONi72qgvfLA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780903057; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=G5SzvzpXGBk9fZpb0FRhhyEQyeRaoQnIRBj/ot4ruJI=; b=lEDkQkAdc6Ft7VrN9IOTa9ASd/Z71GMssg8Do67nuOGtvojpXv3q/bjOuCvbFxM3BoRsrtNmxz61DTnJvDfOrbW9s96qKTdYKDiRYdWBkHFhu/5/Wo1lJXpxAvJwiStQFP9sWfkDqCimVvSdJgiZRXSV5/Hj7taQwCCq0y9dZPA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1780903057897442.94061021632047; Mon, 8 Jun 2026 00:17:37 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWUEb-0007Zl-Ev; Mon, 08 Jun 2026 03:17:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUEa-0007Zb-LR for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:17:20 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUEW-0008Ko-3q for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:17:20 -0400 Received: from mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-582-ZIZyOojlOASGOtK0OiVeMQ-1; Mon, 08 Jun 2026 03:17:12 -0400 Received: from mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.111]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 8A1A31955E94; Mon, 8 Jun 2026 07:17:00 +0000 (UTC) Received: from localhost (unknown [10.44.22.16]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id EB559180049F; Mon, 8 Jun 2026 07:16:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780903035; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=G5SzvzpXGBk9fZpb0FRhhyEQyeRaoQnIRBj/ot4ruJI=; b=KghYeVMBsIAcxoC4fpDF3DZr8zAlzhYtr/m9NKrOkWNo9w40hsWllLRgUXAomH+0DSTnye sEtl2O2GyPqVwbOLG/GverhmbK+Mv+frge1u4h73f2BmvJuTcSvEY1yIMKILnHVgyXNYVM MPmrYihmi54/9Wzl2jOJ117kdqRnlY8= X-MC-Unique: ZIZyOojlOASGOtK0OiVeMQ-1 X-Mimecast-MFC-AGG-ID: ZIZyOojlOASGOtK0OiVeMQ_1780903031 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Mon, 08 Jun 2026 11:16:22 +0400 Subject: [PATCH v2 04/33] scripts/lsan_suppressions: suppress fontconfig leaks MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260608-b4-ui-v2-4-9ea6355ea08f@redhat.com> References: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> In-Reply-To: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> To: qemu-devel@nongnu.org Cc: Paolo Bonzini , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Pierrick Bouvier , Fabiano Rosas , Laurent Vivier , Alex Williamson , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Peter Maydell , Akihiko Odaki , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= X-Developer-Signature: v=1; a=openpgp-sha256; l=842; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=3FLGohYn6yxaHskRhEfW2sASVFQSoADTVQldsLNnhHQ=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqJmxIsmyj4dpHC8QwMKXSF8wcic02Pz4GZjHK8 vX1cbBD8paJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCaiZsSAAKCRDa6OEJdZac 5espEACe7yPFCosPWFi2BoI0CKpg2PvWwxrYPKDEZxGhR5TyWPG9oFepCaedzZbNlaTlKswRnnJ SKlqtxlKuVc20cxK3L/o+RRr+5neWUboeYelKEMrIZ2qJOJiX6F1cIoCpwYsL8sGEc15Rwfesx5 po+4iFSYfBts0fEZ034kvDfDy7rvDpXwy4lLfV1Zn89luVLgsnZzHI18CPwWxyC8q2H9Rn6JsES G7noCyXESeOcBDZE93/RCY+MlzISqfvRxwzIXfJY4uDsokvryeDnegwGU67ltsppa62gYet7e5V zaVgtXyxP/9527+ohyZtXez1Fo8nP1IrBV66Nfp3DiSXzlZ2QOM5oB7389TziMYX8pY6a2IaIVK b4t9KLr26isnhafS3tBPEintHeInNAC8JRs1DCFfIoPkTDgy69xiZNsVDZJNlymJnAxTR2AIvYB SARmO3wUrSAXZBMtBLpQMSJCqQ3EAaDjCuaNVlgPwTszs6+ui3TGl+iIxLQ/KnZN8NENDWQOTsb d1yXZhTM/Df9AWvvKOWkO9ot3xuU+4tylyksTKrp6BCn3+l0wKhYXYDPGos/LA0o2DQGVJkNlRM GcNCnOKGwU0olFekExFphHog/N2GwOD/7m7XgQK85Y3g2BI3VSbOX1Wz+lXlWL4tgGSUrjNdA35 V0eHlgFrMWmZWEg== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.111 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 8 X-Spam_score: 0.8 X-Spam_bar: / X-Spam_report: (0.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1780903061055158500 Those are annoying reports for gtk/sdl etc. Signed-off-by: Marc-Andr=C3=A9 Lureau Reviewed-by: Daniel P. Berrang=C3=A9 --- scripts/lsan_suppressions.txt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/scripts/lsan_suppressions.txt b/scripts/lsan_suppressions.txt index 30256bc6d01..f3b827facff 100644 --- a/scripts/lsan_suppressions.txt +++ b/scripts/lsan_suppressions.txt @@ -10,6 +10,10 @@ leak:/lib64/libtcmalloc_minimal.so.4 # libxkbcommon also leaks in qemu-keymap leak:/lib64/libxkbcommon.so.0 =20 +# libfontconfig leaks are notorious, for ex +# https://gitlab.freedesktop.org/fontconfig/fontconfig/-/work_items/519 +leak:libfontconfig.so + # g_set_user_dirs() deliberately leaks the previous cached g_get_user_* # values. This is documented in upstream glib's valgrind-format # suppression file: --=20 2.54.0 From nobody Mon Jun 8 12:13:50 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1780903093; cv=none; d=zohomail.com; s=zohoarc; b=fkU1cX/x514u3VqRxByyTfSas2KHztNorDIqFwMZKoGyxEicK8ts60x5bFD8UDDq79ONPAptb5Sv9xuNco8gRBHAJJkD6rM7iL922MK0jjCc1zOwyQj6Csz6iEnt3GcBAphRNJXEXP4exZap7uzE3DDdIlMqAlJ4fWGe2bFSTmY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780903093; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=aUnppt3zZ6J4KL/3jUgG//BerI9sXfCD2NeAfiGYx0E=; b=YNE/gK9yiSw7FZr08r8vK0Eo0w0ex6/vTLZSoD10sS2BGegx5vpz7m2uSyBeYl88P5VxTc37iYGYM7FqKBjEweUwGnl3oRZS9PEbu9FVpojqBeLRek4al58V4laSHGvZlnqFm8lWsNc2eedS8S/pBd/ou2nbIoKwDv/97jpOp94= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1780903093902480.6232103695205; Mon, 8 Jun 2026 00:18:13 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWUEc-0007Zm-7e; Mon, 08 Jun 2026 03:17:22 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUEZ-0007ZU-NO for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:17:20 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUEY-0008Kz-5S for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:17:19 -0400 Received: from mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-232-BcgE1UOMNmqGvvPy66mZvw-1; Mon, 08 Jun 2026 03:17:14 -0400 Received: from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.17]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 634B1195DB9C; Mon, 8 Jun 2026 07:17:06 +0000 (UTC) Received: from localhost (unknown [10.44.22.16]) by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 7AA2B1956053; Mon, 8 Jun 2026 07:17:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780903037; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=aUnppt3zZ6J4KL/3jUgG//BerI9sXfCD2NeAfiGYx0E=; b=U5THUtkK8SwnzUAPPVbkfeGHCUZct2sjoTNM+phzTpP2GJPzpGz/LxAmVHvcLeMd1ijVB5 vSypNiw1ejw4suA2SFTziN3h2EiMYdx7fNiXubVcP/TqPNU+ow/h/sTrHAenTR3XgDEoW0 H7TGzzJguCi4cTaZpnzppxFAluJTvH8= X-MC-Unique: BcgE1UOMNmqGvvPy66mZvw-1 X-Mimecast-MFC-AGG-ID: BcgE1UOMNmqGvvPy66mZvw_1780903033 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Mon, 08 Jun 2026 11:16:23 +0400 Subject: [PATCH v2 05/33] vfio/pci: close display console during unrealize, not finalize MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260608-b4-ui-v2-5-9ea6355ea08f@redhat.com> References: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> In-Reply-To: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> To: qemu-devel@nongnu.org Cc: Paolo Bonzini , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Pierrick Bouvier , Fabiano Rosas , Laurent Vivier , Alex Williamson , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Peter Maydell , Akihiko Odaki , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= X-Developer-Signature: v=1; a=openpgp-sha256; l=3665; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=ttKR1/sfL9cktoq6rbHU+J5rJDaU7RMjgOqYO6e1mjM=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqJmxIP3LWWmgkIvIC5bV+bHsXcRbZcbXxPupBG bjezb5wYcSJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCaiZsSAAKCRDa6OEJdZac 5bYJD/0W5u4eObI4YZ9474nIgndL5UlgM+mJWUZaTEaXcDjiV2HRsGdvBfzTKney6jSERHwCQ1x c90TzcyY2G/JXiTYD45WT2uElAxxKcJb8BSb8te4EzoVmn8ulURxz/bVrTZRjpeab3wtMD+t3dz BzA70Cc9vathGaYNDy8zIwhHRZkUlqO5vGSwqh1vACbrFo69igF15zQbXPhShk6v90MynnDLrq/ hEz1Ou24vePsunhLnSvl9Z+IKm+r+oEXebDaLDcIT4iTGPL4rzQl/Np6SRo3agYNsYhyjA1s13l HnGZk5vHdGHN3R7z7hpxh15R4R8RKBhmf+0oxzAyuVtYtvDC7DjdDsqSVUz6caF7lwNiaTK0S0v fBdsqUa99vRwyQVcK0PtAj5trpQXMkJHkh0iVVLWPf2limSTjZBgFNP5AhGjGcXCGM0suBzo/CP UDxpTdtc+g85RTbWmDDcpYqfAKJrt+g2vF1E9NhK4SprHFV3L09thd5GS7GxzCNf9XfheIVWrQ/ LVvL4oktk1cktmI2XvabS0Z2oSNFdUEwl96LlXMU5GDzmzmMqMyzDlujZkLjmanxHVJdcUcCNSp inNebG8ddcqtjTIVN7RoQw2kW62xYSezN4EcODO8Bb/jSAgzJ1hTMR5NIYRYDygBjgfghVgejKn geSx1EMDhlstaYw== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.17 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 8 X-Spam_score: 0.8 X-Spam_bar: / X-Spam_report: (0.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1780903096338154100 The QemuGraphicConsole holds a strong QOM link back to the device via its "device" property (OBJ_PROP_LINK_STRONG). When graphic_console_close() is only called from vfio_display_finalize() during object finalize, this creates a ref-cycle deadlock: the device can't reach refcount 0 because the console holds a strong ref, but the console's ref is only dropped by graphic_console_close() which runs inside finalize. Split the display teardown into two phases: - vfio_display_exit(): called during unrealize (vfio_exitfn), closes the graphic console to break the ref cycle, and removes display region subregions while the parent memory regions are still alive. - vfio_display_finalize(): remains in finalize (vfio_pci_put_device), frees display region memory, dmabuf, and edid resources. The region memory contains QOM child objects (MemoryRegions) that must stay alive until QOM finalization has processed them. Signed-off-by: Marc-Andr=C3=A9 Lureau --- hw/vfio/pci.h | 1 + hw/vfio/display.c | 30 +++++++++++++++++++----------- hw/vfio/pci.c | 1 + 3 files changed, 21 insertions(+), 11 deletions(-) diff --git a/hw/vfio/pci.h b/hw/vfio/pci.h index c3a1f53d350..cf567115870 100644 --- a/hw/vfio/pci.h +++ b/hw/vfio/pci.h @@ -270,6 +270,7 @@ bool vfio_populate_vga(VFIOPCIDevice *vdev, Error **err= p); =20 void vfio_display_reset(VFIOPCIDevice *vdev); bool vfio_display_probe(VFIOPCIDevice *vdev, Error **errp); +void vfio_display_exit(VFIOPCIDevice *vdev); void vfio_display_finalize(VFIOPCIDevice *vdev); =20 extern const VMStateDescription vfio_display_vmstate; diff --git a/hw/vfio/display.c b/hw/vfio/display.c index 8f91e83da88..34cc25ee0e0 100644 --- a/hw/vfio/display.c +++ b/hw/vfio/display.c @@ -505,15 +505,6 @@ static bool vfio_display_region_init(VFIOPCIDevice *vd= ev, Error **errp) return true; } =20 -static void vfio_display_region_exit(VFIODisplay *dpy) -{ - if (!dpy->region.buffer.size) { - return; - } - - vfio_region_exit(&dpy->region.buffer); - vfio_region_finalize(&dpy->region.buffer); -} =20 /* ---------------------------------------------------------------------- = */ =20 @@ -547,17 +538,34 @@ bool vfio_display_probe(VFIOPCIDevice *vdev, Error **= errp) return false; } =20 -void vfio_display_finalize(VFIOPCIDevice *vdev) +void vfio_display_exit(VFIOPCIDevice *vdev) { if (!vdev->dpy) { return; } =20 + if (display_opengl) { + qemu_console_set_display_gl_ctx(vdev->dpy->con, NULL); + } qemu_graphic_console_close(vdev->dpy->con); + if (vdev->dpy->region.buffer.size) { + vfio_region_exit(&vdev->dpy->region.buffer); + } +} + +void vfio_display_finalize(VFIOPCIDevice *vdev) +{ + if (!vdev->dpy) { + return; + } + vfio_display_dmabuf_exit(vdev->dpy); - vfio_display_region_exit(vdev->dpy); + if (vdev->dpy->region.buffer.size) { + vfio_region_finalize(&vdev->dpy->region.buffer); + } vfio_display_edid_exit(vdev->dpy); g_free(vdev->dpy); + vdev->dpy =3D NULL; } =20 static bool migrate_needed(void *opaque) diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c index 9c06b25e637..78beacd24e1 100644 --- a/hw/vfio/pci.c +++ b/hw/vfio/pci.c @@ -3624,6 +3624,7 @@ static void vfio_exitfn(PCIDevice *pdev) VFIOPCIDevice *vdev =3D VFIO_PCI_DEVICE(pdev); VFIODevice *vbasedev =3D &vdev->vbasedev; =20 + vfio_display_exit(vdev); vfio_unregister_req_notifier(vdev); vfio_unregister_err_notifier(vdev); pci_device_set_intx_routing_notifier(pdev, NULL); --=20 2.54.0 From nobody Mon Jun 8 12:13:50 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1780903059; cv=none; d=zohomail.com; s=zohoarc; b=C2X+tUgJQ8CM1+0QDKZzo7UMh8ChbdUZI5Uxfy5hIMq2zCp4W4moPdfF7iZ54GLyBQpGv5QynCebfLqHch48UQr4dUc9D3Q5Smc3Lbz7gqFyh7+wAvxUlHPR8Zo0A22mPusSYLU7OeObJZdmWRe5IpBFuvNVsDFbaWzs7J0pwVY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780903059; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=NiPRbgAGG9+H5A2Rhy9bpK7HQJj7Pl9u84rDJDqgsuw=; b=L3xT/GrSqtppJNeLQUb3a8amAXk9g1Bbrli2rmsJ2FlA2PS+81j6sAaDzgt2Tz+sJMEHsSQpaINqDlNZ+UhxT1ktfw+h0+oXY3tujAyVHztwQ7HmjLhMfG0Xx8l4Vp3bdL41WOpSPf8bAz69ecuqp5di0ux/xqU7Egh3aYcGEYI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1780903059023801.5578960022175; Mon, 8 Jun 2026 00:17:39 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWUEe-0007ax-4k; Mon, 08 Jun 2026 03:17:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUEc-0007Zz-4B for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:17:22 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUEa-0008LA-5j for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:17:21 -0400 Received: from mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-222-CoFDv1seP1mfFXbpPSzoVw-1; Mon, 08 Jun 2026 03:17:13 -0400 Received: from mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.93]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 10B2719560B1; Mon, 8 Jun 2026 07:17:12 +0000 (UTC) Received: from localhost (unknown [10.44.22.16]) by mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 3BD011800480; Mon, 8 Jun 2026 07:17:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780903039; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=NiPRbgAGG9+H5A2Rhy9bpK7HQJj7Pl9u84rDJDqgsuw=; b=MedilRb1ApkcDaXMJhZHTIfY+yl8fQSDDtxMiaghczZGgKR8YP+ZQ3ZB4WFlEuyqOsUpFE XKsC1kk4hHYOiILWhdZtWYWlfKsuVUp1J52LC4W/6UfumssYphNjTY5QpjTXeaZ/eBRos8 0ti7smg+L9LQuRip+VUmtkG1fCKc9fQ= X-MC-Unique: CoFDv1seP1mfFXbpPSzoVw-1 X-Mimecast-MFC-AGG-ID: CoFDv1seP1mfFXbpPSzoVw_1780903032 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Mon, 08 Jun 2026 11:16:24 +0400 Subject: [PATCH v2 06/33] glib-compat: add fallback for g_clear_fd/g_autofd MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260608-b4-ui-v2-6-9ea6355ea08f@redhat.com> References: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> In-Reply-To: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> To: qemu-devel@nongnu.org Cc: Paolo Bonzini , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Pierrick Bouvier , Fabiano Rosas , Laurent Vivier , Alex Williamson , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Peter Maydell , Akihiko Odaki , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= X-Developer-Signature: v=1; a=openpgp-sha256; l=1408; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=yIivtAt+njPmx4qztb8O8h6ia85KP5LqwxILrMj9U00=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqJmxIgWyIOIRXmjCwAXcRk11LXemF4Y0nTEQZm EskNzS/BduJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCaiZsSAAKCRDa6OEJdZac 5aiUEACTfCMbkEAocgRTpkAI/x9fRrFeywZ3zQ+3SRAqTkZ4ua5ifb4JYcLJzarY4i9HQPiIrDJ fzlxlazgik8VCfDWOzt+zuU8nvwdf8jOzTSELa7rNGYduKfoAVAwSPXJgok+5KXUwlSiH7YFWBU gzdQ2Xb2qStB5F1KXBrrg82Z8QXh3XoxuIyM6q0n5sDkvpXY2xdKFJgS3HoIqPYReznixUZnBHn 0r70Q/G4aYwU0yQS0t8pghPX6aGCLFYfxY1txv8JYjYljtX1GP7SyMQvjxkzFT0YFAfilXJ6KMQ TZ0HgAjsWcj4n1nGsdnosX7WKlVib2SKAbOqMfA287HpJ3wH8l3B696uS/w4obu1NouJm9xvffB 4E0iWBrZaf9NQTlzbtq4/t0BFtqAJmORAV1oJwwYJjQJiJj/O1lDlTTfDI1j1OBFyRLwMWzDIMz ezPgSygDQnDO0c36FA+TEUoiwcQd6ZHK+ucPBFnJ3M8ozNtc90QvkSgky+nJkn8vigaltut2uwC 25YBx5PxVBTsAuYnIXwxLhfx7yO/lWREM+UPp/h9aecxedFv7F06w+aZ4PrLkJveUJ7KtfduaAj g4WNxBZLmHxXd61g2/9yQs5/gZB/dILAclbDVGoq1hf0Vc4gAfD0QIIpIeRUQxCkbJTGTHIctkJ 2oqs/ZGy/vWLJvA== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.93 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 8 X-Spam_score: 0.8 X-Spam_bar: / X-Spam_report: (0.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1780903061062158500 Those helpers were added in glib 2.76. Signed-off-by: Marc-Andr=C3=A9 Lureau Reviewed-by: Daniel P. Berrang=C3=A9 --- include/glib-compat.h | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/include/glib-compat.h b/include/glib-compat.h index 2e32b90f051..32ee2afdcdf 100644 --- a/include/glib-compat.h +++ b/include/glib-compat.h @@ -30,6 +30,7 @@ #pragma GCC diagnostic ignored "-Wdeprecated-declarations" =20 #include +#include #if defined(G_OS_UNIX) #include #include @@ -129,6 +130,34 @@ qemu_g_test_slow(void) #define g_test_thorough() qemu_g_test_slow() #define g_test_quick() (!qemu_g_test_slow()) =20 +static inline gboolean g_clear_fd_qemu(int *fd_ptr, GError **error) +{ +#if GLIB_CHECK_VERSION(2, 76, 0) + return g_clear_fd(fd_ptr, error); +#else + int fd =3D *fd_ptr; + + *fd_ptr =3D -1; + + if (fd < 0) { + return TRUE; + } + + return g_close(fd, error); +#endif +} +#define g_clear_fd(fd, err) g_clear_fd_qemu(fd, err) + +#if !GLIB_CHECK_VERSION(2, 76, 0) +static inline void _g_clear_fd_ignore_error(int *fd_ptr) +{ + int errsv =3D errno; + g_clear_fd(fd_ptr, NULL); + errno =3D errsv; +} +#define g_autofd __attribute__((cleanup(_g_clear_fd_ignore_error))) +#endif + #pragma GCC diagnostic pop =20 #ifndef G_NORETURN --=20 2.54.0 From nobody Mon Jun 8 12:13:50 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1780903064; cv=none; d=zohomail.com; s=zohoarc; b=DEcbs0n7HNeurk0Ca3Wmreqt8qH1RgQpETHNDBzCjSUqn7+oXnrm936M8VgHpN9FMH8WfyQtaazVzOt2/KPoKUhZMg39tIRS4yBAy78JgRJw+mKHJTjxYzlJSi9l9ibjLxLNqF7uvI99jRGZxgo0vC/0zqTu+PO35WmgRwAQ2EM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780903064; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=42pjXpnS3GuIn7s6Zh3seKv48mIlHa86AQ8iMF/OKzA=; b=TCMdk4YKWoFv5ZKoUGLh3kOso/Hps7GQY9dGzKVwk3weGmVyoo8lCopmEzLTB28V0VgawBo4A0bgcS6xaPceoCBCWGyfd9lgkLSov/RcoSDJETJWST6p0i7YDNPIvlrbm5Vu4yStrZbz5q2OtpBDOUYcSQQ8Ci6Qv0/07Y7Ts34= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1780903064086186.71741369271274; Mon, 8 Jun 2026 00:17:44 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWUEg-0007bS-Er; Mon, 08 Jun 2026 03:17:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUEe-0007b0-5o for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:17:24 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUEc-0008Li-Pc for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:17:23 -0400 Received: from mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-288-Hz9-mQ0kPg2ccKnwxA02Cg-1; Mon, 08 Jun 2026 03:17:18 -0400 Received: from mx-prod-int-10.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-10.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.95]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 7C4B219560A1; Mon, 8 Jun 2026 07:17:17 +0000 (UTC) Received: from localhost (unknown [10.44.22.16]) by mx-prod-int-10.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 167D21624; Mon, 8 Jun 2026 07:17:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780903042; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=42pjXpnS3GuIn7s6Zh3seKv48mIlHa86AQ8iMF/OKzA=; b=ZG/ml+HJmmUYipUVrx/wWzniJAata4kKu206d0HJ8I5k3+y8AM7/6aBLbbTeQrjS6ihEv7 wnAbC4UaTQyvylo+wzPaJn97uT81OeSmlFyNRvwCGVNVQMGbf9E1Ez29EqhLdvLRRAadR4 0FwYltpTcAlFsJErryh4+bDmxRdzY+A= X-MC-Unique: Hz9-mQ0kPg2ccKnwxA02Cg-1 X-Mimecast-MFC-AGG-ID: Hz9-mQ0kPg2ccKnwxA02Cg_1780903037 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Mon, 08 Jun 2026 11:16:25 +0400 Subject: [PATCH v2 07/33] ui/dbus: remove mouse handler on dispose MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260608-b4-ui-v2-7-9ea6355ea08f@redhat.com> References: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> In-Reply-To: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> To: qemu-devel@nongnu.org Cc: Paolo Bonzini , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Pierrick Bouvier , Fabiano Rosas , Laurent Vivier , Alex Williamson , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Peter Maydell , Akihiko Odaki , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= X-Developer-Signature: v=1; a=openpgp-sha256; l=719; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=Zlbop9zuN6D0e4GxEJlAcaL73bwcfVgoQ3P7DEp7fMs=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqJmxIl0k7OJW2wftFX4HM3DVfNXftb7kh5RfHQ z0LPZliz4aJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCaiZsSAAKCRDa6OEJdZac 5YW/D/9c/3BUi5xDZvezUbEtrwKztoYJ3uikyESq6CJvC9cUt05ccQJOyV28tWJVlG3DdwYJ+1g XxwKJunAYq84OuMGsf3ndIZ5T1said5AYnbNywJmuW5iFh9wbCAkbCBMfqtHsF8eMnMiZQUQM0W Ss5DsMvH4WcK2m5x8XKafTvQn31W8yfTcxsh01SXcGjmYJr1MxDw86G9edLV/9LcsNy+Q1tzRG3 EUGN08NtwJkRimfxeyL3ETgSWd21jKy10PZ0BT26bjgIqdTCXYZVE19HusfLTZrZzF7OpPO1sTc NADWOlUp7ecC5ANC7Lw2IqKmiAUF27VvcZO/n7b9OOkhVfmfDAFEmoFc6vkpt5r81cQ8wM1p7si N5tTlSgCy2V6+xv68JZ/39XwDFmUfFenFFusaion3T/rGDyVCaF3lgrnsh3to5De5LqCRDxIq8X H9Jw6d1NxjLGCi8TvXqKf2ZNoCzxzyZ8hRmEtWhUSxiEIYEikBcf1Y5PhfMc1ocUBFiiWnjRLpj 9kUhVSl5X7ES1jGp+NlJrrIvh1LD4LkGb2rTyR8sqBhh9/vQxqbwoilShdP/vuMTITlPPmXau5n haSBy9vzHjbOSB7quCF+0fbusDscHDjUutcBeZfC+ULGPrTS08VN+2j7LXyrsw8JqQ8doG2xysE KkGIXUO2IYl1/eg== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.6 on 10.30.177.95 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 8 X-Spam_score: 0.8 X-Spam_bar: / X-Spam_report: (0.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1780903066503158500 Fixes: 142ca628a7 ("ui: add a D-Bus display backend") Signed-off-by: Marc-Andr=C3=A9 Lureau Reviewed-by: Daniel P. Berrang=C3=A9 --- ui/dbus-console.c | 1 + 1 file changed, 1 insertion(+) diff --git a/ui/dbus-console.c b/ui/dbus-console.c index 21eceb24362..0813a08f85e 100644 --- a/ui/dbus-console.c +++ b/ui/dbus-console.c @@ -151,6 +151,7 @@ dbus_display_console_dispose(GObject *object) DBusDisplayConsole *ddc =3D DBUS_DISPLAY_CONSOLE(object); =20 qemu_console_unregister_listener(&ddc->dcl); + qemu_remove_mouse_mode_change_notifier(&ddc->mouse_mode_notifier); g_clear_object(&ddc->iface_touch); g_clear_object(&ddc->iface_mouse); g_clear_object(&ddc->iface_kbd); --=20 2.54.0 From nobody Mon Jun 8 12:13:50 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1780903085; cv=none; d=zohomail.com; s=zohoarc; b=NfN71qS2kauK7SEAtJ4sLowyMM6ELf4dySldcvAyKOZdVrhp5SCb5cAFLTHMiDVeMgf++Qk3FK3UjMhRotSH7EA3USC97iIYlfvX18NtPunYcTmYez4CbRpI47BiuxZ6bVArfqWAIV2dY7wn3KNbcFQCYHqS1zlco0c5T4IfCM8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780903085; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=DOjU7ZjMAYNrPdzfVJfpX0bL2ueI8lFCf1IxrYK8dts=; b=j1OAlDGpIO5R+AREUrkZNGXcgLRWtbNaOe92cb2z1UCnXJomvNh6BTYVF3YqmLfl9ShS06KuYgRn7DcB4bJH8qbwPx9+xasNOMMWtFSDCWf2v1aRIV6KRKT120UQerDwRM1Kz9UC3REwrxFJdG8c/2BFxSg5eIYRONt6PZmAtbU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 178090308561413.385528232139109; Mon, 8 Jun 2026 00:18:05 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWUFB-0007nh-Lo; Mon, 08 Jun 2026 03:17:57 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUEm-0007gM-Jg for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:17:36 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUEl-0008Nh-6j for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:17:32 -0400 Received: from mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-480-b6NFnMypNNOmsCIqdCPjLw-1; Mon, 08 Jun 2026 03:17:24 -0400 Received: from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id DDBA019560AD; Mon, 8 Jun 2026 07:17:22 +0000 (UTC) Received: from localhost (unknown [10.44.22.16]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 912A53008B34; Mon, 8 Jun 2026 07:17:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780903050; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=DOjU7ZjMAYNrPdzfVJfpX0bL2ueI8lFCf1IxrYK8dts=; b=A6YekPPXfOLude9GS8HJI7kGi4kDfYxM7jluR+l8K2GG/l73ywq0ffkgJF0LWT/npCWAIv VuRLh06o8SfK0AQo/VWXYXWXb08bANmxgg4tm8dhkEo/s0EDGqm6wMQuhQ00aQUwq6tlFo SdibzaC7NxA76H0hVfjEFQtZIavPvRY= X-MC-Unique: b6NFnMypNNOmsCIqdCPjLw-1 X-Mimecast-MFC-AGG-ID: b6NFnMypNNOmsCIqdCPjLw_1780903043 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Mon, 08 Jun 2026 11:16:26 +0400 Subject: [PATCH v2 08/33] ui/dbus: remove led handler MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260608-b4-ui-v2-8-9ea6355ea08f@redhat.com> References: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> In-Reply-To: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> To: qemu-devel@nongnu.org Cc: Paolo Bonzini , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Pierrick Bouvier , Fabiano Rosas , Laurent Vivier , Alex Williamson , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Peter Maydell , Akihiko Odaki , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= X-Developer-Signature: v=1; a=openpgp-sha256; l=1483; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=+82NOsZ1jlUmr+T1iW5y0vRxBq55sNlfByeJ2Cau8Ao=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqJmxJro/3r2JjC+vwF3fMwq+/hYazX+EcO0NKF ImCJQOLQdGJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCaiZsSQAKCRDa6OEJdZac 5WlnD/9fPasUH/wqZwB5FZgyVigLXEuDVdFF0yZI8rKi1zUqLCT0cxYqVV/MCzVbu7MxSUUZeuj 7M+CjPYHDlro3XzZsewoJjb9PB35bLWd4D5Y201SMI4d36OvpUMgCjJvs4kujzLNiqH9iSrlmxK Vu2YMVK2vtw5CY03cByNJ1b3TfujsyoJrrm6auy63+jdOLlGwKRzhPz7uFPXDEh6BmviDVn49Ax GIBfC3thF/NGdkUDlaNKZzgNEvEpoRWVRBdJTz7B9L6RgLJcgWWNzH4lN0FQKhgJLm0fe1F46Mz GjZttcnGeq1qILmWVuxNNk0p1sTbPhocRUWn9QfPr9pAnb7FcNG2DoxzGVaA55XsY6YSEKVvjsU 5/IpA1fGg566HeltkRBmxBkCuh9Ty+tuh5H47RZ5ZvGBnVrG1r0fWFLxKGv+svfaLAV5baOyHek o6z14M9mbKTjHoOv2tfllgDhw52an4oS/Jjiks/9/0m6OuWJsvriJKjubyo6QaeYD6ADVEWSl4S b50BgIJ3QRocZfOMpDKBPMHhwJ9JUmFZBDkqdATOOuxeV2zbuH/gpxlR6fMwri0kHPNdAa9kO4O 1reB1MPRPuTljGgiRpBCJSIlcZjZx6pwc0uoPwK1FbbkxYDwGw0fsdIxwjpPlYiy5A4Iuzrx2pW MaRnL9KSIpZhZPA== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.4 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 8 X-Spam_score: 0.8 X-Spam_bar: / X-Spam_report: (0.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1780903086374158500 Reported-by: Akihiko Odaki Signed-off-by: Marc-Andr=C3=A9 Lureau --- ui/dbus-console.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/ui/dbus-console.c b/ui/dbus-console.c index 0813a08f85e..f784ccbe572 100644 --- a/ui/dbus-console.c +++ b/ui/dbus-console.c @@ -53,6 +53,7 @@ struct _DBusDisplayConsole { guint last_x; guint last_y; Notifier mouse_mode_notifier; + QEMUPutLEDEntry *kbd_leds_updated; }; =20 G_DEFINE_TYPE(DBusDisplayConsole, @@ -152,6 +153,7 @@ dbus_display_console_dispose(GObject *object) =20 qemu_console_unregister_listener(&ddc->dcl); qemu_remove_mouse_mode_change_notifier(&ddc->mouse_mode_notifier); + qemu_remove_led_event_handler(ddc->kbd_leds_updated); g_clear_object(&ddc->iface_touch); g_clear_object(&ddc->iface_mouse); g_clear_object(&ddc->iface_kbd); @@ -578,7 +580,8 @@ dbus_display_console_new(DBusDisplay *display, QemuCons= ole *con) =20 ddc->kbd =3D qkbd_state_init(con); ddc->iface_kbd =3D qemu_dbus_display1_keyboard_skeleton_new(); - qemu_add_led_event_handler(dbus_kbd_qemu_leds_updated, ddc); + ddc->kbd_leds_updated =3D qemu_add_led_event_handler( + dbus_kbd_qemu_leds_updated, ddc); g_object_connect(ddc->iface_kbd, "swapped-signal::handle-press", dbus_kbd_press, ddc, "swapped-signal::handle-release", dbus_kbd_release, ddc, --=20 2.54.0 From nobody Mon Jun 8 12:13:50 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1780903203; cv=none; d=zohomail.com; s=zohoarc; b=HVnHg4RNcucD9I7Cmv7VZqhETfbRdTDcZ5K84dOJsZzwG7qX2vz0hFEdufZeUoIUbXFo1nxrHCFxzPoiG30W/hSSk2iqBEkJ3Na9COPr2oZxx77J2KP0tM3ll7UHooeI65/GcsVNQqtEqgHoEdIw3+pQbs0srTtwTmJSNjItC9c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780903203; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=CcFD3eGKhNYPPn3etCR+FB+6qCGmANbtAookYVP4Y8w=; b=eXFzYkcCrwOFYdi78BFhp9e/KCRIsgbe15G5DBKFSjYQLDkJ5pMzuKa7K0wxYxwntI+qQn+tjBu32q/b0WXAzhYBA44I6NO4SGLKIW33sHiv38kysTDCLsICmvS30WIdQoNn9s8qeCN7YFcMJK1aUNHiF/O6nN5LtMWQ9862+I4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1780903203001327.30772561550884; Mon, 8 Jun 2026 00:20:03 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWUFI-0007z0-CH; Mon, 08 Jun 2026 03:18:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUEp-0007gU-Nu for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:17:36 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUEo-0008Pm-CP for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:17:35 -0400 Received: from mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-107-e7wI3nJ7O0GBFNzAFU7e_A-1; Mon, 08 Jun 2026 03:17:29 -0400 Received: from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 7F4701800BC3; Mon, 8 Jun 2026 07:17:28 +0000 (UTC) Received: from localhost (unknown [10.44.22.16]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 10EE119560A2; Mon, 8 Jun 2026 07:17:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780903053; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=CcFD3eGKhNYPPn3etCR+FB+6qCGmANbtAookYVP4Y8w=; b=TNoTJ5P/CFGULp/NE4Xw+Yk17lXdqBByNvM6GEWUqsdtnux6wRhP9CXizZb8yI9/KuDApx qsg18G4/AmDqmlw5i5/eNLziPgPaa8rGUKwOtUf9SF7v4wCjoVz9hJF0MFXkOnkapI6+/O xfa0ZFiyw4E/gx7pTvUxixkU8RC2Tkc= X-MC-Unique: e7wI3nJ7O0GBFNzAFU7e_A-1 X-Mimecast-MFC-AGG-ID: e7wI3nJ7O0GBFNzAFU7e_A_1780903048 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Mon, 08 Jun 2026 11:16:27 +0400 Subject: [PATCH v2 09/33] ui/qmp: keep a reference of console across yield MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260608-b4-ui-v2-9-9ea6355ea08f@redhat.com> References: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> In-Reply-To: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> To: qemu-devel@nongnu.org Cc: Paolo Bonzini , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Pierrick Bouvier , Fabiano Rosas , Laurent Vivier , Alex Williamson , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Peter Maydell , Akihiko Odaki , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= X-Developer-Signature: v=1; a=openpgp-sha256; l=979; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=0olnm0BeIdXkJ0+wwoqLifsBYBl2XPr7D4I8xkjuhkU=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqJmxJdMdDNoXaUOPWZGKtDUajhmm5c4Z60+3kx d4U2xf3nliJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCaiZsSQAKCRDa6OEJdZac 5ThvD/4hLy17igI54vr3RK0mfeFz59gI6hLG/FOfQtqyPeTtz3Ji+ab7sAIaUYTwOxltBVljY4u eJRUZZ58P5iYXlAnGRZ9GwmzTojWQ5mMPfT+2xpAzHqzXKExSOEh61kzCPDUBwHKGAnCOhGQ8Lx khU/6MgaTgqhFQ17WyuHwcQyWLdpEIM3h33J4cO9coNVe/NoL/w6wXuI7f7ZIHQD785kH7I7jJF MzuYbKEhQzMQQ8d4OiQM4ZzEWja04MrMJFDkY6w14N3gSsI0U6dXw0D/xAZbsNFeu6YK8S0buZQ /ws3RjYNo50r/wg94XwBTLTiMvcjZH0RcU1Mz0VfdXMkJSAv9pUeN2mcb4LIsCbl3Ini6XURGnr SIbzilE3PxC/r+Dt24krVC2+Ntgz8wMIe6zQR+oC1DC3Zo0jeyhqJGYzl+jSuWKheGvCUTK991f 6o5v/Z9LNRLeVDIyonMDlYuP4nMfS1zAsEVzpSsuHE+zlv8fG6U54PxfPa0d0nKZeLFC10iZ7Du I2ICiowejDFWuMnJIoII1Foi3bjK2zldamyZf2WS96iQh+VcPTGm4ZgwkHADYWVYb+IJhhuhDEp vSewljWmH3PrcgJ4xBZSVuD+e4eTtDnbsqsWnlamCbuBW52bTwb6vl4sWosYAzvpYUZ1lJrgP// 5kRKkQ1kCt9Y6Zg== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.12 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com 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, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-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: qemu development 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-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1780903206161154100 While the coroutine is waiting, the console could be finalized. Keep a reference to prevent this. Signed-off-by: Marc-Andr=C3=A9 Lureau Reviewed-by: Daniel P. Berrang=C3=A9 --- ui/ui-qmp-cmds.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/ui/ui-qmp-cmds.c b/ui/ui-qmp-cmds.c index 1173c82cf7f..753cc2bf522 100644 --- a/ui/ui-qmp-cmds.c +++ b/ui/ui-qmp-cmds.c @@ -348,6 +348,7 @@ qmp_screendump(const char *filename, const char *device, } } =20 + object_ref(con); qemu_console_co_wait_update(con); =20 /* @@ -358,9 +359,11 @@ qmp_screendump(const char *filename, const char *devic= e, surface =3D qemu_console_surface(con); if (!surface) { error_setg(errp, "no surface"); + object_unref(con); return; } image =3D pixman_image_ref(surface->image); + object_unref(con); =20 fd =3D qemu_create(filename, O_WRONLY | O_TRUNC | O_BINARY, 0666, errp= ); if (fd =3D=3D -1) { --=20 2.54.0 From nobody Mon Jun 8 12:13:50 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1780903131; cv=none; d=zohomail.com; s=zohoarc; b=IaDztsPVELNLRY8o6kn0kkkUxaPQYSGpcRVWtoFZnMSWkTflZ0+XV8iMKkr4bCNjByl6KY3mVYS6JYzNVgXt0V45V5OYvl9Z7WWlKPP1dL/uo7wOuVcS8AObTEfAxIzPwG4PwJi8uAAxRfrAlfUi//bfnaxzwFV3hUoquMAxaJU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780903131; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=6K3XQqYyaBJEyhYGRQWW9UcrsUENmBwDbMiigmHod70=; b=g8qKhfpW5CRdXkYz14nIRAKzC5so1GUeFQYpkRpEA/vN+E42oEAdWxBBDaViGR5SA9sbtSqtkB2TmxgjYY11cj6ArfPXaSDnJPvI8sfOeWwGm5p94z7Fj4REEtIr/n17M6lGpHP5DLozm2bVdlEsFLOA2CAmHOdo3izWAq7vgHg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1780903131238753.778982986042; Mon, 8 Jun 2026 00:18:51 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWUFI-00080u-MQ; Mon, 08 Jun 2026 03:18:05 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUEu-0007jm-DI for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:17:43 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUEs-0008RX-V6 for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:17:40 -0400 Received: from mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-333-oVPsncoXMDKsfeJxEs8C4w-1; Mon, 08 Jun 2026 03:17:35 -0400 Received: from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.17]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id A46BE180034B; Mon, 8 Jun 2026 07:17:33 +0000 (UTC) Received: from localhost (unknown [10.44.22.16]) by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 565CF1956053; Mon, 8 Jun 2026 07:17:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780903058; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=6K3XQqYyaBJEyhYGRQWW9UcrsUENmBwDbMiigmHod70=; b=SCjTQoEp/aFEHNPS3r7g3/ccKYjXiHChuP1+FVH/hoi3N5pwkXDEaUmZiO9Ycs5UpLzBe8 3oJTCuA7etU63ty3KvgkICkzw1C8NEhBQuYMzxttsBdt0hW6OiwLM1t65xmGQX6N+JQNQW tQ/sVzGhj5oFMZ/RnnQMaFZmtoj4YNg= X-MC-Unique: oVPsncoXMDKsfeJxEs8C4w-1 X-Mimecast-MFC-AGG-ID: oVPsncoXMDKsfeJxEs8C4w_1780903053 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Mon, 08 Jun 2026 11:16:28 +0400 Subject: [PATCH v2 10/33] ui: stop ui timer when closing MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260608-b4-ui-v2-10-9ea6355ea08f@redhat.com> References: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> In-Reply-To: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> To: qemu-devel@nongnu.org Cc: Paolo Bonzini , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Pierrick Bouvier , Fabiano Rosas , Laurent Vivier , Alex Williamson , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Peter Maydell , Akihiko Odaki , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= X-Developer-Signature: v=1; a=openpgp-sha256; l=738; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=YUzpFgJn1xd0cDCfwxua7PPmtRu9gxO8rB3nqbkqdZI=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqJmxJjqDtYesNtgsqNGnU0gH9W39QfXFrlYWnK t5p4qDzU3KJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCaiZsSQAKCRDa6OEJdZac 5QocD/9MTrFCLXs2lJUrTnd24xpOf73yqqFoZbpjSn2icE8oMTvRmnc58aht+OHnQ1ZmGe8WxtJ nWhgbZkIzE5FiEIo7pm83R2rFtQIvl5eXciewIp0saYDEUo1/GWFTTj1p5qf/u6M4pZHUKubivE wGhzp1HKcoVrg2FcQ1Fn5RDyMJ31E5aELJzv6t8JBG+/z6U2JmxpV/kydefWuV7i1MuEV6RTm2N dxAZJSQeyFe+iCNKaqM+vVHdridhr93/cKIXox2wuL8FOH3N8TgeBw0fvZoc+ZCLyx8yaBvCdYf 1rLtbH3pHICyjis28US89yPAjrATccjYhyMg+C17xeABenQg9n0Z/owXSClz5syxvFBVf/3FJEk BiFk7eMNdKeppb+ill7N8/DLgs8D6iYO+BHAf5y9cKjr/XHNvmoWMirtQTm46pQhueb3wm0tLGf d13ljPwv5QRNNOGJinZM2m7zFxrfyRIpXA/nWBc+gb//HUGpIwnPAgE7Cu38Iej4RRXByWOfh1L 75iYfqNebzf/UptZ/VrJ2AP2AGyDqTYJX2kNAaw5UV3W92lPIhmZkB/fcqekjErKJ8bYv1j6Eet F+P6TH6jekz6g6fQuxJkV6J0K91VwFQBhLof4HVPxJ1DviQrIRfPGRL1OXmD7QJVJJ55jaEFGBs 2SgcdPKQhHtvc8Q== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.17 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com 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, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-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: qemu development 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-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1780903132628158500 hwops is reset, so if the UI timer is pending it will crash. Fixes: 9588d67e72 ("console: minimal hotplug suport") Signed-off-by: Marc-Andr=C3=A9 Lureau Reviewed-by: Daniel P. Berrang=C3=A9 --- ui/console.c | 1 + 1 file changed, 1 insertion(+) diff --git a/ui/console.c b/ui/console.c index a7c977d0c44..436444723a5 100644 --- a/ui/console.c +++ b/ui/console.c @@ -1136,6 +1136,7 @@ void qemu_graphic_console_close(QemuConsole *con) trace_console_gfx_close(con->index); object_property_set_link(OBJECT(con), "device", NULL, &error_abort); qemu_graphic_console_set_hwops(con, &unused_ops, NULL); + timer_del(con->ui_timer); =20 if (con->gl) { qemu_console_gl_scanout_disable(con); --=20 2.54.0 From nobody Mon Jun 8 12:13:50 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1780903252; cv=none; d=zohomail.com; s=zohoarc; b=d3uq/kuGjYQ1wMXMxLV7TLqEyK26bOyJKGbT0cIww1V/peS8mvOPlOfIrE2X0gg/CSmXIP3fRUKi2Fjo8uxl4gXOEHNsxAuPiNa6j8QwqU46fKd4ogIjtH3iUxgaesco3nSwlOXZoGYtM34FGdwuKObzU64y0G4aNeDfWj6R3ag= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780903252; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=7geeM3/ggP+gaEaRXq42EEqFEldFyKIz6C3vfW23LeU=; b=kfK77Vfg0nA4wJ3gSP9hilqcKJiII70cnzYjAKAlibQ7X+ORXQurry74o5sdfE1R8hEHew3GYtpPszSuwib4cz9AdeXBUotUj/uNfeXMJ2szK5rW9N+G3e4KrkSQhTB6GjUvAyhAg8c0JHr8lEBL+a71rkGTxqLAwFKB7COGGWw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1780903252826993.0766920179824; Mon, 8 Jun 2026 00:20:52 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWUFO-0008BO-0b; Mon, 08 Jun 2026 03:18:10 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUEy-0007lv-Ia for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:17:48 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUEw-0008Sv-Fm for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:17:44 -0400 Received: from mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-25-v8dHGZgjNMaK0RWQX2FLqA-1; Mon, 08 Jun 2026 03:17:40 -0400 Received: from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 1564118005B6; Mon, 8 Jun 2026 07:17:39 +0000 (UTC) Received: from localhost (unknown [10.44.22.16]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 896F53008B34; Mon, 8 Jun 2026 07:17:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780903061; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=7geeM3/ggP+gaEaRXq42EEqFEldFyKIz6C3vfW23LeU=; b=FQrGWu7WHysUkWn1/Fc0lkK9bX4Ymd2TBE44Lz9aAqN+WNXajm1i0d1U+AbVa0FXRcHKGd ZhKs3LCOLST8bLayIRb61q6bbFAqT7eP2j48SpMBzKWUdkGGdhtL/EQvyUCVmZEPPcoZOf ZscMi2vbzsWE3Gz9wMNGwvdx+AkDFcU= X-MC-Unique: v8dHGZgjNMaK0RWQX2FLqA-1 X-Mimecast-MFC-AGG-ID: v8dHGZgjNMaK0RWQX2FLqA_1780903059 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Mon, 08 Jun 2026 11:16:29 +0400 Subject: [PATCH v2 11/33] ui/console: init gl_unblock_timer in qemu_console_init MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260608-b4-ui-v2-11-9ea6355ea08f@redhat.com> References: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> In-Reply-To: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> To: qemu-devel@nongnu.org Cc: Paolo Bonzini , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Pierrick Bouvier , Fabiano Rosas , Laurent Vivier , Alex Williamson , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Peter Maydell , Akihiko Odaki , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= X-Developer-Signature: v=1; a=openpgp-sha256; l=1319; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=neHQ1EFkjR0lxtkBX3Yq/BzDDhgh8y1ih9uuNPdKdzk=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqJmxJwIw+PoPntfF2lBM2o+yL6C3Z8EHQxx+vf L33uqLW4l2JAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCaiZsSQAKCRDa6OEJdZac 5TOtD/4yewAuXtVBtv44XYKKKPz1j4Vgu3Z50bhw7JEPCt6KPzlARMm0RgFCwQy8X3fzRCcQTRZ Qv8W7y6CKyacFnz5xj9kI6A6xVhG+/1AUwHY/CXW9dcatjN9tHpgFftyKJCALJxbCL2ob4+8TLd rBXWzIk8Iv1s2b5GjFysYLv8tWtV4q7741kDFEWxmE3yMupIEigPTS/NRl+wYkyTABM3deGZcta lsfC+8I0g9j0MsPE8PSAefoB2zZb3TVPBGUSjSq4K3YuPTMX9ZQq1Un+larDE8qPIvS6QwPHLlM bfBYNA2AD9BWxPWO0XijYNxE3SfrO7GtiKjbkVzQEjoNpbk82N6xTVFt92QKBZJF3lG6M7QABPl RSRtEA1I/sSU1otfLyggfNv1a7rUo2aphPi3Hi6vmv7Y7aKRps6iDw2j3BuLCh3D9TrL9KEBdgb qw0vZGLsCGdzHdbNBhruSfooLlsuQRrfGwyYJSaWKDIcuvp+Um4wLesMIyLbYF6zwwWImyQtXXo EkwubNIK1RMHMnKZAGZM0xyYSU0o9viRLbrWGYlJuafBdcjy+nBEKoHFg+dCycGDk16K1YVHbua hhm9uooubgK3TdkFjIVLcF6GEisu7PHpHs2C9L7VO5oGsAg+ti6ZcEw5OVu49Lq0YyxAkir8d9e XT//ocRJzXUj3sw== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.4 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com 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, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-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: qemu development 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-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1780903253279158500 Move gl_unblock_timer allocation from graphic_console_init() to qemu_console_init(), similar to what was done in commit cfde05d15b ("ui/console: allocate ui_timer in QemuConsole"). This fixes leaking timers on console recycling. Fixes: a9b1e471e17 ("ui: add a gl-unblock warning timer") Signed-off-by: Marc-Andr=C3=A9 Lureau Reviewed-by: Daniel P. Berrang=C3=A9 --- ui/console.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ui/console.c b/ui/console.c index 436444723a5..58f29e82c85 100644 --- a/ui/console.c +++ b/ui/console.c @@ -433,6 +433,8 @@ qemu_console_init(Object *obj) c->window_id =3D -1; c->ui_timer =3D timer_new_ms(QEMU_CLOCK_REALTIME, dpy_set_ui_info_timer, c); + c->gl_unblock_timer =3D timer_new_ms(QEMU_CLOCK_REALTIME, + console_hw_gl_unblock_timer, c); qemu_console_register(c); } =20 @@ -1116,8 +1118,6 @@ QemuConsole *qemu_graphic_console_create(DeviceState = *dev, uint32_t head, =20 surface =3D qemu_create_placeholder_surface(width, height, noinit); qemu_console_set_surface(s, surface); - s->gl_unblock_timer =3D timer_new_ms(QEMU_CLOCK_REALTIME, - console_hw_gl_unblock_timer, s); return s; } =20 --=20 2.54.0 From nobody Mon Jun 8 12:13:50 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1780903203; cv=none; d=zohomail.com; s=zohoarc; b=mua0Cq2pmVFR3Wu3Pp/yytdXtKvw80J2dz0/PlgkaFULBuLxLM7gBu2t3LfaMA8bUExQDMkLjnwJsXk/9wkA/VofUVXzzqsVeygruk+nbLU5eQpvo5xbIeKLXso0E0+nRWa1UxYmElmP4ULDpKsp1MVr+8FDdaEuQr4uA+ez6f0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780903203; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=qgSJ8GIemylwK2Rz+k6Wvgj6TCAI6JvDZRNWAtchu4s=; b=kHU8vaH/ULeW/JTYsYL/3qoh8X/KjdMh3rdZisCFR2XIKQ44YTPMUdGVziTsVXuPPduff7oxE8uxf2nbWspdyF6jNDysh3DLebtae/vbjr0ZHYxzqWPMKEpQmT+nKV2OxCc1ZtYbznbZhBkpYQZ2fyx1bZ9uGaV/xGJ83utAhZU= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1780903203096198.39026433758954; Mon, 8 Jun 2026 00:20:03 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWUFK-000868-Em; Mon, 08 Jun 2026 03:18:06 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUF4-0007pF-MS for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:17:54 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUF2-0008TL-Gz for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:17:49 -0400 Received: from mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-287-fuzRg2jhPRynf6RY5w7CDA-1; Mon, 08 Jun 2026 03:17:45 -0400 Received: from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.17]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 15A491800345; Mon, 8 Jun 2026 07:17:44 +0000 (UTC) Received: from localhost (unknown [10.44.22.16]) by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 23C571956053; Mon, 8 Jun 2026 07:17:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780903067; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=qgSJ8GIemylwK2Rz+k6Wvgj6TCAI6JvDZRNWAtchu4s=; b=UEmZtmdf/Rt3fcCc2OebW3iFmONOVJPBZxpA5EYs9bieYGG9gj0suNc0BpucO/ncLHivXc QlzvtsPKIa73jUVmH93DGgB1Tty8EVHA7AskwPBX3Zn3BZtYdmo7Ml6Zu2tVMttca9Bj2u atOW0infJlg4ImTBmVbQYSkatrLY4x8= X-MC-Unique: fuzRg2jhPRynf6RY5w7CDA-1 X-Mimecast-MFC-AGG-ID: fuzRg2jhPRynf6RY5w7CDA_1780903064 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Mon, 08 Jun 2026 11:16:30 +0400 Subject: [PATCH v2 12/33] ui/spice: remove dead spice_displays MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260608-b4-ui-v2-12-9ea6355ea08f@redhat.com> References: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> In-Reply-To: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> To: qemu-devel@nongnu.org Cc: Paolo Bonzini , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Pierrick Bouvier , Fabiano Rosas , Laurent Vivier , Alex Williamson , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Peter Maydell , Akihiko Odaki , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= X-Developer-Signature: v=1; a=openpgp-sha256; l=868; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=s60ojf6CttJ409AzZo9Cfg75xyybBgiiGTPP9biqSiE=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqJmxJtMddbFtvMBcz5i0aSR7i1UPwzOGhU0iL8 /ObzSlwFN+JAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCaiZsSQAKCRDa6OEJdZac 5fIqD/95/+eMS1qvN+1hGlKVLkDHDemWTf7LSKlp/53zld8rxbMPhlc/eUO99Bg38r0EuZ4srHx woGWiRFl7Y6AF14vJCZGfr1lHJlMy+Ubz0/AOJ5sev4gORwGc3Oec5uCHSwhXHKiaLOUfzD6i76 o0nknwiiUfud0QfdPZ9rqCp45+/xqEVQy1BWKz+R5fJLNkOwg1pfNPHAKhVZ8nAu+5yHuwlsjWk k8mFhwCy8ZtuZMfy90Zzr2eQo0ZI+WJZlDInl1S61JY7Is3Vj2UW21aaPJDyRc6CzXvxF3+1uXu wP+i7fIzvBdCRsmp3/tfa8Apb1rfmyBw5ExQXIcy+Jx/r7UqHNlhRQZzTDBOgs8AsfbSULb2xlF O4naioy4fnlA4CdKescqbCeFocnnDaagMQzJUBmsfJHpBLo/seqP/4XLpN2opc+8tGI4H7BUhqf 7BpvORHdj8XSpaDmE42Uigik8HHjWNM+0SAfXWLjpZvE6njkceUT1sgx52bsiTlwiFuKXfcSfEh t74BALXc4tsj69zIJerWyDJ2NWE9K0XuzJW8z7JV25vxHrIy2CxuDjhMP8JCj88YC7fj1UmZJDv 4E+1IZWirtKf5XMayhwChv0cgKv5fHMunCWsOnobh5cZ88jG2OMiPCF2TXW4V7fLKFdtsVSsH7r 5mtnInrBiQ18Chg== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.17 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com 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, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-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: qemu development 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-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1780903203888154100 This is left-over from commit 9fa032866da ("spice: fix multihead support") Signed-off-by: Marc-Andr=C3=A9 Lureau Reviewed-by: Daniel P. Berrang=C3=A9 --- include/ui/qemu-spice.h | 7 ------- 1 file changed, 7 deletions(-) diff --git a/include/ui/qemu-spice.h b/include/ui/qemu-spice.h index 111a09ceca3..59a68cd9833 100644 --- a/include/ui/qemu-spice.h +++ b/include/ui/qemu-spice.h @@ -33,13 +33,6 @@ bool qemu_spice_have_display_interface(QemuConsole *con); int qemu_spice_add_display_interface(QXLInstance *qxlin, QemuConsole *con); int qemu_spice_migrate_info(const char *hostname, int port, int tls_port, const char *subject); - -#else /* CONFIG_SPICE */ - -#include "qemu/error-report.h" - -#define spice_displays 0 - #endif /* CONFIG_SPICE */ =20 static inline bool qemu_using_spice(Error **errp) --=20 2.54.0 From nobody Mon Jun 8 12:13:50 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1780903391; cv=none; d=zohomail.com; s=zohoarc; b=XjcVyTjUOCmqt8GxFCVyhRF2NPqEsAPyxHQMdeiX8cMGBl5lbroubwXmW/Ec0N4vMFwnnt8NJ6VilAFLZXL899CUat+ffB6grTzhc3QbbJTzR1eivZcsre6+6vzdJScLDSjG5wgn+a2ySPUNEov0LJSbVNZJaSFHbJwsfZgQ0Ho= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780903391; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=Ciu2JhS6Lc8zBZgiAkP1BQqakwjuRUB6YE6coQ4sf9M=; b=j4+mX3DrNDsYIPsCqrDkkRveuEwFI6U81GuGjSiVQzgZ+tViJhQWlRUDHLz0flBFD2ecTq+56mXilxFCxF5gaQBou56kCCXZyQ4UkyDkqOvp1iiiWDvOmXnhoPEiGzWMS4ZGC8kjupYJYJwp/xMqr7+c0ZNpFud2xhTYhTBvW74= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1780903391746982.7437121460322; Mon, 8 Jun 2026 00:23:11 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWUFP-0008Ds-6e; Mon, 08 Jun 2026 03:18:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUFC-0007w2-3I for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:17:59 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUF9-00008P-A2 for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:17:57 -0400 Received: from mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-616-jIe02McgOdK1mdzypzovaQ-1; Mon, 08 Jun 2026 03:17:50 -0400 Received: from mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.111]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 6A6941956095; Mon, 8 Jun 2026 07:17:49 +0000 (UTC) Received: from localhost (unknown [10.44.22.16]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 1D07E180049F; Mon, 8 Jun 2026 07:17:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780903074; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Ciu2JhS6Lc8zBZgiAkP1BQqakwjuRUB6YE6coQ4sf9M=; b=QovHKY+O+KZ5RSlMFhLAAuGDkywymPYPHX91PTxkMB19IweFdqmWW3IBTLt+9LGxegxxgP tqxyY4B06ShCZkh4NZpYKTsYY78mtHHguRgjtQju5NJ0BXVNABPt1/xPxdBoUbWRqIsMYO 3BMaPHisNDpSDQMxCp1QmqgcxBK/TAg= X-MC-Unique: jIe02McgOdK1mdzypzovaQ-1 X-Mimecast-MFC-AGG-ID: jIe02McgOdK1mdzypzovaQ_1780903069 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Mon, 08 Jun 2026 11:16:31 +0400 Subject: [PATCH v2 13/33] ui/spice: add cleanup on shutdown MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260608-b4-ui-v2-13-9ea6355ea08f@redhat.com> References: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> In-Reply-To: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> To: qemu-devel@nongnu.org Cc: Paolo Bonzini , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Pierrick Bouvier , Fabiano Rosas , Laurent Vivier , Alex Williamson , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Peter Maydell , Akihiko Odaki , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= X-Developer-Signature: v=1; a=openpgp-sha256; l=11842; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=UVRFSDBaOWRpiYoDGWbknm14bEgZYMdF7gxQOZ+f6vg=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqJmxKpil/c2bo7Cj7YaLllhhEhkjAMtAy2YjcQ 8Zxq3eDz1GJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCaiZsSgAKCRDa6OEJdZac 5RGbEAC7MWqD9oSmr2GznDlAaVDDaSa1OH+5QWRmfIsC1TnFtYgbvwHqQ4Vndhg6z/flElsbZI5 XOxD+VEF62gH9l8BcGNQAxjTH4GX8Dx+6I0LZGcty5zhuGn0fyUXU/bGTsJunSbwnxBAuGJucFF uhY8al2whUolGQsgS5OEfiWrP6Aa1gtLOOIeROxFrQOXsArD/dyITNAEb32syEZy9QCOwbfc16u iCZROnMU+aOywJIG2OkuAyHB7g5/ZotU18ZLmGg8AadW99AoBpCyNaJZ6APnzPJzE3UdnhPvYsB GRtrgPspDkN5Ep4QdDjM9nqpL9OOyuSOETFy1/Rc//IMeFXEDqRYMf/WgzdRVes5jlXFJ1BDAfw HbtrjRL2Ezevvp0NzdVpnVacetXvtCee5erAfsLfJdoCPDxgtQaWCllhSA4rcmMIg7/5acL0z74 a8lEl6vfRT3STrK2XQ3xGDlSgGVGK9M5o8DoJC6lwspXFwulesuEZqAjxfHiqp/KdqiUBb84OKf PRaJClU/FUylG8XCTJ2U5UQFkW8xw5OBsqhGb2bwTkQ3NmmStGGTDmUgR6o/LHLt+awm3vWjb9i Nrs8BBJIN1jRyWjRONJXQJ34xn7Dpa1RKjynkLZTDCxpg2e43XLMcFAW0RBV05qm7qpyLB8SKP4 VH1ZdSWi8OATEwg== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.111 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 8 X-Spam_score: 0.8 X-Spam_bar: / X-Spam_report: (0.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1780903393117154100 SPICE resources were never freed on shutdown. Add per-subsystem cleanup (display, input, core) and call it from qemu_cleanup(). Move spice-module.c into libui so the qemu_spice ops table links with the rest of the UI code. Add an LSan suppression for a known spice-server leak. Signed-off-by: Marc-Andr=C3=A9 Lureau Reviewed-by: Daniel P. Berrang=C3=A9 --- include/ui/qemu-spice-module.h | 1 + include/ui/qemu-spice.h | 2 ++ system/runstate.c | 4 ++++ ui/spice-core.c | 25 ++++++++++++++++++-- ui/spice-display.c | 52 ++++++++++++++++++++++++++++++++++++++= ++++ ui/spice-input.c | 52 ++++++++++++++++++++++++++++----------= ---- ui/spice-module.c | 5 ++++ scripts/lsan_suppressions.txt | 5 ++++ ui/meson.build | 4 ++-- 9 files changed, 129 insertions(+), 21 deletions(-) diff --git a/include/ui/qemu-spice-module.h b/include/ui/qemu-spice-module.h index 072efa0c834..bb0f8437c26 100644 --- a/include/ui/qemu-spice-module.h +++ b/include/ui/qemu-spice-module.h @@ -26,6 +26,7 @@ typedef struct SpiceInfo SpiceInfo; =20 struct QemuSpiceOps { void (*init)(void); + void (*cleanup)(void); void (*display_init)(void); int (*migrate_info)(const char *h, int p, int t, const char *s); int (*set_passwd)(const char *passwd, diff --git a/include/ui/qemu-spice.h b/include/ui/qemu-spice.h index 59a68cd9833..2cdf10f0313 100644 --- a/include/ui/qemu-spice.h +++ b/include/ui/qemu-spice.h @@ -27,7 +27,9 @@ #include "qemu/config-file.h" =20 void qemu_spice_input_init(void); +void qemu_spice_input_cleanup(void); void qemu_spice_display_init(void); +void qemu_spice_display_cleanup(void); void qemu_spice_display_init_done(void); bool qemu_spice_have_display_interface(QemuConsole *con); int qemu_spice_add_display_interface(QXLInstance *qxlin, QemuConsole *con); diff --git a/system/runstate.c b/system/runstate.c index 0e1cb3b4e67..d35fa270bd6 100644 --- a/system/runstate.c +++ b/system/runstate.c @@ -62,6 +62,7 @@ #include "system/system.h" #include "system/tpm.h" #include "ui/console.h" +#include "ui/qemu-spice-module.h" =20 #include "trace.h" =20 @@ -1048,6 +1049,9 @@ void qemu_cleanup(int status) user_creatable_cleanup(); #ifdef CONFIG_VNC vnc_cleanup(); +#endif +#ifdef CONFIG_SPICE + qemu_spice.cleanup(); #endif /* TODO: unref root container, check all devices are ok */ } diff --git a/ui/spice-core.c b/ui/spice-core.c index ef1c00134fa..1d2315f0b63 100644 --- a/ui/spice-core.c +++ b/ui/spice-core.c @@ -651,12 +651,15 @@ static void vm_change_state_handler(void *opaque, boo= l running, } } =20 +static VMChangeStateEntry *vm_change_entry; + void qemu_spice_display_init_done(void) { if (runstate_is_running()) { qemu_spice_display_start(); } - qemu_add_vm_change_state_handler(vm_change_state_handler, NULL); + vm_change_entry =3D + qemu_add_vm_change_state_handler(vm_change_state_handler, NULL); } =20 static void qemu_spice_init(void) @@ -894,7 +897,8 @@ static int qemu_spice_add_interface(SpiceBaseInstance *= sin) spice_server =3D spice_server_new(); spice_server_set_sasl_appname(spice_server, "qemu"); spice_server_init(spice_server, &core_interface); - qemu_add_vm_change_state_handler(vm_change_state_handler, NULL); + vm_change_entry =3D + qemu_add_vm_change_state_handler(vm_change_state_handler, NULL= ); } =20 return spice_server_add_interface(spice_server, sin); @@ -1005,8 +1009,25 @@ int qemu_spice_display_is_running(SimpleSpiceDisplay= *ssd) return spice_display_is_running; } =20 +static void qemu_spice_cleanup(void) +{ + if (!spice_server) { + return; + } + + qemu_spice_display_cleanup(); + qemu_spice_input_cleanup(); + migration_remove_notifier(&migration_state); + g_clear_pointer(&spice_consoles, g_slist_free); + g_clear_pointer(&auth_passwd, g_free); + g_clear_pointer(&spice_server, spice_server_destroy); + g_clear_pointer(&vm_change_entry, qemu_del_vm_change_state_handler); + using_spice =3D 0; +} + static struct QemuSpiceOps real_spice_ops =3D { .init =3D qemu_spice_init, + .cleanup =3D qemu_spice_cleanup, .display_init =3D qemu_spice_display_init, .migrate_info =3D qemu_spice_migrate_info, .set_passwd =3D qemu_spice_set_passwd, diff --git a/ui/spice-display.c b/ui/spice-display.c index e3716127203..75c7df7bb5e 100644 --- a/ui/spice-display.c +++ b/ui/spice-display.c @@ -34,6 +34,8 @@ bool spice_opengl; bool spice_remote_client; int spice_max_refresh_rate; =20 +static GPtrArray *spice_displays; + int qemu_spice_rect_is_empty(const QXLRect* r) { return r->top =3D=3D r->bottom || r->left =3D=3D r->right; @@ -1421,6 +1423,54 @@ static void qemu_spice_display_init_one(QemuConsole = *con) qemu_console_set_display_gl_ctx(con, &ssd->dgc); } qemu_console_register_listener(con, &ssd->dcl, ops); + g_ptr_array_add(spice_displays, ssd); +} + +void qemu_spice_display_cleanup(void) +{ + if (!spice_displays) { + return; + } + + for (guint i =3D 0; i < spice_displays->len; i++) { + SimpleSpiceDisplay *ssd =3D g_ptr_array_index(spice_displays, i); + SimpleSpiceUpdate *update; + + qemu_console_unregister_listener(&ssd->dcl); +#ifdef HAVE_SPICE_GL + if (spice_opengl) { + qemu_console_set_display_gl_ctx(ssd->dcl.con, NULL); + } +#endif + + if (ssd->ds) { + qemu_spice_destroy_host_primary(ssd); + } + qemu_spice_del_memslot(ssd, MEMSLOT_GROUP_HOST, 0); + spice_server_remove_interface(&ssd->qxl.base); + + while ((update =3D QTAILQ_FIRST(&ssd->updates)) !=3D NULL) { + QTAILQ_REMOVE(&ssd->updates, update, next); + qemu_spice_destroy_update(ssd, update); + } + g_clear_pointer(&ssd->ptr_define, g_free); + g_clear_pointer(&ssd->ptr_move, g_free); + g_clear_pointer(&ssd->cursor, cursor_unref); + g_clear_pointer(&ssd->surface, pixman_image_unref); + g_clear_pointer(&ssd->mirror, pixman_image_unref); + g_clear_pointer(&ssd->buf, g_free); +#ifdef HAVE_SPICE_GL + g_clear_pointer(&ssd->gl_unblock_bh, qemu_bh_delete); + g_clear_pointer(&ssd->gl_unblock_timer, timer_free); + g_clear_pointer(&ssd->gls, qemu_gl_fini_shader); + egl_fb_destroy(&ssd->guest_fb); + egl_fb_destroy(&ssd->blit_fb); + egl_fb_destroy(&ssd->cursor_fb); +#endif + qemu_mutex_destroy(&ssd->lock); + g_free(ssd); + } + g_clear_pointer(&spice_displays, g_ptr_array_unref); } =20 void qemu_spice_display_init(void) @@ -1431,6 +1481,8 @@ void qemu_spice_display_init(void) const char *str; int i; =20 + spice_displays =3D g_ptr_array_new(); + str =3D qemu_opt_get(opts, "display"); if (str) { int head =3D qemu_opt_get_number(opts, "head", 0); diff --git a/ui/spice-input.c b/ui/spice-input.c index f0bb915fd77..c975c1e2516 100644 --- a/ui/spice-input.c +++ b/ui/spice-input.c @@ -239,23 +239,41 @@ static void mouse_mode_notifier(Notifier *notifier, v= oid *data) pointer->absolute =3D is_absolute; } =20 +static QemuSpiceKbd *spice_kbd; +static QemuSpicePointer *spice_pointer; +static QEMUPutLEDEntry *spice_led; + void qemu_spice_input_init(void) { - QemuSpiceKbd *kbd; - QemuSpicePointer *pointer; - - kbd =3D g_malloc0(sizeof(*kbd)); - kbd->sin.base.sif =3D &kbd_interface.base; - qemu_spice.add_interface(&kbd->sin.base); - qemu_add_led_event_handler(kbd_leds, kbd); - - pointer =3D g_malloc0(sizeof(*pointer)); - pointer->mouse.base.sif =3D &mouse_interface.base; - pointer->tablet.base.sif =3D &tablet_interface.base; - qemu_spice.add_interface(&pointer->mouse.base); - - pointer->absolute =3D false; - pointer->mouse_mode.notify =3D mouse_mode_notifier; - qemu_add_mouse_mode_change_notifier(&pointer->mouse_mode); - mouse_mode_notifier(&pointer->mouse_mode, NULL); + spice_kbd =3D g_new0(QemuSpiceKbd, 1); + spice_kbd->sin.base.sif =3D &kbd_interface.base; + qemu_spice.add_interface(&spice_kbd->sin.base); + spice_led =3D qemu_add_led_event_handler(kbd_leds, spice_kbd); + + spice_pointer =3D g_new0(QemuSpicePointer, 1); + spice_pointer->mouse.base.sif =3D &mouse_interface.base; + spice_pointer->tablet.base.sif =3D &tablet_interface.base; + qemu_spice.add_interface(&spice_pointer->mouse.base); + + spice_pointer->absolute =3D false; + spice_pointer->mouse_mode.notify =3D mouse_mode_notifier; + qemu_add_mouse_mode_change_notifier(&spice_pointer->mouse_mode); + mouse_mode_notifier(&spice_pointer->mouse_mode, NULL); +} + +void qemu_spice_input_cleanup(void) +{ + g_clear_pointer(&spice_led, qemu_remove_led_event_handler); + if (spice_pointer) { + qemu_remove_mouse_mode_change_notifier(&spice_pointer->mouse_mode); + if (spice_pointer->absolute) { + spice_server_remove_interface(&spice_pointer->tablet.base); + } + spice_server_remove_interface(&spice_pointer->mouse.base); + g_clear_pointer(&spice_pointer, g_free); + } + if (spice_kbd) { + spice_server_remove_interface(&spice_kbd->sin.base); + g_clear_pointer(&spice_kbd, g_free); + } } diff --git a/ui/spice-module.c b/ui/spice-module.c index 7651c85885f..1961060d128 100644 --- a/ui/spice-module.c +++ b/ui/spice-module.c @@ -62,6 +62,10 @@ static int qemu_spice_display_add_client_stub(int csock,= int skipauth, return -1; } =20 +static void qemu_spice_cleanup_stub(void) +{ +} + struct QemuSpiceOps qemu_spice =3D { .init =3D qemu_spice_init_stub, .display_init =3D qemu_spice_display_init_stub, @@ -69,6 +73,7 @@ struct QemuSpiceOps qemu_spice =3D { .set_passwd =3D qemu_spice_set_passwd_stub, .set_pw_expire =3D qemu_spice_set_pw_expire_stub, .display_add_client =3D qemu_spice_display_add_client_stub, + .cleanup =3D qemu_spice_cleanup_stub, }; =20 #ifdef CONFIG_SPICE diff --git a/scripts/lsan_suppressions.txt b/scripts/lsan_suppressions.txt index f3b827facff..2dd6581a650 100644 --- a/scripts/lsan_suppressions.txt +++ b/scripts/lsan_suppressions.txt @@ -20,3 +20,8 @@ leak:libfontconfig.so # https://github.com/GNOME/glib/blob/main/tools/glib.supp # This avoids false positive leak reports for the qga-ssh-test. leak:g_set_user_dirs + +# spice_server_add_interface allocates internal channel data that +# spice_server_destroy does not free +# https://gitlab.freedesktop.org/spice/spice/-/merge_requests/246 +leak:spice_server_add_interface diff --git a/ui/meson.build b/ui/meson.build index bb01f0728e2..ca903581abd 100644 --- a/ui/meson.build +++ b/ui/meson.build @@ -42,13 +42,14 @@ libui_sources =3D files( 'kbd-state.c', 'keymaps.c', 'qemu-pixman.c', + 'spice-module.c', 'vgafont.c', ) if pixman.found() libui_sources +=3D files('cp437.c', 'vt100.c') endif libui =3D static_library('qemuui', libui_sources + genh, - dependencies: [pixman], + dependencies: [pixman, spice_headers], build_by_default: false) ui =3D declare_dependency(objects: libui.extract_all_objects(recursive: fa= lse), dependencies: [pixman]) system_ss.add(png) @@ -65,7 +66,6 @@ system_ss.add(when: pixman, if_true: files('console-vc.c'= ), if_false: files('con if dbus_display system_ss.add(files('dbus-module.c')) endif -system_ss.add([spice_headers, files('spice-module.c')]) system_ss.add(when: spice_protocol, if_true: files('vdagent.c')) =20 if host_os =3D=3D 'linux' --=20 2.54.0 From nobody Mon Jun 8 12:13:50 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1780903153; cv=none; d=zohomail.com; s=zohoarc; b=jSqigcSeosRaRTv0XmUYRa4pJXm866nlzTeIU6rm7E5oZ4IZhw5FILhs5NENAM/pUHLsle1QLC44OOAVZA0qh9u0PZc0+P+BDouptq0h65tvNjs67KcYbuaeWa/XIX3zcKVcJfBHyp0SO1Z5TI8+GifRtsP2mgT9As6Dm4aQaoA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780903153; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=mBrMf6sgce6eqalfbiLawauqWyu0Pfl9VQff8GIECLs=; b=FRcz6ifWdXgOIX0V5wE52mFTE+1X/+eNRmOEWMyVg3j8OlzT+E0wYOW1LsxFb7UbxbcHdd9AvzF1Qf6EWtaTaYLB3W0TOJBb73UQOLy1LYe2CT6sY1KQJdqkwlmPW+1uShemZYFSaa+jeCLW5eWMYOft/kruL8KexwOJwAhhRPo= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1780903153371948.1950320265759; Mon, 8 Jun 2026 00:19:13 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWUFP-0008EB-Te; Mon, 08 Jun 2026 03:18:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUFG-0007x6-Kj for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:18:04 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUFE-0000AQ-Ra for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:18:02 -0400 Received: from mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-561-BaQi9QDFOweIuOLX9oahNg-1; Mon, 08 Jun 2026 03:17:56 -0400 Received: from mx-prod-int-10.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-10.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.95]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 0E3B71956080; Mon, 8 Jun 2026 07:17:55 +0000 (UTC) Received: from localhost (unknown [10.44.22.16]) by mx-prod-int-10.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id BFE31763; Mon, 8 Jun 2026 07:17:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780903080; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=mBrMf6sgce6eqalfbiLawauqWyu0Pfl9VQff8GIECLs=; b=KoW/BWm6fVjAo/PUGbuF0cU9mahSeQz9fsvB251K9niVOdc1rEukMPTP6Ckt0EOLofOS45 gv3K4Bwfru8ZJ4EZR5vcqMcjGTOOCV/xHfspu7ghRnoHlP4Ezv4ysVNfIfEUjnop7rvbVX n7LCHp4tAOad+eUvb13aiwjWSLXs0rs= X-MC-Unique: BaQi9QDFOweIuOLX9oahNg-1 X-Mimecast-MFC-AGG-ID: BaQi9QDFOweIuOLX9oahNg_1780903075 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Mon, 08 Jun 2026 11:16:32 +0400 Subject: [PATCH v2 14/33] ui: add display cleanup infrastructure MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260608-b4-ui-v2-14-9ea6355ea08f@redhat.com> References: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> In-Reply-To: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> To: qemu-devel@nongnu.org Cc: Paolo Bonzini , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Pierrick Bouvier , Fabiano Rosas , Laurent Vivier , Alex Williamson , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Peter Maydell , Akihiko Odaki , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= X-Developer-Signature: v=1; a=openpgp-sha256; l=3294; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=lwX43CcKsWPglzBRxIi4xAYVtk1qkhgPHDupwvecx6A=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqJmxKfAfkVgHjdsyjuz1K4jGFeJsowilYrU55u gu188DKdm6JAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCaiZsSgAKCRDa6OEJdZac 5f+GD/0RR/xQ5saQSq9xeQf4zP6nzdaLo8N5TH08SZ2uPIjl6VFr23FiniKyI1qrsXf1YlapiVk PjfgZrgpBqQFV4u+Sc/t495BO1DPNIn/wRH29CctRNuFF68vBNLlX9oSCLjqGSonXaMcYIQUd2o Z9xMWwQ3N85r25tEQr1VyxaiOLNjS5ZmWgtbxrWWRSFc7Lf1CSV2ufv94mNyVCknLXnxVfX7l1g ZT6N5kYw1L0KbyJKW3OQI9VDuFmVwawxCjjk412vSNqPG6sAGeRwwYvW30yFOgcIMehEVxiNh09 PHpJTJu9X+PTUw1N/UJkVnQRGY9aBJMGms3P6S8xYHQ4i8ZaEIjCeEB5dNSi3woe0qI4w/1efnM D/JWG72uV3yC1GPj23+v66CryM7OiLeB4V/wxuLERwzgzbIZMw2mAydbjBlXBKanKQUVpfuJEMi iwzvi485EjLcoeV9ckAcg1hqm+E18IGjljCgjsT4/LJ09WVsFpbHm/ZFfZ5Kr6WKOm+/do3JDHf Eo3zCDK3SvXOAWDHBORxuk50ay/2VldueKeKvD/OpGocSwCOh0U7v9jLae4VyUKF9OIeE6OmzvF kaFFFlU1OPFu8fN5wh3GetLaFUMK5npbi1ixZASIROr4igtTSEFDbRK4lMc9Z5XNRbxPBIjKOnO 7p5fTGlDGWDYU4Q== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.6 on 10.30.177.95 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 8 X-Spam_score: 0.8 X-Spam_bar: / X-Spam_report: (0.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1780903154780158500 Add a cleanup callback to QemuDisplay and a qemu_display_cleanup() function that iterates all registered display types and calls their cleanup handler. Wire it into qemu_cleanup() in runstate.c, replacing the ad-hoc vnc_cleanup() call. This provides a structured alternative to atexit() handlers, giving deterministic teardown ordering and making resource leaks visible to sanitizers. The cleanup should happen before user_creatable_cleanup(), since some display have weak user-creatable references to cleanup before. Signed-off-by: Marc-Andr=C3=A9 Lureau --- include/ui/console.h | 2 ++ system/runstate.c | 8 +------- ui/console.c | 20 +++++++++++++++++++- 3 files changed, 22 insertions(+), 8 deletions(-) diff --git a/include/ui/console.h b/include/ui/console.h index a31c5a4995c..1c7f7e62c1a 100644 --- a/include/ui/console.h +++ b/include/ui/console.h @@ -430,6 +430,7 @@ struct QemuDisplay { DisplayType type; void (*early_init)(DisplayOptions *opts); void (*init)(DisplayState *ds, DisplayOptions *opts); + void (*cleanup)(void); const char *vc; }; =20 @@ -438,6 +439,7 @@ bool qemu_display_find_default(DisplayOptions *opts); void qemu_display_early_init(DisplayOptions *opts); void qemu_display_init(DisplayState *ds, DisplayOptions *opts); const char *qemu_display_get_vc(DisplayOptions *opts); +void qemu_display_cleanup(void); void qemu_display_help(void); =20 /* vnc.c */ diff --git a/system/runstate.c b/system/runstate.c index d35fa270bd6..18e585be47f 100644 --- a/system/runstate.c +++ b/system/runstate.c @@ -62,7 +62,6 @@ #include "system/system.h" #include "system/tpm.h" #include "ui/console.h" -#include "ui/qemu-spice-module.h" =20 #include "trace.h" =20 @@ -1046,12 +1045,7 @@ void qemu_cleanup(int status) audio_cleanup(); monitor_cleanup(); qemu_chr_cleanup(); + qemu_display_cleanup(); user_creatable_cleanup(); -#ifdef CONFIG_VNC - vnc_cleanup(); -#endif -#ifdef CONFIG_SPICE - qemu_spice.cleanup(); -#endif /* TODO: unref root container, check all devices are ok */ } diff --git a/ui/console.c b/ui/console.c index 58f29e82c85..1fe3e3a3a6c 100644 --- a/ui/console.c +++ b/ui/console.c @@ -42,6 +42,7 @@ #include "qemu/memfd.h" #include "ui/vt100.h" #include "vgafont.h" +#include "ui/qemu-spice.h" =20 #include "console-priv.h" =20 @@ -575,7 +576,7 @@ void qemu_console_set_display_gl_ctx(QemuConsole *con, = DisplayGLCtx *gl) { /* display has opengl support */ assert(con); - if (con->gl) { + if (gl && con->gl) { error_report("The console already has an OpenGL context."); exit(1); } @@ -1414,6 +1415,23 @@ void qemu_display_init(DisplayState *ds, DisplayOpti= ons *opts) dpys[opts->type]->init(ds, opts); } =20 +void qemu_display_cleanup(void) +{ + int i; + + for (i =3D 0; i < DISPLAY_TYPE__MAX; i++) { + if (dpys[i] && dpys[i]->cleanup) { + dpys[i]->cleanup(); + } + } +#ifdef CONFIG_VNC + vnc_cleanup(); +#endif +#ifdef CONFIG_SPICE + qemu_spice.cleanup(); +#endif +} + const char *qemu_display_get_vc(DisplayOptions *opts) { #ifdef CONFIG_PIXMAN --=20 2.54.0 From nobody Mon Jun 8 12:13:50 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1780903453; cv=none; d=zohomail.com; s=zohoarc; b=ki2XxSFAQ8PY3bxsBW7sKLn79KWFVR8AK5H7dRCBPYNCfLftgEn3j3ZPD4v+eki9+77c9wDDQGG3TLc0GpIqvvd4uSKptzGdxrUEiulZD2ZgAgb0EQZks9pGHZHTzFDujd5tNt4okcZljiY6Sk4s8SjUEfX5d9l3145YGCSkCDA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780903453; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=0slAZr5wYvHwbne6mZ/zPGy2Lj/fJ6NfvG10inQysxA=; b=J5nHVy196VXhnhFqso15ROrg19cHlQ6zMQJgId+1sQwLMnLnPsGqeex3Aiy4xjvN34VIBCTp+vydZylCFd2+Z1XVlQKOEF7Krk6ongd8dUIFMrkzLViB82rJx7rsgjIDkgNTtD568GPWGGs09L+exQimXe4bQhf0vW5E9uB3lg8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1780903453375383.0650502371784; Mon, 8 Jun 2026 00:24:13 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWUFP-0008DX-3j; Mon, 08 Jun 2026 03:18:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUFN-00089P-Fa for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:18:09 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUFL-0000Ej-5E for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:18:09 -0400 Received: from mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-572-kDuN8hUsN2aTLmKXkOeTPw-1; Mon, 08 Jun 2026 03:18:02 -0400 Received: from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id A92CB1955F1F; Mon, 8 Jun 2026 07:18:00 +0000 (UTC) Received: from localhost (unknown [10.44.22.16]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 2E24B3008B34; Mon, 8 Jun 2026 07:17:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780903086; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=0slAZr5wYvHwbne6mZ/zPGy2Lj/fJ6NfvG10inQysxA=; b=fmXxnk3dL4/7AtrmEcOb53xhLl4K5YYpkUaSDMavO0Q8sFCXEYaqHo9OjBsvh/AqXJ6FgI cIa1OcJx/Ct9nBPGVhXFOr6NblsxYz2befRU5E6wcT1/bRdZwIvs3wac5xYCttsptCEXu3 K0g3cF/w5zD6KdxsoY4V96GF1c2Uuy4= X-MC-Unique: kDuN8hUsN2aTLmKXkOeTPw-1 X-Mimecast-MFC-AGG-ID: kDuN8hUsN2aTLmKXkOeTPw_1780903081 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Mon, 08 Jun 2026 11:16:33 +0400 Subject: [PATCH v2 15/33] ui/curses: implement display cleanup MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260608-b4-ui-v2-15-9ea6355ea08f@redhat.com> References: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> In-Reply-To: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> To: qemu-devel@nongnu.org Cc: Paolo Bonzini , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Pierrick Bouvier , Fabiano Rosas , Laurent Vivier , Alex Williamson , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Peter Maydell , Akihiko Odaki , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= X-Developer-Signature: v=1; a=openpgp-sha256; l=1612; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=CrS76SW/HLMQ3iT1E5F2L0lWK5WfDn5ZaHj1Iew5FR4=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqJmxKqzDCFR+lBmUTVzOV1fiWY3Y5y0nuE2tnM n0mVGBrY7iJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCaiZsSgAKCRDa6OEJdZac 5TIeD/9/ybLA6EdImr+O6P274nBoiTlfrW1ouyF22rA0sEd8Lb0GI6zPZxXVBdKq5k5aU0HhypS gRxc8JwuuAJJHvmiYvfjOwSejPuokmeDJik5NtcW6M4BmCMb/cCcTBMHH5pO32mFKQkejWlK3bE 5r9sBmTRZh8PPPAL75ZVEAOtK9u6MD5bEwY+dPk4cMw5m7V/J+cEIBaMRalrw8nEnEOgLO+HmaY kYmSmTW8jn0ME2/beq4uu/9CCntbppZxABaANRf0o5Y7P0/sjcgWYrwOYX5Q6rBiMJpGgR9BPDh 3bK4RVKY/fjeAlyq8wLEPs8kNxtIuJGKpiXqTut2wjnPVpQih0NyoG+ZLEs3GESC4wnHQUQad1c dgU8ajC39QJGKc5cOVM1u8n5yRUSWk3Km0dYnaBqG/bM943JR6lPqR8Z18yB16wJuvngJGmMBJ+ 8nSoG6k+iGA1BUWgjdPuTVczlLeKXv54z1OyqtGqRTt6hiBiXyPDxHqdU6mQA5jD8d5KZ3cX/p0 38BeCyYx/vHiXMopPMKccUXVt77O1xra8Bv6XjXVHWrdop5RCAi2Le82Z81YW82bw3CpDpZlM7T fZxBje6sbQHOyoHhb8ojToiYJXiubeYpDPKDalR8E4dCOwl7GVbLhm3t2s002OvExRK8sTqGBcU oIHWABRdLnf80oQ== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.4 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 8 X-Spam_score: 0.8 X-Spam_bar: / X-Spam_report: (0.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1780903455858154100 Replace the atexit() handler with a proper cleanup callback. The new curses_cleanup() unregisters the display listener, destroy & free the allocated resources. Signed-off-by: Marc-Andr=C3=A9 Lureau --- ui/curses.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/ui/curses.c b/ui/curses.c index 24d3713e57d..4db32b6168d 100644 --- a/ui/curses.c +++ b/ui/curses.c @@ -411,11 +411,19 @@ static void curses_refresh(DisplayChangeListener *dcl) } } =20 -static void curses_atexit(void) +static void curses_cleanup(void) { + if (!dcl) { + return; + } + endwin(); - g_free(vga_to_curses); - g_free(screen); + qemu_console_unregister_listener(dcl); + g_clear_pointer(&dcl, g_free); + g_clear_pointer(&screenpad, delwin); + g_clear_pointer(&vga_to_curses, g_free); + g_clear_pointer(&screen, g_free); + g_clear_pointer(&kbd_layout, kbd_layout_free); } =20 /* @@ -799,8 +807,6 @@ static void curses_display_init(DisplayState *ds, Displ= ayOptions *opts) vga_to_curses =3D g_new0(cchar_t, 256); curses_setup(); curses_keyboard_setup(); - atexit(curses_atexit); - curses_winch_init(); =20 dcl =3D g_new0(DisplayChangeListener, 1); @@ -812,6 +818,7 @@ static void curses_display_init(DisplayState *ds, Displ= ayOptions *opts) static QemuDisplay qemu_display_curses =3D { .type =3D DISPLAY_TYPE_CURSES, .init =3D curses_display_init, + .cleanup =3D curses_cleanup, }; =20 static void register_curses(void) --=20 2.54.0 From nobody Mon Jun 8 12:13:50 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1780903382; cv=none; d=zohomail.com; s=zohoarc; b=nTcc3myKZHMiRP+HogKYkpAtnmFLOuSivW3FwZVZ1QdxnXXnZCBS/yMwxvT3f7BPU2zzdGcB+0VBcY1LuCExwDwLJR+zTomxet+nSeVYrFAh2sRROQ4bOrS8n7lcfSQlqEfhwBw3qzpl92NHQ2T8vb1fRexMusQgVcw1ZNF+/vc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780903382; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=7WXhIg19XYA4431BKDjvjcmVSAPWCiVeU7ZNrGEjkog=; b=ZG3BKVVU9DIMxQqpVJMwiGLLHpc4XLeWq1q0IYpUnIq+d7cd49iAAL6NwTzjPo83DWdfam46IIrn4wegRFC+PXDsotteh6wtAqteP48nL1UJLaM538R5Hay6/eLbqBTZffACE3SEjbV9eM7MC9zG/c6Ek3xSZhJMz5h/7WUtoVE= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1780903382154180.11343870067003; Mon, 8 Jun 2026 00:23:02 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWUFV-0008UP-4s; Mon, 08 Jun 2026 03:18:17 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUFO-0008D0-6b for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:18:10 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUFM-0000En-Iz for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:18:09 -0400 Received: from mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-435-IOkbm9zpM02ZWrCUVUWC1w-1; Mon, 08 Jun 2026 03:18:06 -0400 Received: from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 5F7FC1800473; Mon, 8 Jun 2026 07:18:05 +0000 (UTC) Received: from localhost (unknown [10.44.22.16]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 6A8253008B35; Mon, 8 Jun 2026 07:18:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780903087; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=7WXhIg19XYA4431BKDjvjcmVSAPWCiVeU7ZNrGEjkog=; b=C0WdLC/ggDLKEkMJCzo33HfuLJnWSnnljWgBO9IKbWgkeOxXfxI7+YNrjeQsTh2Mjxn7zI KYLiQrCLGrlbRgSPiYIrOH4ErW4DL+y7jreZEIr0q+WXW6wPs0XXdCTgTdWHlELFnVs0hE T2e4OVH4O7PwQtYqK5c6Snr46tJT4hg= X-MC-Unique: IOkbm9zpM02ZWrCUVUWC1w-1 X-Mimecast-MFC-AGG-ID: IOkbm9zpM02ZWrCUVUWC1w_1780903085 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Mon, 08 Jun 2026 11:16:34 +0400 Subject: [PATCH v2 16/33] ui/sdl2: implement display cleanup MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260608-b4-ui-v2-16-9ea6355ea08f@redhat.com> References: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> In-Reply-To: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> To: qemu-devel@nongnu.org Cc: Paolo Bonzini , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Pierrick Bouvier , Fabiano Rosas , Laurent Vivier , Alex Williamson , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Peter Maydell , Akihiko Odaki , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= X-Developer-Signature: v=1; a=openpgp-sha256; l=1871; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=SWP3H5Ca5KhdDjJmOi5TL9GzYnm/xCZHZJpowaDC8dc=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqJmxKvvWkCApBm+8LWEtFQqjhBB8YkPW3rodmo U4qsHVkmnGJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCaiZsSgAKCRDa6OEJdZac 5VPCEACkCKrhZHM7VIVa+vDr8V0NH22ABCtx32dPqRvBzPsQm4LxpCSALzus5hZIcrGvKJUG0B3 NHV/jdLcVwj/qYgczQgvBH8kMVpVjm2MUjEP0zJK+eZ5zaXm/hilBXy45s6UpllIrti51lyBqxn Sifx/f3ME+9aeQeqCtILKfNNT0dLkWEreuNBBxMo9fiQBwc2zb7Xlw+Cudlx5dDM3VquJiuRJrB Enam8tD646+/2NNmkABy7pcSo/7We5X9npNtydK4BCUWQlZAEdyt50m2FBDLBXCKbeARo4rUt0Q aPgpUaLOsk8UralqXmf9q3ttCIIRZTMe64R1eEETU8m7czLYReEpsSWhXO2rbqclrOHBnV44frO C0qa80M9I5g8wzkpxT6y5mBtr6wZVku0MsTy4zppdZOWeHHei13ciiyFG7XKSKvGMMMuW9m2A16 pho7uXcRtOXPq/bFhTWoWKW0IJYJ2P0Jd7DAEtT8W57w73rIko93IPltNBPf2Cqxe5XL7b/Kljw 5veI2IX/dUBOV6LHj8w74cNdHQkXOjGT/CtVvY/vMc5YYwDzg1+RLkcRZuF3sq9zaHb3br1iEjC Io4sBMByx/M6hodxVBnMLDl7G54w7j7n7UVXmfm+laqJ5XCLEiPNWuoOlILiflMnMrdj5E+jucY X7tzfNdMI1BWJgA== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.4 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com 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, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-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: qemu development 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-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1780903384197158500 Replace the atexit() handler with a proper cleanup callback. Extend sdl_cleanup() to unregister display listeners, free keyboard state, destroy windows, and clean up all cursor resources. Signed-off-by: Marc-Andr=C3=A9 Lureau --- ui/sdl2.c | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/ui/sdl2.c b/ui/sdl2.c index 4fcdbd79d3c..6adcbdb5af9 100644 --- a/ui/sdl2.c +++ b/ui/sdl2.c @@ -788,9 +788,25 @@ static void sdl_mouse_define(DisplayChangeListener *dc= l, =20 static void sdl_cleanup(void) { - if (guest_sprite) { - SDL_FreeCursor(guest_sprite); + int i; + + if (!sdl2_console) { + return; } + + qemu_remove_mouse_mode_change_notifier(&mouse_mode_notifier); + + for (i =3D 0; i < sdl2_num_outputs; i++) { + qemu_console_unregister_listener(&sdl2_console[i].dcl); + qkbd_state_free(sdl2_console[i].kbd); + sdl2_window_destroy(&sdl2_console[i]); + } + g_clear_pointer(&sdl2_console, g_free); + sdl2_num_outputs =3D 0; + + g_clear_pointer(&guest_sprite, SDL_FreeCursor); + g_clear_pointer(&guest_sprite_surface, SDL_FreeSurface); + g_clear_pointer(&sdl_cursor_hidden, SDL_FreeCursor); SDL_QuitSubSystem(SDL_INIT_VIDEO); } =20 @@ -995,8 +1011,6 @@ static void sdl2_display_init(DisplayState *ds, Displa= yOptions *o) sdl_grab_start(&sdl2_console[0]); } =20 - atexit(sdl_cleanup); - /* SDL's event polling (in dpy_refresh) must happen on the main thread= . */ qemu_main =3D NULL; } @@ -1005,6 +1019,7 @@ static QemuDisplay qemu_display_sdl2 =3D { .type =3D DISPLAY_TYPE_SDL, .early_init =3D sdl2_display_early_init, .init =3D sdl2_display_init, + .cleanup =3D sdl_cleanup, }; =20 static void register_sdl1(void) --=20 2.54.0 From nobody Mon Jun 8 12:13:50 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1780903114; cv=none; d=zohomail.com; s=zohoarc; b=ZbOE02+Us6soMZOX6tOB4s/Y+mdyX7Is7tgeWLfuXdpDoARjSI0Ff+tffXZFpHcfnxXv9HwJygS2YrNWkgIeQegg6c7IMxtKFmsY7a9HFKdEmLn50UY2xJwSiLvtpBF4umrWIUeWGTydzjrw47EIrRM4AHasbtoiYAJ+m/yZsHE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780903114; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=h0vBgMB+JfoVtADoFb3UEwzuxSvcYgxQQ4fbzcKMdy0=; b=kPgIEGsOv+6N0ppQ0hYSMvVIN+w/iAX2kR7huTQMTR4bJNyZaciYYP//Cp9IPNrf+bjXQIDRREcf0hjsbovOsupiql8/NVvrsceG8Em83B/26l8UntY7HJnJNZOayTGEwsSc+bXLdte9YTyiE4iOmSBf3Uqw0AjNTZdWi5DDxng= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1780903114572991.8058603570278; Mon, 8 Jun 2026 00:18:34 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWUFc-0000Yk-VD; Mon, 08 Jun 2026 03:18:25 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUFW-00007p-Gr for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:18:19 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUFU-0000FX-SS for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:18:18 -0400 Received: from mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-125-bQXBGl8QMp2r6zpK2OvMlg-1; Mon, 08 Jun 2026 03:18:12 -0400 Received: from mx-prod-int-10.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-10.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.95]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id E259F1800370; Mon, 8 Jun 2026 07:18:10 +0000 (UTC) Received: from localhost (unknown [10.44.22.16]) by mx-prod-int-10.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 87EE8765; Mon, 8 Jun 2026 07:18:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780903095; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=h0vBgMB+JfoVtADoFb3UEwzuxSvcYgxQQ4fbzcKMdy0=; b=ElrKC5V4EOmWKAV4d+b86tdj64n4PCbj6q+YNIK74Xjhi9pjg68u/eaAr4+mV+ASioiapA ZY9TpBYPJE7eUjArFpN3FhBjTFokrC/h3zVuhHXZqLsR320xuKC3kOPaOuiAYK3klwNYhE NbbTWxOe6XS+/8aDoFXRIDdyql7D5V0= X-MC-Unique: bQXBGl8QMp2r6zpK2OvMlg-1 X-Mimecast-MFC-AGG-ID: bQXBGl8QMp2r6zpK2OvMlg_1780903091 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Mon, 08 Jun 2026 11:16:35 +0400 Subject: [PATCH v2 17/33] ui/spice-app: implement display cleanup MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260608-b4-ui-v2-17-9ea6355ea08f@redhat.com> References: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> In-Reply-To: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> To: qemu-devel@nongnu.org Cc: Paolo Bonzini , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Pierrick Bouvier , Fabiano Rosas , Laurent Vivier , Alex Williamson , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Peter Maydell , Akihiko Odaki , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= X-Developer-Signature: v=1; a=openpgp-sha256; l=1540; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=cpTjZniLMqEA6rNMksDOJAEvoDe9Yx6APfWnAl9Mp3Q=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqJmxKfYGxN1x0IGWez76xDdI/nkIc3Qza0+F2N 2K6UkwH2rKJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCaiZsSgAKCRDa6OEJdZac 5ZvmD/sEUzpXfZXkjOVkI2IHQDwQ6fyMwrXnbnPn3KfRqzvYt8ENAIJ3I6OskDmsCt2+wqh5HR8 ifi5V6/ZaufThq7GmVdcwLQoC0Mh1YMOVbUOsi4lnHc0TmtKZk/XGP/KUav+lQq4UDUTPf3qQjA X5MRDlghGUFSPxo3ZXS0/B53O45ehQD6qSvr0i6Z8oXbj9jUR5tqu7AOlJo2HXGdvvwfPcgtBJl gb+NCyR9JmWBxSLdQSdSwZT0F96fCzw0ZCoDN9HSjhMbJ7ZmTzGutm/cJRVC8SLcgJbZltHeGYY gDUWD6so0xswA7FPLgGh8sD+Jg4TEtFVuylZZ6qtz7i087JKr2ONWIkdodAc8dnHs+RtkIWiM9H OxYV19vj7ep907OOhkVNbS/AYIdPqgTizvaragfk4t+NLNy1gWdgRTrRv7mek2QdEqIbwDJL5NJ XZ8ckOcAAhET+n3rqzX3pD6BtmbD4qCZvVIP9YYO+dUDpUz1ljMWYFTWsdC3xJI4SJmegNrDWPw 008wHzU4XzJbLeMGlHQUKQDAvrymoXzNBODvXHwmdcovmNX8VIxiBifXZXyjyJCOerlGXDLXXVD gICMJu5z/i8+TRlzP7fVzoojT/zaLG8hLSucOPuNRtEPGDqxURsh52tKN4PwhqymtW1HkHngGPK UwJhp3M43uUXPHw== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.6 on 10.30.177.95 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com 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, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-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: qemu development 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-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1780903116760158500 Replace the atexit() handler with the display cleanup callback, reusing the existing spice_app_atexit() function. Signed-off-by: Marc-Andr=C3=A9 Lureau --- ui/spice-app.c | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/ui/spice-app.c b/ui/spice-app.c index 0df7325e679..fe3df62bfa5 100644 --- a/ui/spice-app.c +++ b/ui/spice-app.c @@ -119,16 +119,17 @@ static const TypeInfo char_vc_type_info =3D { .class_size =3D sizeof(VCChardevClass), }; =20 -static void spice_app_atexit(void) +static void spice_app_cleanup(void) { if (sock_path) { unlink(sock_path); + g_clear_pointer(&sock_path, g_free); } if (tmp_dir) { rmdir(tmp_dir); + tmp_dir =3D NULL; } - g_free(sock_path); - g_free(app_dir); + g_clear_pointer(&app_dir, g_free); } =20 static void spice_app_display_early_init(DisplayOptions *opts) @@ -146,8 +147,6 @@ static void spice_app_display_early_init(DisplayOptions= *opts) exit(1); } =20 - atexit(spice_app_atexit); - if (qemu_name) { app_dir =3D g_build_filename(g_get_user_runtime_dir(), "qemu", qemu_name, NULL); @@ -218,6 +217,7 @@ static QemuDisplay qemu_display_spice_app =3D { .type =3D DISPLAY_TYPE_SPICE_APP, .early_init =3D spice_app_display_early_init, .init =3D spice_app_display_init, + .cleanup =3D spice_app_cleanup, .vc =3D "vc", }; =20 --=20 2.54.0 From nobody Mon Jun 8 12:13:50 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1780903337; cv=none; d=zohomail.com; s=zohoarc; b=egn7RRNSmxOp262fh2D1fij/1PkblgA3eVsuR2OOWK8PmE/PdDTIWKTxav5/pDDBOPVxmfiySA/d7yTI91RTB9t0zy55nuKQ2D1RwKLMvZEx0MbjNVP8Fsvq99yH/nQGMuWvCmROh7ikEg2RWnwaByfGmOWXVbJjmA48tHrHJ5w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780903337; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=ESuLLFwIW6j5JF43r6z1Rimzjac38Z2vjPfM1I49KGw=; b=ZZkeEvaAXADtZeFV176/s4T9ZSAgMUgmONhEsoh1+FFMkzRTSj6KogY8aGOOPWC0pZ4yf3qTpb0/fYIilrFYCHslqIB++6/GtFSWn0oUIWH/wuA7ljr5zhTmMvLee/5bkrE/Mq5fV2nhI+bLVmLs3m/tiXxr6dIVQPZXk6+PdWk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1780903337713760.1537846757451; Mon, 8 Jun 2026 00:22:17 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWUFh-0000oH-1k; Mon, 08 Jun 2026 03:18:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUFb-0000Px-3Z for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:18:24 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUFX-0000Fw-RI for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:18:21 -0400 Received: from mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-630-kGF4x5KPP96Un5fRXMOGSQ-1; Mon, 08 Jun 2026 03:18:17 -0400 Received: from mx-prod-int-10.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-10.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.95]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 6CD35180061D; Mon, 8 Jun 2026 07:18:16 +0000 (UTC) Received: from localhost (unknown [10.44.22.16]) by mx-prod-int-10.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 2FE8F765; Mon, 8 Jun 2026 07:18:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780903099; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ESuLLFwIW6j5JF43r6z1Rimzjac38Z2vjPfM1I49KGw=; b=cXO44zyqUjeZW3yw0JNeD4Jdom3NHNcf8viCb/2E4MrX3/Uq4Op7f9N/puM/99CDd3h+xo OzbZqlRMDbmE7DQCTmSCBO19zVS59clKmfXgVt3UPYHMWUEZXermRc0//LxG0jyQtLmXhS 2FsGNfHzjy9nLgnrXU2t3o10SrXPezc= X-MC-Unique: kGF4x5KPP96Un5fRXMOGSQ-1 X-Mimecast-MFC-AGG-ID: kGF4x5KPP96Un5fRXMOGSQ_1780903096 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Mon, 08 Jun 2026 11:16:36 +0400 Subject: [PATCH v2 18/33] ui/egl: implement display and EGL cleanup MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260608-b4-ui-v2-18-9ea6355ea08f@redhat.com> References: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> In-Reply-To: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> To: qemu-devel@nongnu.org Cc: Paolo Bonzini , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Pierrick Bouvier , Fabiano Rosas , Laurent Vivier , Alex Williamson , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Peter Maydell , Akihiko Odaki , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= X-Developer-Signature: v=1; a=openpgp-sha256; l=3768; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=3wgnq3+LmSQWhX3LOCNiGJbGeShmFv6Mi0xyiipmBTo=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqJmxL9k6JLPG/oABR6PViMfNyRCylj6p/UCkEA IEdk9bF8uKJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCaiZsSwAKCRDa6OEJdZac 5W0fD/4neJE64iZfAPXS+94MA2NO4r4lQdcjTlWxrsuv5tnslzYwRRAJikP8g+Ovkqb4ca9OLBL TE4cHOlWKy+ue+dGpAbpT/Pj8xMcGKqJbaHlHuULkcwOYZ6Qnaj820AlfzjE9cdHwqGefaMd04+ m+gSNibdrFZrF2RrFwc02jwAfcfhsalIgqxaug1l4hOeHaKwEYpOKGZoL1CiVZriCZfjFeVMGSf +SyF6YLpQQpbS4ZmNTXGG50hRs+6BD346ehR2WzmO8n3+6zE2zr9bSOFL/Ta9k+Drl+GInKsbkT Kh04hCCk0TSF13k/OZybQqa4/Rrel+ibvSbDWeSaF2PdJ4wgv2QQcLYKcL/RbVzdx1GVPfvFL5S HYkgdeIvQWz9hpEBmgUeBhCTfyAEMSA0EbR8m1sheTuH1iCWOJrrNBtcZ8uhs516J0t6cdQqL2p VTEk5zsm0giYJveoalz2/VWbtnuQ93lk02/9NkSWayIqs+6ahmsx5ooUN+x732Y1c9GdAlYXRc+ 2CsLFSv+pBUg0LYWvjJS+2ldACmIMoFbgKkNW9T2LQwzOk7Wh4mTZ108STWG+HyiDOlBemdtH5R lya9Za2ORt0aZexKGNdWOZ3tofM3nQn2/ItTRRFZQG5LUio00IAqGYac8BCjRlaXR25s4XcJurZ zdu8GoCeWXZkWyQ== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.6 on 10.30.177.95 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com 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, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-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: qemu development 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-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1780903339726158500 Add egl_cleanup() to tear down the EGL render node context, GBM device, and EGL display. Add egl_headless_cleanup() to unregister listeners, destroy framebuffers, and free per-console state tracked via a new GPtrArray. Signed-off-by: Marc-Andr=C3=A9 Lureau --- include/ui/egl-helpers.h | 1 + ui/egl-headless.c | 31 +++++++++++++++++++++++++++++++ ui/egl-helpers.c | 19 +++++++++++++++++++ 3 files changed, 51 insertions(+) diff --git a/include/ui/egl-helpers.h b/include/ui/egl-helpers.h index acf993fcf52..dba788fead7 100644 --- a/include/ui/egl-helpers.h +++ b/include/ui/egl-helpers.h @@ -76,6 +76,7 @@ EGLContext qemu_egl_init_ctx(void); bool qemu_egl_has_dmabuf(void); =20 bool egl_init(const char *rendernode, DisplayGLMode mode, Error **errp); +void egl_cleanup(void); =20 const char *qemu_egl_get_error_string(void); =20 diff --git a/ui/egl-headless.c b/ui/egl-headless.c index 878bfebb40c..ba27efcf4c3 100644 --- a/ui/egl-headless.c +++ b/ui/egl-headless.c @@ -9,6 +9,7 @@ =20 typedef struct egl_dpy { DisplayChangeListener dcl; + DisplayGLCtx *ctx; DisplaySurface *ds; QemuGLShader *gls; egl_fb guest_fb; @@ -19,6 +20,8 @@ typedef struct egl_dpy { uint32_t pos_y; } egl_dpy; =20 +static GPtrArray *egl_dpys; + /* ------------------------------------------------------------------ */ =20 static void egl_refresh(DisplayChangeListener *dcl) @@ -220,6 +223,8 @@ static void egl_headless_init(DisplayState *ds, Display= Options *opts) egl_dpy *edpy; int idx; =20 + egl_dpys =3D g_ptr_array_new(); + for (idx =3D 0;; idx++) { DisplayGLCtx *ctx; =20 @@ -232,15 +237,41 @@ static void egl_headless_init(DisplayState *ds, Displ= ayOptions *opts) edpy->gls =3D qemu_gl_init_shader(); ctx =3D g_new0(DisplayGLCtx, 1); ctx->ops =3D &eglctx_ops; + edpy->ctx =3D ctx; qemu_console_set_display_gl_ctx(con, ctx); qemu_console_register_listener(con, &edpy->dcl, &egl_ops); + g_ptr_array_add(egl_dpys, edpy); + } +} + +static void egl_headless_cleanup(void) +{ + if (!egl_dpys) { + return; } + + for (guint i =3D 0; i < egl_dpys->len; i++) { + egl_dpy *edpy =3D g_ptr_array_index(egl_dpys, i); + + qemu_console_unregister_listener(&edpy->dcl); + qemu_console_set_display_gl_ctx(edpy->dcl.con, NULL); + egl_fb_destroy(&edpy->guest_fb); + egl_fb_destroy(&edpy->cursor_fb); + egl_fb_destroy(&edpy->blit_fb); + qemu_gl_fini_shader(edpy->gls); + g_free(edpy->ctx); + g_free(edpy); + } + g_clear_pointer(&egl_dpys, g_ptr_array_unref); + + egl_cleanup(); } =20 static QemuDisplay qemu_display_egl =3D { .type =3D DISPLAY_TYPE_EGL_HEADLESS, .early_init =3D early_egl_headless_init, .init =3D egl_headless_init, + .cleanup =3D egl_headless_cleanup, }; =20 static void register_egl(void) diff --git a/ui/egl-helpers.c b/ui/egl-helpers.c index e3f2872cc14..a7bfb15fd88 100644 --- a/ui/egl-helpers.c +++ b/ui/egl-helpers.c @@ -733,3 +733,22 @@ bool egl_init(const char *rendernode, DisplayGLMode mo= de, Error **errp) display_opengl =3D 1; return true; } + +void egl_cleanup(void) +{ + if (qemu_egl_rn_ctx) { + eglDestroyContext(qemu_egl_display, qemu_egl_rn_ctx); + qemu_egl_rn_ctx =3D NULL; + } + +#ifdef CONFIG_GBM + g_clear_pointer(&qemu_egl_rn_gbm_dev, gbm_device_destroy); + g_clear_fd(&qemu_egl_rn_fd, NULL); +#endif + + if (qemu_egl_display) { + eglReleaseThread(); + eglTerminate(qemu_egl_display); + qemu_egl_display =3D NULL; + } +} --=20 2.54.0 From nobody Mon Jun 8 12:13:50 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1780903131; cv=none; d=zohomail.com; s=zohoarc; b=T5w51dpFbY0zqc91maARaR7w1BFR895iPSBr8ukHw1hbLNJMuVGg4fIKoUtEd3OEcQ+isngTe3qXm9CKY75BPr6K2HCocGPhn6pvKX5JStWxPAYz/gbbJmWbQKJ56+yJLktZ32tmjBil91j5UHVkdvjdp56akUNk5UWsp/0zWhk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780903131; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=M99d8mm/rcGWFplxSkYyDHW5C0as6dK08CNz+VrRrRA=; b=nsHyh3+srMPGLffCAHUaDFCGpsl4O2H3mVokY00I1HWRc1EL8w3cWKnO2jjhuVEEoktyZRmtso0+EiLx5yuzXgMQbYrWfwp3yWkGXTBHtN5RNDvE3XDBbbPHLtDEhvgqHVBEbwXZfuAwzKWx6P5v5Z53DTKzCc7yxkO0SrwUc3Q= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 178090313132368.16004833923205; Mon, 8 Jun 2026 00:18:51 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWUFk-0001By-Ts; Mon, 08 Jun 2026 03:18:33 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUFi-0000yg-1e for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:18:30 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUFg-0000O4-B9 for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:18:29 -0400 Received: from mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-611-_1xAZlXHPGuOqqdlsJm0eg-1; Mon, 08 Jun 2026 03:18:23 -0400 Received: from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id A959A1800361; Mon, 8 Jun 2026 07:18:21 +0000 (UTC) Received: from localhost (unknown [10.44.22.16]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 644F619560A2; Mon, 8 Jun 2026 07:18:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780903107; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=M99d8mm/rcGWFplxSkYyDHW5C0as6dK08CNz+VrRrRA=; b=L3wLn7dpA8e62RadUWYHtS1eh0GRMHtf82DYIAverMt1COYZ4vNFU6Ls0ONe1A8XxIThZ9 dViukK7/ag+tIJPCqYSM0knDsCnvFF0tbVDhVHBPZ+Y6oA/ihmXbhG/1F2VLodi5D7FNgB JJgh7LMH9VW9KZnlaIJasQIYCFTxrdI= X-MC-Unique: _1xAZlXHPGuOqqdlsJm0eg-1 X-Mimecast-MFC-AGG-ID: _1xAZlXHPGuOqqdlsJm0eg_1780903101 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Mon, 08 Jun 2026 11:16:37 +0400 Subject: [PATCH v2 19/33] ui/cocoa: implement display cleanup MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260608-b4-ui-v2-19-9ea6355ea08f@redhat.com> References: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> In-Reply-To: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> To: qemu-devel@nongnu.org Cc: Paolo Bonzini , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Pierrick Bouvier , Fabiano Rosas , Laurent Vivier , Alex Williamson , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Peter Maydell , Akihiko Odaki , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= X-Developer-Signature: v=1; a=openpgp-sha256; l=1474; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=d2sDlDsgKSJ2TB76kf45Z764VuTYl2D5ias8y7XNs1o=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqJmxLO5iTHjYPc3hsjQIfqS9TWTXiq9U3KsgOw 8ucuUAEPLyJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCaiZsSwAKCRDa6OEJdZac 5R5gD/9cPRFitkTuuKK5j1ofk8ORfVXr1Iy6L3bel94rfOd51I5e313K704qlxC2p/6mO9yZYNu GuDF2Pm6eZRAHG7s+fe8OeKt5/JekAGXM86ya7C0eDQFUUTKZmbNu6jP/jQkRy3P2HX1LsxdqVI vtymmBmy5d8gn4Ujp5WBvy3MwKTfL9lh+AL13/bBdIoq54Qsj/gtjDW3Zc5fvrTliRZQZZPQeTu hsvGcu8ex5j5S36dj165coZEoc7UkmjEfIXZ9qFj5RBKVs4SiYX4EWAx0m61ngkxcDTOOKa/JxR uuZJzkYylydRnnNSSQhYUSZrtQxwmD9zr5HfuBgWGlC3lOpBCwsAk8tz1cGS06JFxIQAnhy0igC T/R+SJdCcvcs0PRqNA0HfHBfVFDdlOFzCWA0xMV9l320BjmxfYRLpm8+tcjeP5NAUt9xooTVyGP ee+GQGsRUnUNVnzwGHIz+ykhqGLvlf3kB0Bj4yoN9j3dK26IS8dlVbKO7Kz/QuMjd84/l7IICet KHzhomraVzwHu5U3oRhcuiuEIBz8LeubyL/ZjuI3Up5ianydgdb1kcBscC46b0e9bcR8iZi+ylI B0C9rgBOaSdz0zAsGS4MvxcaufrKpwGkdElXy3AyUCSTUW7PHdFsfsS+0OWfdKitrbexhI0k7EJ WqYXLeVFD24QgDQ== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.12 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com 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, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-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: qemu development 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-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1780903132653158500 Move cbowner release from QemuCocoaAppController -dealloc to cocoa_display_cleanup(), since cbowner is allocated in cocoa_display_init() and cleanup is the symmetric teardown path. Signed-off-by: Marc-Andr=C3=A9 Lureau --- ui/cocoa.m | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/ui/cocoa.m b/ui/cocoa.m index c5e639ab98d..bd0c5c6ed9e 100644 --- a/ui/cocoa.m +++ b/ui/cocoa.m @@ -1331,8 +1331,6 @@ - (void) dealloc COCOA_DEBUG("QemuCocoaAppController: dealloc\n"); =20 [cocoaView release]; - [cbowner release]; - cbowner =3D nil; =20 [super dealloc]; } @@ -2163,9 +2161,26 @@ static void cocoa_display_init(DisplayState *ds, Dis= playOptions *opts) qemu_main =3D cocoa_main; } =20 +static void cocoa_display_cleanup(void) +{ + if (!kbd) { + return; + } + + qemu_console_unregister_listener(&dcl); + g_clear_pointer(&kbd, qkbd_state_free); + qemu_remove_mouse_mode_change_notifier(&mouse_mode_change_notifier); + qemu_clipboard_peer_unregister(&cbpeer); + g_clear_pointer(&cbinfo, qemu_clipboard_info_unref); + qemu_event_destroy(&cbevent); + [cbowner release]; + cbowner =3D nil; +} + static QemuDisplay qemu_display_cocoa =3D { .type =3D DISPLAY_TYPE_COCOA, .init =3D cocoa_display_init, + .cleanup =3D cocoa_display_cleanup, }; =20 static void register_cocoa(void) --=20 2.54.0 From nobody Mon Jun 8 12:13:50 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1780903458; cv=none; d=zohomail.com; s=zohoarc; b=fGFxUZmM+Paon+20lWcxn5HB5evQ/+lXJnxZSX1dY5mkG+XTqVbncTV/SvT0M6Smz9noy/04RO5d9B97O2vJaQDUh2gIznZywHBadYXDH9gHDTDSM/nB8WqtJR2PqiveGicKwvVLpv8vPORZrbYv10C1n/FAiGjU/nSoj1HEX3I= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780903458; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=ylTC7BARlqZ+04IBD49T6S4GmlKV0BK7BLmD7AYS7/w=; b=Wxz4Qa72o7WV2n0vWGjzaft4Don+T6zayGPgqI6kVRDgWtkbFTgWriOZYaZTso/bVMBJRxkGEIZaJTUw9svtQUP+2g6YV+kyql/AFLMDTEtuXPd34JKv2UrQgjI3Y2iI0AEIyjMvpy43Mbc7XTzLbaDXr6a8mk06jn18O4JvYzI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1780903458456451.1083745793841; Mon, 8 Jun 2026 00:24:18 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWUG5-0002Ci-08; Mon, 08 Jun 2026 03:18:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUFr-0001Np-BC for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:18:43 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUFp-0000Sw-IA for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:18:39 -0400 Received: from mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-186-a8r50Z4LOL2BkaSDLIb6Cg-1; Mon, 08 Jun 2026 03:18:27 -0400 Received: from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 92E5A1956089; Mon, 8 Jun 2026 07:18:26 +0000 (UTC) Received: from localhost (unknown [10.44.22.16]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 9A8F619560A6; Mon, 8 Jun 2026 07:18:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780903116; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ylTC7BARlqZ+04IBD49T6S4GmlKV0BK7BLmD7AYS7/w=; b=N8xQaoP+M50hSb6FVVYMECcYzYdxWBypl9xrPjKFStrzj8b89FHWMi0l+s/4InsFaFX3Hq K5cPjvmWjlCgmPEXiFNQY6T0qGMGiiLNWPPrwbtnowXYbptW9YVj7OIDtM3E/IEB9Z2N5S bopb0Wst1viONfsizUw1OGSZAS+eusc= X-MC-Unique: a8r50Z4LOL2BkaSDLIb6Cg-1 X-Mimecast-MFC-AGG-ID: a8r50Z4LOL2BkaSDLIb6Cg_1780903106 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Mon, 08 Jun 2026 11:16:38 +0400 Subject: [PATCH v2 20/33] ui/dbus: implement display cleanup MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260608-b4-ui-v2-20-9ea6355ea08f@redhat.com> References: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> In-Reply-To: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> To: qemu-devel@nongnu.org Cc: Paolo Bonzini , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Pierrick Bouvier , Fabiano Rosas , Laurent Vivier , Alex Williamson , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Peter Maydell , Akihiko Odaki , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= X-Developer-Signature: v=1; a=openpgp-sha256; l=1563; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=KjogY/hMAZwWfbbFTG+U8PdOErEGRgvAosOe7XnBmzY=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqJmxLZb7Qy9ngLLiTcrLxuOJiz+H6pYVsr2mGO B8cdV0FR8KJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCaiZsSwAKCRDa6OEJdZac 5W9CEACqvr7Tnypc1K4zHeKg+2/OGDwMAoZb0fIo2RHM9CqX8OKjkk3O5jILOtHl+1vsruWQCFc cPiBg6BQqLrDeZD0M2lEcsOqXsFcBM1ERserB+ANE52mDQ5BclALV90GQcsDXuQsW5stF9NsUEN wSjnAPdUYGfe9FH7YKt5WLULYGVq9Ia9DiGI4hAR8YPJBtjaMnmQLkodTLgZJTlYrfE7Vk/TOxb 9MtuaBPtvcn0XQ6v3y0sSzlyc2d8nXToDzwX7qXyHYdjUQvfFUxt5Cso+lsnlOGmgJi22+Jc6E6 bZxXai+2ddkPpn7gNQU8v225k+6JXKSz3APtd8Gzg0NOu2bOg7J7LLoogRngJUX0Ho+Xe6ra7Cm lyIOZpYFUNrlM4d2XLL8JIuQtpdAn3gCz/dMdw7gw3uK+473K0s+okcVYkBipuqvsFNr1n/uQgJ +HN8bgs2fb7KwtgxaoJLnCqHk+koYQT3fdKGuatmooIinp2koOA2vOSeiQIMTFPeO8qEsQsuUP7 t/jou1ezUfaJazgw51xmY+f1y4ukS451rAEwqXA4PtP7kYHOskrUP0UuB6aNLtWy/OvZPrFrSfP RtUwcOuMOd2SzfUZUQ2W/b4JaA5ojyW4LZVwt07MkrWZQnvFolsjzI1fXZHSsKQnCQgEffUl2ud 5wfj2PeNEDSfDZQ== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.12 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 8 X-Spam_score: 0.8 X-Spam_bar: / X-Spam_report: (0.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1780903460259158500 Add dbus_cleanup() to unparent the D-Bus display object, ensuring proper teardown before user_creatable_cleanup() runs. Signed-off-by: Marc-Andr=C3=A9 Lureau --- ui/dbus-console.c | 3 +++ ui/dbus.c | 13 +++++++++++++ 2 files changed, 16 insertions(+) diff --git a/ui/dbus-console.c b/ui/dbus-console.c index f784ccbe572..a4a17f5b4d0 100644 --- a/ui/dbus-console.c +++ b/ui/dbus-console.c @@ -152,6 +152,9 @@ dbus_display_console_dispose(GObject *object) DBusDisplayConsole *ddc =3D DBUS_DISPLAY_CONSOLE(object); =20 qemu_console_unregister_listener(&ddc->dcl); + if (ddc->dcl.con) { + qemu_console_set_display_gl_ctx(ddc->dcl.con, NULL); + } qemu_remove_mouse_mode_change_notifier(&ddc->mouse_mode_notifier); qemu_remove_led_event_handler(ddc->kbd_leds_updated); g_clear_object(&ddc->iface_touch); diff --git a/ui/dbus.c b/ui/dbus.c index e02a94df2f3..b23cb44c535 100644 --- a/ui/dbus.c +++ b/ui/dbus.c @@ -615,10 +615,23 @@ static const TypeInfo dbus_display_info =3D { } }; =20 +static void +dbus_cleanup(void) +{ + Object *o; + + o =3D object_resolve_path_component(object_get_objects_root(), + "dbus-display"); + if (o) { + object_unparent(o); + } +} + static QemuDisplay qemu_display_dbus =3D { .type =3D DISPLAY_TYPE_DBUS, .early_init =3D early_dbus_init, .init =3D dbus_init, + .cleanup =3D dbus_cleanup, .vc =3D "vc", }; =20 --=20 2.54.0 From nobody Mon Jun 8 12:13:50 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1780903225; cv=none; d=zohomail.com; s=zohoarc; b=KNeCQ3bXVDjTbVZQfsVM7py1gQ+L1UVKOMVoJ/rdvdaYW9e3I2397WYIkuGr3kxjUpp3BgEdA/YaaQTLliwxQVuWJE8o29EeIFkHmnobP5mwtKDClH9NBTnCPh08oAw97bLS5/RsE7Rx2jW9gMCAcfpZowTOTVa/DdtV8gGgIzw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780903225; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=RAaTuhm37B4BnOohrXjrSbA59RhGqmcivU4t+29HN3M=; b=SL3gBXZCLuyk/Vg+BkpDNF7rogIk8UEYAe27Cvgb1sbWuCZb8yVApQA4vkx5n26fXwqIQUixyAWnwixKZwpOcELqIQCm+Yxh37g/fPiCfZHVU1j0Fmh5wu+LnfWrbVpP3KB7B5Bq04ipVqKHIwb8MK2BfQvpDrGxIwjEznPb47g= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1780903225893780.0384830388176; Mon, 8 Jun 2026 00:20:25 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWUG1-0001ld-1Q; Mon, 08 Jun 2026 03:18:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUFq-0001Ne-GA for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:18:39 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUFo-0000Sb-T0 for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:18:38 -0400 Received: from mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-103-5i7GcBG7OHST01ZL6_GRsw-1; Mon, 08 Jun 2026 03:18:33 -0400 Received: from mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.93]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id C4011195609D; Mon, 8 Jun 2026 07:18:31 +0000 (UTC) Received: from localhost (unknown [10.44.22.16]) by mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 85F961800480; Mon, 8 Jun 2026 07:18:30 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780903114; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=RAaTuhm37B4BnOohrXjrSbA59RhGqmcivU4t+29HN3M=; b=Xa4ZhAKO5ncwsC3L+c0cPlbJIh0o5uEMLnqLBl8ccdkUgoKIpYmqPVSCKj/FV2IGwNZXz4 c4OWqRbxD98UMBIOlkHnr5ZHUbdT8cU66HMVLITh/rHh0hJvyWoAi5q8XbHVhaeafIqoV7 uZ+E4+xp3aS86c1/oDwNFZ1lJfuP/pE= X-MC-Unique: 5i7GcBG7OHST01ZL6_GRsw-1 X-Mimecast-MFC-AGG-ID: 5i7GcBG7OHST01ZL6_GRsw_1780903111 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Mon, 08 Jun 2026 11:16:39 +0400 Subject: [PATCH v2 21/33] ui/gtk: implement display cleanup MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260608-b4-ui-v2-21-9ea6355ea08f@redhat.com> References: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> In-Reply-To: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> To: qemu-devel@nongnu.org Cc: Paolo Bonzini , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Pierrick Bouvier , Fabiano Rosas , Laurent Vivier , Alex Williamson , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Peter Maydell , Akihiko Odaki , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= X-Developer-Signature: v=1; a=openpgp-sha256; l=3061; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=UaBH1LhnScei1s2prqbY4sVvuMKVbUZp++lzw6vePA8=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqJmxLZPmnMmKjzrk3zrEjga6pD+ywhmdp0ww1j DAG4gVi1XmJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCaiZsSwAKCRDa6OEJdZac 5XusD/9V3xLV5kIG7zao6qyi5c3r6/VG6CKGi5uqdFPRlF/KWlXMCDuhm/m8pOKhsdSIu94OdHN JkqE3g0Lljm2BaQ4NhAeT8cvtcn/P0MzJC8SMbnh3xA+7oMwmPWsisIZHWZeeu/yCGqu/uzzotZ fCEQkaTFQZHFQMFqwI44Jy0k3Pic0KDOWnTqkw4lPk2y7NrGHml5NYIYgM5AfaIodbMH7NIeE8j uWNDGat5p41gtiL+9hq3ndWQ7kqEMnGRGzvLztnSib5V95So/FyffNLdKQSDvLOMb4WSgtlsXZW 1L7K6VgFPwJxuz9G7wH9s55qEplR9Uan4z6O+uT28r1eu6r76TrYPoLhI7aPJjk4kDrvRq7m1n8 h+GhB+nDq9gJP+dHfVJ93ZL8NvaRZxhSHtSz5Jn36GFuprBn76HtyJ9gVXH8DC2Vb35evYJb5ZA eio5/N2LIVGCZ9YCZk0prBJC6qydGE0nOs4VnncztUPgos4NWZT2kuC6GBTijauySyqufAbxuJr 0QE0XEAiuuvxjbJvgYkQsrjrKN7Y+R5G9GAshWN21Z90j1ZFHx9gIqXVJUaWdAWgFyh0EzV0o36 K2M0Xe8k1Ewd83ZMK2aVaetKi2UcDzGreWSowPLzvw1jeTtrgPZbWVDtttMJJi4TxOHNTa/wmCc f/wZ4f0sc6abD9A== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.93 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 8 X-Spam_score: 0.8 X-Spam_bar: / X-Spam_report: (0.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1780903228288154100 Add gtk_display_cleanup() to properly tear down GTK display state: remove console and mouse notifiers, unregister clipboard peer, destroy the main window and virtual consoles. Signed-off-by: Marc-Andr=C3=A9 Lureau --- include/ui/gtk.h | 1 + ui/gtk-clipboard.c | 15 +++++++++++++++ ui/gtk.c | 18 ++++++++++++++++++ 3 files changed, 34 insertions(+) diff --git a/include/ui/gtk.h b/include/ui/gtk.h index 3e6ce3cb48c..5156a049509 100644 --- a/include/ui/gtk.h +++ b/include/ui/gtk.h @@ -225,6 +225,7 @@ int gd_gl_area_make_current(DisplayGLCtx *dgc, =20 /* gtk-clipboard.c */ void gd_clipboard_init(GtkDisplayState *gd); +void gd_clipboard_cleanup(GtkDisplayState *gd); =20 void gd_update_scale(VirtualConsole *vc, int ww, int wh, int fbw, int fbh); =20 diff --git a/ui/gtk-clipboard.c b/ui/gtk-clipboard.c index ea9444be70f..476e6b8303c 100644 --- a/ui/gtk-clipboard.c +++ b/ui/gtk-clipboard.c @@ -235,3 +235,18 @@ void gd_clipboard_init(GtkDisplayState *gd) g_signal_connect(gd->gtkcb[QEMU_CLIPBOARD_SELECTION_SECONDARY], "owner-change", G_CALLBACK(gd_owner_change), gd); } + +void gd_clipboard_cleanup(GtkDisplayState *gd) +{ + if (!gd->cbpeer.name) { + return; + } + qemu_clipboard_peer_unregister(&gd->cbpeer); + g_signal_handlers_disconnect_by_data( + gd->gtkcb[QEMU_CLIPBOARD_SELECTION_CLIPBOARD], gd); + g_signal_handlers_disconnect_by_data( + gd->gtkcb[QEMU_CLIPBOARD_SELECTION_PRIMARY], gd); + g_signal_handlers_disconnect_by_data( + gd->gtkcb[QEMU_CLIPBOARD_SELECTION_SECONDARY], gd); + gd->cbpeer.name =3D NULL; +} diff --git a/ui/gtk.c b/ui/gtk.c index 2ee826b56fb..c26dc83ac3e 100644 --- a/ui/gtk.c +++ b/ui/gtk.c @@ -2505,6 +2505,7 @@ static void gd_create_menus(GtkDisplayState *s, Displ= ayOptions *opts) } =20 =20 +static GtkDisplayState *gtk_display_state; static gboolean gtkinit; =20 static void gtk_display_init(DisplayState *ds, DisplayOptions *opts) @@ -2523,6 +2524,7 @@ static void gtk_display_init(DisplayState *ds, Displa= yOptions *opts) } assert(opts->type =3D=3D DISPLAY_TYPE_GTK); s =3D g_malloc0(sizeof(*s)); + gtk_display_state =3D s; s->opts =3D opts; =20 theme =3D gtk_icon_theme_get_default(); @@ -2681,10 +2683,26 @@ static void early_gtk_display_init(DisplayOptions *= opts) #endif } =20 +static void gtk_display_cleanup(void) +{ + GtkDisplayState *s =3D gtk_display_state; + + if (!s) { + return; + } + + qemu_remove_mouse_mode_change_notifier(&s->mouse_mode_notifier); + gd_clipboard_cleanup(s); + g_clear_pointer(&s->window, gtk_widget_destroy); + g_clear_object(&s->null_cursor); + g_clear_pointer(>k_display_state, g_free); +} + static QemuDisplay qemu_display_gtk =3D { .type =3D DISPLAY_TYPE_GTK, .early_init =3D early_gtk_display_init, .init =3D gtk_display_init, + .cleanup =3D gtk_display_cleanup, .vc =3D "vc", }; =20 --=20 2.54.0 From nobody Mon Jun 8 12:13:50 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1780903340; cv=none; d=zohomail.com; s=zohoarc; b=L2M9pHUK0845KhHZuu0fFhh587hlE4DIHqjD/eFG5cFcbyEKsfIJ+NbrnKxpCTBziFFBqpEsS852dkhucsdUtSzX7+HjtknUEoFTC5d3QImc3QtoVtoZYlVoHVBB7POjhJRXgjRlngss0PEJdiisyHINkpwG/v0BZr8v9X+kz60= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780903340; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=idSfeOkupul6CAnH9YIHT/7fjHiKKtjSvSj+yBGEr9o=; b=CHkmK/VNNYsetyG6lXDbofh3d4nQKzPZPKmyhXQtdOuftDjdQSoDb/xmitV9yk7W+I0Cd76qNcsuss2oYrzzN4HKG5DxB+p6s8C3gdSxNZ9MFqk1P0w1pAZ+fZ5LMeuWlCSaXGXgLxG6U4o7NstynzXXLW0TyOskOxzTb3nYrl0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1780903340309511.69076259982376; Mon, 8 Jun 2026 00:22:20 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWUG0-0001fy-Io; Mon, 08 Jun 2026 03:18:48 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUFx-0001SQ-8Q for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:18:47 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUFv-0000di-Qo for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:18:45 -0400 Received: from mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-596-G4POIuXrNs2n8ZRq_UvGyQ-1; Mon, 08 Jun 2026 03:18:38 -0400 Received: from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.17]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 97E0119560A2; Mon, 8 Jun 2026 07:18:37 +0000 (UTC) Received: from localhost (unknown [10.44.22.16]) by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id EC38F1956053; Mon, 8 Jun 2026 07:18:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780903123; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=idSfeOkupul6CAnH9YIHT/7fjHiKKtjSvSj+yBGEr9o=; b=J/6H07DXluQY/0oxxp5L3M0MmrtX4jkPfhF7cyMYZDy/xGzwpGXFLIjvktCgIoIhw7KKAF IkLc8/pTDCSS95MK2tll/R2eYBryo/vdWyavUo+ghQXxTZSz50j9ESDtnZafirndTy6Hmo kri2bACX2xWKPMRbR92HD63Cy9t+lx8= X-MC-Unique: G4POIuXrNs2n8ZRq_UvGyQ-1 X-Mimecast-MFC-AGG-ID: G4POIuXrNs2n8ZRq_UvGyQ_1780903117 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Mon, 08 Jun 2026 11:16:40 +0400 Subject: [PATCH v2 22/33] ui/console: add console event notifier infrastructure MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260608-b4-ui-v2-22-9ea6355ea08f@redhat.com> References: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> In-Reply-To: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> To: qemu-devel@nongnu.org Cc: Paolo Bonzini , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Pierrick Bouvier , Fabiano Rosas , Laurent Vivier , Alex Williamson , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Peter Maydell , Akihiko Odaki , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= X-Developer-Signature: v=1; a=openpgp-sha256; l=2919; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=y/0JwIQWr7VsppBD/1tHcBRBSRlt5rwMryokCqoziC0=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqJmxL5AG4q8DSTZsAVEpcqzQ0HYAnYoVciVJmt gQU+M30Eq6JAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCaiZsSwAKCRDa6OEJdZac 5YzoEACrXAsQBe+jkt1K9BHeESSLDDeB2han9a2CmTCToKmXTbprQLteQriu/Tpw6VcD9M15V2N hA42BSqIYVEEYWUwznh3B+B3Y6VfXCfzR1z/K8ihfliz1s2k0C3rQs5RIQpjayaBusRN1AHqibL AHtTUOFaFH0wbysdLAo4wSzyNhxp10zwTNZaTNDkWLm6Qe1vbE6Y6Vkmgxosgm3945VqMoWvwIY 7Hnp/xrZilSHie1ERud2QHeEnlrqCNspPYMeUuSdLTYvm1FGCPAhgrbqoRjBHeITz/qXyf8q1bw gioEgnr00g+IwaogvTwkuALnckcUBRyNigzSQppGtjGA+j7xEJm7C0jgjb2KYYkx7f8c88Hlp/T SmfYzl1cKszMaByQU/odEBmi9gOJBSx+3ih18rPtmmeFmtJXhd5Y60Z/rSVKf4ikztum35/xPhs s0Q3QExhSqfnAFbmJYNHES8HJNTg/8nXy+MiP/mJpD631872B8ofAnBlccQX97HkXMjf+JZ0Zyi bgH9lzOJP0fL9RyR2XDx1uf7zjMjn4mzR4nj++knGwYIn1bZ0E5hcnwKkSTQFYG9SatmzAs5Pkp 5EyO68nvsMG8HKQOxJ7hUL3A3Y1CivaS9fr35qGnUAGxH/7Eo3IeMJjIerXXF332JXRhKOeKU5z gAAUrDXjubZ4K2Q== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.17 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 8 X-Spam_score: 0.8 X-Spam_bar: / X-Spam_report: (0.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1780903341668158500 Add a NotifierList to DisplayState so display backends can be notified when consoles are added or removed at runtime. No events are fired yet, that follows in the next commits. Signed-off-by: Marc-Andr=C3=A9 Lureau --- include/ui/console.h | 18 ++++++++++++++++++ ui/console.c | 23 +++++++++++++++++++++++ 2 files changed, 41 insertions(+) diff --git a/include/ui/console.h b/include/ui/console.h index 1c7f7e62c1a..44ebc578651 100644 --- a/include/ui/console.h +++ b/include/ui/console.h @@ -442,6 +442,24 @@ const char *qemu_display_get_vc(DisplayOptions *opts); void qemu_display_cleanup(void); void qemu_display_help(void); =20 +/* + * Console notifications: + * Handlers must be idempotent, it may notify multiple times. + */ +typedef enum { + QEMU_CONSOLE_ADDED, + QEMU_CONSOLE_REMOVED, +} QemuConsoleEventType; + +typedef struct QemuConsoleEvent { + QemuConsoleEventType type; + QemuConsole *con; +} QemuConsoleEvent; + +void qemu_console_add_notifier(Notifier *notifier); +void qemu_console_remove_notifier(Notifier *notifier); +void qemu_console_notify(QemuConsoleEventType type, QemuConsole *con); + /* vnc.c */ void vnc_display_add_client(const char *id, int csock, bool skipauth); int vnc_display_password(const char *id, const char *password, Error **err= p); diff --git a/ui/console.c b/ui/console.c index 1fe3e3a3a6c..76851bc129d 100644 --- a/ui/console.c +++ b/ui/console.c @@ -70,6 +70,7 @@ struct DisplayState { bool refreshing; =20 QLIST_HEAD(, DisplayChangeListener) listeners; + NotifierList console_notifiers; }; =20 static DisplayState *display_state; @@ -84,6 +85,16 @@ static bool console_compatible_with(QemuConsole *con, static QemuConsole *qemu_graphic_console_lookup_unused(void); static void dpy_set_ui_info_timer(void *opaque); =20 +void qemu_console_notify(QemuConsoleEventType type, QemuConsole *con) +{ + DisplayState *ds =3D get_alloc_displaystate(); + QemuConsoleEvent event =3D { + .type =3D type, + .con =3D con, + }; + notifier_list_notify(&ds->console_notifiers, &event); +} + static void gui_update(void *opaque) { uint64_t interval =3D GUI_REFRESH_INTERVAL_IDLE; @@ -1056,10 +1067,22 @@ static DisplayState *get_alloc_displaystate(void) { if (!display_state) { display_state =3D g_new0(DisplayState, 1); + notifier_list_init(&display_state->console_notifiers); } return display_state; } =20 +void qemu_console_add_notifier(Notifier *notifier) +{ + DisplayState *ds =3D get_alloc_displaystate(); + notifier_list_add(&ds->console_notifiers, notifier); +} + +void qemu_console_remove_notifier(Notifier *notifier) +{ + notifier_remove(notifier); +} + /* * Called by main(), after creating QemuConsoles * and before initializing ui (sdl/vnc/...). --=20 2.54.0 From nobody Mon Jun 8 12:13:50 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1780903343; cv=none; d=zohomail.com; s=zohoarc; b=mjKzMXOO/Yui5I06JfnOVkDTofJtP3RT4SYeaW8VtKagtZ/WMsgPjp+KkKSbs/H1HjoiXli2hXg4Uoh6vsXTes4u4nG2bTGgg/qEx513Lf/1C63Gp036TN0dsCvSh1ktbOktP7S4pHFriXLpEhh5rmT5qtU3AZmtUuTyESeImvA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780903343; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=BS5+8uDbUO8tnie7RIoFtC9U2mSiMSeu6Pam5/wgM3Q=; b=hE9cvYZ/+Ag3I2eAPP+7EZg2GYWOf7EwcgHR6KB+AknYYsT++9e5QANh5VOLPVhaOPrse6so3w2auP21eE4OdDW9JejshS0CZN5U9nUb/LReenoj0khKCT77kORttH4wZgBb9FomWWZHHSn+ywcKM9RbPZvXAFlzSlrycCUeJR4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1780903343138341.7698447548513; Mon, 8 Jun 2026 00:22:23 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWUJJ-0005jL-3K; Mon, 08 Jun 2026 03:22:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUGI-0002MY-Rw for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:19:12 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUG6-0000e9-78 for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:18:57 -0400 Received: from mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-18-KjMI5pZnOSicTKKC3qDlFg-1; Mon, 08 Jun 2026 03:18:44 -0400 Received: from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 42A68180048E; Mon, 8 Jun 2026 07:18:43 +0000 (UTC) Received: from localhost (unknown [10.44.22.16]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 042B019560A3; Mon, 8 Jun 2026 07:18:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780903133; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=BS5+8uDbUO8tnie7RIoFtC9U2mSiMSeu6Pam5/wgM3Q=; b=f/rEg+Fm4HAslg2OIB59dRi8aOKgjg0/bUY/BIwxk1buJrJkZ8n1vHBxQrUQ5zHEpC0NXP Ilwx7mmCvsghz+AOixv1KyiJVl5GMnG3iHo69onbojBlVwoi2JNuoh2kqazg+nNHY8WkC2 W4BaWYMWPg8nm3FxUs/SatqML79WTC8= X-MC-Unique: KjMI5pZnOSicTKKC3qDlFg-1 X-Mimecast-MFC-AGG-ID: KjMI5pZnOSicTKKC3qDlFg_1780903123 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Mon, 08 Jun 2026 11:16:41 +0400 Subject: [PATCH v2 23/33] ui/console: fire console ADDED/REMOVED notifications MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260608-b4-ui-v2-23-9ea6355ea08f@redhat.com> References: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> In-Reply-To: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> To: qemu-devel@nongnu.org Cc: Paolo Bonzini , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Pierrick Bouvier , Fabiano Rosas , Laurent Vivier , Alex Williamson , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Peter Maydell , Akihiko Odaki , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= X-Developer-Signature: v=1; a=openpgp-sha256; l=1311; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=6hGNnrGYNd3ibRqfbbVKqo9FqKz4axEEuiTBy0WRKJo=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqJmxMaHgs8EYIR9FEjEs/eb/nHADtkRy1YpUP8 4fnNNtlIsOJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCaiZsTAAKCRDa6OEJdZac 5VeqD/9c91HEQjgRAXuwGc7bvJuT2+BFavVoZlF4UW+s3eCs0wSc+UKa1feFANAFFsmf+5mRhYe ctVPK3Wj7NFI7KttyjJI8xLt+LQFGr57YlF6tyPxtMTyhe2FJVFRIiFy+IW+JL3bqmm9JWss/Tw VjrSv00xZ/oZ53ujyu6Hfetw91rTmBXT08XVTRvM+PK7pzE1soNXSHD49187XiwmzTsukAPVK/i kCDBhMSlp4nilbGGj8ygLqIaMSufmq3FAhKAkNaYEqwufPS0qgMN4IR1hKjhugI27hqLS1Pi+85 VvUDlWjDnVi+EVtX01iOU7nwV0q75DcVerFdRg6413Bsj/1j5FlAvATQcqA6CxHkh6aJWiXdPgQ fx9fBo25iffdDijm3TAmpg2prBpE3QnPTxqvCV3oejdCiKJgYQFRHJPeJk7ab8xm0vN5nxo6oFE 9QUevyafI56c1hwb3F+C1Kqumcx2urDQ8O+B2senccoZukKSjtyUUf3j73RkXPR9qd9hjeqD6Y5 GIH8t5phqv9HTwR3Q9msqbRmXBn/w6q2SGTz+uIpXXHyDxx2dH6xaxSqzYcf7WE6SLZPUnz9/3u PpyroTO+Snuugk2/dT1HwZx6jXGRCw+O6Ik/F0lZNOG+n0lgEQG9UYyts4MqojUPPrhedzJ7To3 GZ2pmZt+eHZbJcQ== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.12 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com 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, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-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: qemu development 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-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1780903343694158500 Fire CONSOLE_ADDED at the end of graphic_console_init() and CONSOLE_REMOVED at the start of graphic_console_close(), so display backends can react to console hotplug/unplug events. REMOVED fires before the device link is cleared and before the placeholder surface swap, so handlers can unregister their DCL while the console is still in a known state. Signed-off-by: Marc-Andr=C3=A9 Lureau --- ui/console.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/ui/console.c b/ui/console.c index 76851bc129d..975eaf15706 100644 --- a/ui/console.c +++ b/ui/console.c @@ -1142,6 +1142,7 @@ QemuConsole *qemu_graphic_console_create(DeviceState = *dev, uint32_t head, =20 surface =3D qemu_create_placeholder_surface(width, height, noinit); qemu_console_set_surface(s, surface); + qemu_console_notify(QEMU_CONSOLE_ADDED, s); return s; } =20 @@ -1158,6 +1159,7 @@ void qemu_graphic_console_close(QemuConsole *con) int height =3D qemu_console_get_height(con, 480); =20 trace_console_gfx_close(con->index); + qemu_console_notify(QEMU_CONSOLE_REMOVED, con); object_property_set_link(OBJECT(con), "device", NULL, &error_abort); qemu_graphic_console_set_hwops(con, &unused_ops, NULL); timer_del(con->ui_timer); --=20 2.54.0 From nobody Mon Jun 8 12:13:50 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1780903355; cv=none; d=zohomail.com; s=zohoarc; b=E2tFVIpHOYltv5Z/4IUTClr4vL7joX0ajMe2VVFzRIoH7gu4ZxuOZunekMEuDSInkDlnhyGjRaPJBf8//1JPDWLFyv3YDl1qXiRCkEhZ1dHNG119y0DK2HhXb55YqzlLZQjytYBlIVJnKesB5YeLU8aP+2PRihq44zkX/zH8Vk8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780903355; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=L1PMzPwuEXW67aOzPq+tpb4RknWUk4HcTWyNDmnQBKs=; b=KKXUvym0kiocbREsaU6OPwAI7HrqdBgwII+Cs/TSibuGUCuSf7LbSJ5MTRTKSckp64/ZywD+sacMnZEMlDSlAR93K29dM5k1M9yFqCfWZC7tHJSGY/cS06yqoLxGAMTL6n9ovSBErS1rwa+HYJ4Oihl3QDKmA/+pYxm3cqFhj9I= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1780903355749214.28493592445932; Mon, 8 Jun 2026 00:22:35 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWUGW-0002d6-IW; Mon, 08 Jun 2026 03:19:20 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUG8-0002LU-T3 for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:19:12 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUG6-0000e7-6q for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:18:56 -0400 Received: from mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-173-yPX2BSX2PoexxNJ0TOQw0Q-1; Mon, 08 Jun 2026 03:18:49 -0400 Received: from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 6A2D5195608F; Mon, 8 Jun 2026 07:18:48 +0000 (UTC) Received: from localhost (unknown [10.44.22.16]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 348993008B34; Mon, 8 Jun 2026 07:18:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780903133; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=L1PMzPwuEXW67aOzPq+tpb4RknWUk4HcTWyNDmnQBKs=; b=DKgyTbP2tlg99ou+nDUuUgj3ep4veortOHJw2kjzD6SXBwBJACHy2R+vgNhGHbT+Sjmr4a FOYkvnmRT/hbHWlRlAx73nEAMrTIJXGaOk1dDIrjM57/PqTsZP4kQiLV8SHdFNX826Vu6m qo4w8wjorSBsyrhESOELvzhqoLNozLA= X-MC-Unique: yPX2BSX2PoexxNJ0TOQw0Q-1 X-Mimecast-MFC-AGG-ID: yPX2BSX2PoexxNJ0TOQw0Q_1780903128 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Mon, 08 Jun 2026 11:16:42 +0400 Subject: [PATCH v2 24/33] ui/console-vc: fire ADDED/REMOVED notifications MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260608-b4-ui-v2-24-9ea6355ea08f@redhat.com> References: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> In-Reply-To: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> To: qemu-devel@nongnu.org Cc: Paolo Bonzini , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Pierrick Bouvier , Fabiano Rosas , Laurent Vivier , Alex Williamson , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Peter Maydell , Akihiko Odaki , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= X-Developer-Signature: v=1; a=openpgp-sha256; l=1532; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=YapQn9Mbsz473V4fTJPToKR0zvzbCFqEf4qxDOs0Qtc=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqJmxMgtD48rvUb8TNyGriV5C43tU2YW6+CjB+S dZElmuRi52JAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCaiZsTAAKCRDa6OEJdZac 5asUEAC5C2kVT66t+C+6LjJFrs9v5bGDoMlH1Y6OrLx0hL7RztN/9CHaazpfp6vO7med+X+2IfY yPMs89+O/t7yIryqXEqtKOuIKZBvsgPf36q1uambzQ+Ncvh1JMA2ls4qsstHBzba83fTjatnYrk c8Pjejb4vEVAiExWdkyszNfPS2vfL5qy4bxuCKcktPRRiqYpYY2Z1OiqSwLy9FswEjyvnIz6cKb 7gx0G2mE1DsZCYxqMy2423lh7q0fNjj4o/600SdOWfgcsDa+3n2j2UgkygnvAAeQ9mWHxXENKr1 uG5RxwpDBNPUuzs7cwtnxF/tfFgnsITaRI7D8lqyZsrKOv1yIWIK3IoT42alNy6pKAPOOAiHGb1 0KDSko5OHNLRAwodbmLiokt9oO91+5/egIn5S83AKCxIH7b3wf2270mdnJuC1o0BbPWxHHYZhsp Th7utfPXW3L9ippr4T1ZxI5FR1Nf5vtqr1zziUsvIu624+NrKKncK2UaNCX3W7yLFCgDnR0/TEA 2PbpkhsLTeS6J/3+oed0Mpvk5gtFE0ejhI29kSIyAVHap7T6miUZvl7RDrjwpSDWI2z9kTmBNtY iN9wEqNF8/WM7AMLvcj+Flrr+cCzDM89ewvtTlW1Jj+RaHxfC6cmC9IwnDxLvjsJf+iPCvIuAsI FqqU2zNGC2Yoi6Q== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.4 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 8 X-Spam_score: 0.8 X-Spam_bar: / X-Spam_report: (0.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1780903357868158500 Fire CONSOLE_ADDED when the chardev is opened. Fire CONSOLE_REMOVED in char_vc_finalize() before dropping the console reference, so the console is still in a valid state when listeners handle the event. Also fixes a console object leak by adding the missing object_unref(). Signed-off-by: Marc-Andr=C3=A9 Lureau --- ui/console-vc.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/ui/console-vc.c b/ui/console-vc.c index 828e78c41ea..53d9e9d39b3 100644 --- a/ui/console-vc.c +++ b/ui/console-vc.c @@ -255,6 +255,7 @@ static bool vc_chr_open(Chardev *chr, ChardevBackend *b= ackend, Error **errp) } =20 qemu_chr_be_event(chr, CHR_EVENT_OPENED); + qemu_console_notify(QEMU_CONSOLE_ADDED, QEMU_CONSOLE(s)); return true; } =20 @@ -327,12 +328,24 @@ static void char_vc_init(Object *obj) vc->encoding =3D CHARDEV_VC_ENCODING_UTF8; } =20 +static void char_vc_finalize(Object *obj) +{ + VCChardev *vc =3D VC_CHARDEV(obj); + QemuConsole *con =3D QEMU_CONSOLE(vc->console); + + if (con) { + qemu_console_notify(QEMU_CONSOLE_REMOVED, con); + object_unref(con); + } +} + static const TypeInfo char_vc_type_info =3D { .name =3D TYPE_CHARDEV_VC, .parent =3D TYPE_CHARDEV, .instance_size =3D sizeof(VCChardev), .instance_init =3D char_vc_init, .instance_post_init =3D object_apply_compat_props, + .instance_finalize =3D char_vc_finalize, .class_init =3D char_vc_class_init, }; =20 --=20 2.54.0 From nobody Mon Jun 8 12:13:50 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1780903316; cv=none; d=zohomail.com; s=zohoarc; b=BMEzng0g53MTmIqgxnJu1UM1h2CxBgkvtKbAQzaJO5Ltsh1bAF/tgCmLYwO2q+LTOVsEerRGGR2m7hVbWoPqMF7i0WNlLk8b0Z2qlACCReSSXgxiZrzOo+WT4RxRtzM2K5PtWmcXS+tEwetj7wq/tnuZ3EDA23HTT2tLWp9yU3Y= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780903316; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=jKa7hDp3dg6dKFZyWKTIvkgjbBHUJu0PjUsKko7hmik=; b=KVHIv6xXmcSPDq2gYztFNnsD7eTIzPfgSfokcqJEqRl+5NAY6T7BNjTgR3+XBUazhhFghIKZs3X4fyq0yWRMwxU7pUDq60UCUty01glr58jWkMHMzyjkYZzlG34hPaRHEjDfQ43kvzUzTuzXZ4Q5sHGoPortfvqVKTukg5rFMoM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1780903316916717.1062825914812; Mon, 8 Jun 2026 00:21:56 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWUHd-0003k6-5z; Mon, 08 Jun 2026 03:20:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUGM-0002Mi-It for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:19:12 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUGH-0000gu-JJ for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:19:08 -0400 Received: from mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-693-849LbrCINWqYHXVt9o-PXg-1; Mon, 08 Jun 2026 03:18:55 -0400 Received: from mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.111]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id E1B3019560AA; Mon, 8 Jun 2026 07:18:53 +0000 (UTC) Received: from localhost (unknown [10.44.22.16]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 7680B180034F; Mon, 8 Jun 2026 07:18:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780903138; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=jKa7hDp3dg6dKFZyWKTIvkgjbBHUJu0PjUsKko7hmik=; b=YWjsX9Wr63/W+/m27ACrczm9KoPvo9dBT1Z1riCjBLGhM+eAq8ZTaYh/qqY9iRa02s0yL8 QToa8tTEcca1BnPk9G7YNg+LkLLwwf8lOuaLVerDPy/1AXz2xQKfTXgQF6jjDRP3SxeGPB udiLVjRgsLM+yN6kFCk+qX7wUAN22iY= X-MC-Unique: 849LbrCINWqYHXVt9o-PXg-1 X-Mimecast-MFC-AGG-ID: 849LbrCINWqYHXVt9o-PXg_1780903134 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Mon, 08 Jun 2026 11:16:43 +0400 Subject: [PATCH v2 25/33] ui/gtk: convert VirtualConsole storage from fixed array to GPtrArray MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260608-b4-ui-v2-25-9ea6355ea08f@redhat.com> References: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> In-Reply-To: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> To: qemu-devel@nongnu.org Cc: Paolo Bonzini , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Pierrick Bouvier , Fabiano Rosas , Laurent Vivier , Alex Williamson , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Peter Maydell , Akihiko Odaki , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= X-Developer-Signature: v=1; a=openpgp-sha256; l=7102; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=pHE1CzXAmbNSqrO3NmUz+0VLV7ErcfiuC7I5Qq7DCnQ=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqJmxMg7rT8dhR5+TcEWg3u4sXf1Jp3IKDxTnnY IviRjB7jkCJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCaiZsTAAKCRDa6OEJdZac 5e8fEACR4AsYpSO8BXWFyVGfr6rwBm0VuAgEs82Hsithru8yA7liafntqIgOLGsvApX1sfG+VmC vzk5rN4vP6E0KVmCX/sI1VHK4GlDJIzH2AJmqfvitN9NLAknrAfv23oqqTTLJdyW5lh/HZbeenn Tq4uspdcTtyQEGB2ISCfJCI2FwaRQ9+2T+VYQi+oxHUrwtUnC1mGO5rM9k473JWvkM8YOm2r+d8 4VyJadvAVRLIkctl26NgkpnTT5ZJyVpz093Lv7dhkHKMf0yfM/iUMAuNH98GePDkRZPg7Sx+Zel Dsu3LFGi3CY3c/M6INobYxUJNuWZ0ZeWdNthSVATReMbDKexuhYu91QFlNgvd+Ql9ikPQvsDGsi DJkOCfjkH6PTZsVSi2iQ4AdzMs3x0H7T/F8b0TkQD40xgaIkkHMfaaCrJ4rqch4dfuavkBG1Hjd MSIyVOrLNFpMoqOgx5t9pFT4sLMmV/s7gGB1MbfVeI7NrWKrIFmhiSawGbs7RcqmGWuL1JShbNf enl/N1VPODrrvF6YRZvSaJGL+vXlh0hqi6tAAIYf6q7JwXipjlqxJWVZz8jypFktCIX9eprs+ZE 04X4/pTISL1C/rgPVOG5b6gEmpbD1+8hGkyzjq3qZBZuNzPw6+21Fj1i9j9GiSfDrhNC1G9szGB inuOWx79fgTgixA== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.111 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 8 X-Spam_score: 0.8 X-Spam_bar: / X-Spam_report: (0.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1780903317665158500 Replace the fixed-size vc[MAX_VCS] with GPtrArray. This is a preparatory refactoring for console hotplug support, which needs to add/remove VCs dynamically. Signed-off-by: Marc-Andr=C3=A9 Lureau --- include/ui/gtk.h | 3 +- ui/gtk.c | 102 +++++++++++++++++++++++++++++++++++++++++++--------= ---- 2 files changed, 81 insertions(+), 24 deletions(-) diff --git a/include/ui/gtk.h b/include/ui/gtk.h index 5156a049509..4d54de97ea7 100644 --- a/include/ui/gtk.h +++ b/include/ui/gtk.h @@ -118,8 +118,7 @@ struct GtkDisplayState { GtkWidget *grab_item; GtkWidget *grab_on_hover_item; =20 - int nb_vcs; - VirtualConsole vc[MAX_VCS]; + GPtrArray *vcs; =20 GtkWidget *show_tabs_item; GtkWidget *untabify_item; diff --git a/ui/gtk.c b/ui/gtk.c index c26dc83ac3e..5bc2a04b43f 100644 --- a/ui/gtk.c +++ b/ui/gtk.c @@ -150,8 +150,8 @@ static VirtualConsole *gd_vc_find_by_menu(GtkDisplaySta= te *s) VirtualConsole *vc; gint i; =20 - for (i =3D 0; i < s->nb_vcs; i++) { - vc =3D &s->vc[i]; + for (i =3D 0; i < s->vcs->len; i++) { + vc =3D g_ptr_array_index(s->vcs, i); if (gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM(vc->menu_item))) { return vc; @@ -165,8 +165,11 @@ static VirtualConsole *gd_vc_find_by_page(GtkDisplaySt= ate *s, gint page) VirtualConsole *vc; gint i, p; =20 - for (i =3D 0; i < s->nb_vcs; i++) { - vc =3D &s->vc[i]; + if (!s->vcs) { + return NULL; + } + for (i =3D 0; i < s->vcs->len; i++) { + vc =3D g_ptr_array_index(s->vcs, i); p =3D gtk_notebook_page_num(GTK_NOTEBOOK(s->notebook), vc->tab_ite= m); if (p =3D=3D page) { return vc; @@ -247,8 +250,8 @@ static void gd_update_caption(GtkDisplayState *s) gtk_window_set_title(GTK_WINDOW(s->window), title); g_free(title); =20 - for (i =3D 0; i < s->nb_vcs; i++) { - VirtualConsole *vc =3D &s->vc[i]; + for (i =3D 0; i < s->vcs->len; i++) { + VirtualConsole *vc =3D g_ptr_array_index(s->vcs, i); =20 if (!vc->window) { continue; @@ -357,7 +360,7 @@ static void gtk_release_modifiers(GtkDisplayState *s) { VirtualConsole *vc =3D gd_vc_find_current(s); =20 - if (vc->type !=3D GD_VC_GFX || + if (!vc || vc->type !=3D GD_VC_GFX || !qemu_console_is_graphic(vc->gfx.dcl.con)) { return; } @@ -702,8 +705,8 @@ static void gd_mouse_mode_change(Notifier *notify, void= *data) gd_ungrab_pointer(s); } } - for (i =3D 0; i < s->nb_vcs; i++) { - VirtualConsole *vc =3D &s->vc[i]; + for (i =3D 0; i < s->vcs->len; i++) { + VirtualConsole *vc =3D g_ptr_array_index(s->vcs, i); gd_update_cursor(vc); } } @@ -2114,9 +2117,10 @@ static void gd_vcs_init(GtkDisplayState *s, GSList *= group, int i; =20 for (i =3D 0; i < nb_vcs; i++) { - VirtualConsole *vc =3D &s->vc[s->nb_vcs]; - group =3D gd_vc_vte_init(s, vc, vcs[i], s->nb_vcs, group, view_men= u); - s->nb_vcs++; + VirtualConsole *vc =3D g_new0(VirtualConsole, 1); + g_ptr_array_add(s->vcs, vc); + group =3D gd_vc_vte_init(s, vc, vcs[i], s->vcs->len - 1, + group, view_menu); } } #endif /* CONFIG_VTE */ @@ -2441,13 +2445,14 @@ static GtkWidget *gd_create_menu_view(GtkDisplaySta= te *s, DisplayOptions *opts) =20 /* gfx */ for (vc =3D 0;; vc++) { + VirtualConsole *v; con =3D qemu_console_lookup_by_index(vc); if (!con) { break; } - group =3D gd_vc_gfx_init(s, &s->vc[vc], con, - vc, group, view_menu); - s->nb_vcs++; + v =3D g_new0(VirtualConsole, 1); + g_ptr_array_add(s->vcs, v); + group =3D gd_vc_gfx_init(s, v, con, vc, group, view_menu); } =20 #if defined(CONFIG_VTE) @@ -2505,6 +2510,58 @@ static void gd_create_menus(GtkDisplayState *s, Disp= layOptions *opts) } =20 =20 +static void gd_vc_free(void *p) +{ + VirtualConsole *vc =3D p; + + switch (vc->type) { + case GD_VC_GFX: + qemu_console_unregister_listener(&vc->gfx.dcl); +#if defined(CONFIG_OPENGL) + if (display_opengl) { + qemu_console_set_display_gl_ctx(vc->gfx.dcl.con, NULL); + } + if (vc->gfx.esurface) { + eglDestroySurface(qemu_egl_display, vc->gfx.esurface); + } + if (vc->gfx.ectx) { + eglDestroyContext(qemu_egl_display, vc->gfx.ectx); + } + if (vc->gfx.gls) { + surface_gl_destroy_texture(vc->gfx.gls, vc->gfx.ds); + qemu_gl_fini_shader(vc->gfx.gls); + } + egl_fb_destroy(&vc->gfx.guest_fb); + egl_fb_destroy(&vc->gfx.win_fb); + egl_fb_destroy(&vc->gfx.cursor_fb); +#endif + qkbd_state_free(vc->gfx.kbd); + if (vc->gfx.surface) { + cairo_surface_destroy(vc->gfx.surface); + } + if (vc->gfx.convert) { + pixman_image_unref(vc->gfx.convert); + } + break; + case GD_VC_VTE: +#ifdef CONFIG_VTE + fifo8_destroy(&vc->vte.out_fifo); +#endif + break; + } + + if (vc->window) { + gtk_widget_destroy(vc->window); + } else if (vc->tab_item) { + gtk_widget_destroy(vc->tab_item); + } + if (vc->menu_item) { + gtk_widget_destroy(vc->menu_item); + } + g_free(vc->label); + g_free(vc); +} + static GtkDisplayState *gtk_display_state; static gboolean gtkinit; =20 @@ -2525,6 +2582,7 @@ static void gtk_display_init(DisplayState *ds, Displa= yOptions *opts) assert(opts->type =3D=3D DISPLAY_TYPE_GTK); s =3D g_malloc0(sizeof(*s)); gtk_display_state =3D s; + s->vcs =3D g_ptr_array_new_with_free_func(gd_vc_free); s->opts =3D opts; =20 theme =3D gtk_icon_theme_get_default(); @@ -2582,13 +2640,10 @@ static void gtk_display_init(DisplayState *ds, Disp= layOptions *opts) =20 gtk_widget_show_all(s->window); =20 - for (idx =3D 0;; idx++) { - QemuConsole *con =3D qemu_console_lookup_by_index(idx); - if (!con) { - break; - } - if (s->vc[idx].type =3D=3D GD_VC_GFX) { - gtk_widget_realize(s->vc[idx].gfx.drawing_area); + for (idx =3D 0; idx < s->vcs->len; idx++) { + VirtualConsole *v =3D g_ptr_array_index(s->vcs, idx); + if (v->type =3D=3D GD_VC_GFX) { + gtk_widget_realize(v->gfx.drawing_area); } } =20 @@ -2693,6 +2748,9 @@ static void gtk_display_cleanup(void) =20 qemu_remove_mouse_mode_change_notifier(&s->mouse_mode_notifier); gd_clipboard_cleanup(s); + g_signal_handlers_disconnect_by_func(s->notebook, + G_CALLBACK(gd_change_page), s); + g_clear_pointer(&s->vcs, g_ptr_array_unref); g_clear_pointer(&s->window, gtk_widget_destroy); g_clear_object(&s->null_cursor); g_clear_pointer(>k_display_state, g_free); --=20 2.54.0 From nobody Mon Jun 8 12:13:50 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1780903496; cv=none; d=zohomail.com; s=zohoarc; b=JEyVwIdISObYz1q56PEuGQ7DNwz4V1TuFlXNxiwlzsvDin5IA367QZ0s7puyWBM1Ef2k5+p86QGCvliDed+i8/wpmZViw0OTsfiTQpDzmg8Aj0kdqTdmQnzq+H09UErLVwl6RDJRObc3P7FmCbIb2AOvyqjYF3WC4BuMjzG07l8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780903496; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=+H65yUMS8QFZ0xHQwMaM4OHCR//vhW9gwvM6NoXdvEg=; b=ZMAEzEcZkIu7vsaMmxFwZioak0YLL230QoVKh7t2uy5GNCbuCdAUc50d3iT9uBcB7WCUNBK/StJW5IAEC6nIpCvuLM6A/NbCEP5ZI/MK1Jd7Jk/lc5ayRUaQ6Bc7AHs7ZHG6Itls/QrDmC95QeCY1oLdObwvFBjvHhcqRrErkrA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1780903496829519.7392515278436; Mon, 8 Jun 2026 00:24:56 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWUGr-00035h-Mp; Mon, 08 Jun 2026 03:19:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUGV-0002eJ-1C for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:19:20 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUGT-0000qr-Dn for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:19:18 -0400 Received: from mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-201-8eS3cnGiOi2_rEUPb7YuzA-1; Mon, 08 Jun 2026 03:19:00 -0400 Received: from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id B01EA19560A3; Mon, 8 Jun 2026 07:18:58 +0000 (UTC) Received: from localhost (unknown [10.44.22.16]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id C02593008B34; Mon, 8 Jun 2026 07:18:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780903156; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=+H65yUMS8QFZ0xHQwMaM4OHCR//vhW9gwvM6NoXdvEg=; b=ef/WV/BHz+nuMmXUrbd3oqVe2k0TtpAT99/E656pRf+5SQ6yYNMmWWvT06tjIrBiUCzBji EyqCM+dXeYfO9cL5BFTKSHF5usu+1wvHgYgXveHSg/nGN5568MWpKmuuxYg0kilhMbhZ6T Rxi+yfmwSM6g0GsfJsCsGWMrn2YNg9M= X-MC-Unique: 8eS3cnGiOi2_rEUPb7YuzA-1 X-Mimecast-MFC-AGG-ID: 8eS3cnGiOi2_rEUPb7YuzA_1780903138 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Mon, 08 Jun 2026 11:16:44 +0400 Subject: [PATCH v2 26/33] ui/gtk: move global display settings out of per-console init MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260608-b4-ui-v2-26-9ea6355ea08f@redhat.com> References: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> In-Reply-To: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> To: qemu-devel@nongnu.org Cc: Paolo Bonzini , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Pierrick Bouvier , Fabiano Rosas , Laurent Vivier , Alex Williamson , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Peter Maydell , Akihiko Odaki , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= X-Developer-Signature: v=1; a=openpgp-sha256; l=3093; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=T3Lt4cLR7Bg9GWH2jYmqVlSV1/LktAb6F8RB4zswtXA=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqJmxMll2gy036aC14VVKW29DciojsX8UtOM05Q IgjlDUM0DiJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCaiZsTAAKCRDa6OEJdZac 5Xe6D/wOlzc4AskBiy2Bm+/yc0foFA0kpcJNppbM7qQL//jnz/JYSTX8JETnAKwdh6znH7SsRT5 yweTn/IM9lxWtHMbM/qlc9hxHd/oa+s2wZ4NWpJab4zf0gidUiLwfrKt75PM9hRB6V5LZimyCU+ KZwcPkpY+Iirphuger/DvHx7IeN7X2ZrCB2hMLBb873KYeTX5k0373qNiL37xl/7613RLY0AXKB KmkqjS5oBJhWh3KVSbsoQT7KxPuSBCNtTLdAeWHvkntq+nK+w/1f3AUsu5hMiwYSFqFwmsOVcx0 L7YAhZaJIfKffn3H23Kkk5g1TlAKSbNcI3Mzho2GWwUzYHQtuiIXEe258bj089lUmiqP8swAQgB 6h/1IjP6zq98RjFSunJob7A7h5N44jdlkevSRyoxU/lg9qRhFGqokCdiMxQFAvquY3osHvOzwEc vy8TtLXmXARt+2u5Bk9rc+tyHL3KpG5643gNl43XHv/Rn/0GhhPv/X5fNLq+OYJRD+afHHb370A LVtqVCub1lONSrWx34ZfR11oT+jGfH0a/p7WqIjOG00iNrlBJHkJbzOf1q6do3GIJez3OVzZJCB TzRaCUpoSrTdM3TebfoWLlmL8VvxYyMQIj/Z3TtL8t+yuqbbr3Tu6YK4SIoIzzKtReyJBNvcknD HbHQKW7+SUHGd2g== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.4 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 8 X-Spam_score: 0.8 X-Spam_bar: / X-Spam_report: (0.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1780903498653154100 Move zoom_to_fit, keep_aspect_ratio and touch_slots initialisation from gd_vc_gfx_init() to gd_create_menu_view(). These are global display settings that should be set once after all consoles are created, not repeated on every per-console init (where the last iteration's values silently win). Signed-off-by: Marc-Andr=C3=A9 Lureau --- ui/gtk.c | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/ui/gtk.c b/ui/gtk.c index 5bc2a04b43f..e86b618f770 100644 --- a/ui/gtk.c +++ b/ui/gtk.c @@ -2269,8 +2269,6 @@ static GSList *gd_vc_gfx_init(GtkDisplayState *s, Vir= tualConsole *vc, GSList *group, GtkWidget *view_menu) { const DisplayChangeListenerOps *ops =3D &dcl_ops; - bool zoom_to_fit =3D false; - int i; =20 vc->label =3D qemu_console_get_label(con); vc->s =3D s; @@ -2350,26 +2348,6 @@ static GSList *gd_vc_gfx_init(GtkDisplayState *s, Vi= rtualConsole *vc, gd_connect_vc_gfx_signals(vc); group =3D gd_vc_menu_init(s, vc, idx, group, view_menu); =20 - if (qemu_console_ui_info_supported(vc->gfx.dcl.con)) { - zoom_to_fit =3D true; - } - if (s->opts->u.gtk.has_zoom_to_fit) { - zoom_to_fit =3D s->opts->u.gtk.zoom_to_fit; - } - if (zoom_to_fit) { - gtk_menu_item_activate(GTK_MENU_ITEM(s->zoom_fit_item)); - s->free_scale =3D true; - } - - s->keep_aspect_ratio =3D true; - if (s->opts->u.gtk.has_keep_aspect_ratio) - s->keep_aspect_ratio =3D s->opts->u.gtk.keep_aspect_ratio; - - for (i =3D 0; i < INPUT_EVENT_SLOTS_MAX; i++) { - struct touch_slot *slot =3D &touch_slots[i]; - slot->tracking_id =3D -1; - } - return group; } =20 @@ -2379,7 +2357,8 @@ static GtkWidget *gd_create_menu_view(GtkDisplayState= *s, DisplayOptions *opts) GtkWidget *view_menu; GtkWidget *separator; QemuConsole *con; - int vc; + bool zoom_to_fit =3D false; + int vc, i; =20 view_menu =3D gtk_menu_new(); gtk_menu_set_accel_group(GTK_MENU(view_menu), s->accel_group); @@ -2453,6 +2432,27 @@ static GtkWidget *gd_create_menu_view(GtkDisplayStat= e *s, DisplayOptions *opts) v =3D g_new0(VirtualConsole, 1); g_ptr_array_add(s->vcs, v); group =3D gd_vc_gfx_init(s, v, con, vc, group, view_menu); + if (qemu_console_ui_info_supported(con)) { + zoom_to_fit =3D true; + } + } + + if (s->opts->u.gtk.has_zoom_to_fit) { + zoom_to_fit =3D s->opts->u.gtk.zoom_to_fit; + } + if (zoom_to_fit) { + gtk_menu_item_activate(GTK_MENU_ITEM(s->zoom_fit_item)); + s->free_scale =3D true; + } + + s->keep_aspect_ratio =3D true; + if (s->opts->u.gtk.has_keep_aspect_ratio) { + s->keep_aspect_ratio =3D s->opts->u.gtk.keep_aspect_ratio; + } + + for (i =3D 0; i < INPUT_EVENT_SLOTS_MAX; i++) { + struct touch_slot *slot =3D &touch_slots[i]; + slot->tracking_id =3D -1; } =20 #if defined(CONFIG_VTE) --=20 2.54.0 From nobody Mon Jun 8 12:13:50 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1780903405; cv=none; d=zohomail.com; s=zohoarc; b=WZP8IM4EQykoZmTwSIHlcyKBYkiuDw/yBLPDoitFFE9qAdsp4ZPwjExu/vuntU81cR6zc1iVi/BfLBITYKxx2vBaULtC0DGmmcD+27FRiTIQiv9UW3w85BBetQaOrderczXeD8L3/veHsLgBUvKq7e9MnhFpAOQZbvY3UDihRPE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780903405; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=EfZGD2CKF+sg59f12dKDT06fKxquYa1/bhpSzhpSmNo=; b=NI3xBCieJavSQ7p/nF8T+KZNXvfFuR/7wqI8gKSwccle/Be+dOmUpzf4+sgd6BwmwS+3Eiv+eBcsLogLu64iomBtbny3i79BFMePvRX0jz8Y/ibK035nCtof81YE2SIuwgfB0waICTiMxkjKGE+ErTOKPyWkz1Bmhvpd+kAPrZI= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1780903405464521.8255854364979; Mon, 8 Jun 2026 00:23:25 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWUGr-00035f-Mw; Mon, 08 Jun 2026 03:19:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUGU-0002d8-El for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:19:20 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUGR-0000pK-5x for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:19:18 -0400 Received: from mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-79-mDBF2aNePCuMU0SJPJy_dQ-1; Mon, 08 Jun 2026 03:19:05 -0400 Received: from mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.111]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 9EB8E19560A5; Mon, 8 Jun 2026 07:19:03 +0000 (UTC) Received: from localhost (unknown [10.44.22.16]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id AB8141800347; Mon, 8 Jun 2026 07:19:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780903154; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=EfZGD2CKF+sg59f12dKDT06fKxquYa1/bhpSzhpSmNo=; b=iJSlMacgy0F7SzjvVWO64mRHrpgUZcB9Hn3ZAcPfKnI3w8C9olLzRcFqzVMslJ8LKWtKwp 2i2mery9togmv6Vqo76535dkyOh2rnheYfdWIMTYm8uj2tWTPHoIZ2R/3E4WKclCfgW5lQ 4EieUmoMOC2QMNU5sbO0Pn+/q9MuxPw= X-MC-Unique: mDBF2aNePCuMU0SJPJy_dQ-1 X-Mimecast-MFC-AGG-ID: mDBF2aNePCuMU0SJPJy_dQ_1780903143 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Mon, 08 Jun 2026 11:16:45 +0400 Subject: [PATCH v2 27/33] ui/gtk: fix tab re-insertion order on window close MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260608-b4-ui-v2-27-9ea6355ea08f@redhat.com> References: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> In-Reply-To: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> To: qemu-devel@nongnu.org Cc: Paolo Bonzini , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Pierrick Bouvier , Fabiano Rosas , Laurent Vivier , Alex Williamson , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Peter Maydell , Akihiko Odaki , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= X-Developer-Signature: v=1; a=openpgp-sha256; l=1954; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=IQjCpCJjmG96ugeyLyDomxPwrpESOHbu7i2WdeA4Yk0=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqJmxNrmyauMf3HTPqpAmUB5ZSJHVtaRR9O5vSH Wujf/lHoMSJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCaiZsTQAKCRDa6OEJdZac 5VBgEACQeNQMwJ5paLJVoiwINQnKPdSwA5o5kM/kehbMoraWHNGKloDrGmQ1y8ZJgfPbmSHgFCC LK99TwHlQA7+lSFXE8BJ6fLR7LAXx+8h4ysQ4/3JG/HW4BcAoalLVCS0pcNon30RTw95WhLehKc widx5MZnd6EacyuUUpCBiXLEWqSScg1Ssv9jj9Z5BPgoMrOOtq8McvE7ryPTA8LikomgzEs60dc 0ex5YL0JFFR6zbPRG7btSoeV7rimoYaxBVm0gmxi2PiVmV+GZP8z43VdAbDDNzYDtNtxUkcPXi4 IE2VyITbMlqcdyR6LkhZcX4QKO2c9Lm79w/6xLNq8VKUcI5Eb8134wdAgKSzgt8MnCvzFX46aO7 BLHOI8caG5wkXhi5ZzzGB0zL1zr7zXzPI9pLzFBa+IcjdRaINdhHvPrQD3daXEIUL5AQ5ER4yQo Y2BtxssDex3topOjRddYVHgBMbhkINbKpbtESMCcWBYPdBscvVRRSELJYD3nKRR/fVcfqmFxpdc BKsMgvvokZMhYLqTdyNSjJbChIaMxNq3Zrr+wuvfCVj0S+N4/tCnRXl/jZzI5hhIyNAOz4Ao/gI H5aMYDZQOXGV0xkKYFQhlO3O4ntXyB5AaDn6Kzug/kugv3oRqiFOsAe+wIc7lzm8YvwpF8CzIA3 hCHjRcOZYU2iHoA== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.111 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 8 X-Spam_score: 0.8 X-Spam_bar: / X-Spam_report: (0.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1780903407087154100 Add gd_vc_notebook_pos() which computes the correct notebook position for a console by counting only non-detached (non-windowed) tabs before it. Use it in gd_tab_window_close() so a re-attached tab is inserted at its logical position rather than appended at the end. Signed-off-by: Marc-Andr=C3=A9 Lureau --- ui/gtk.c | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/ui/gtk.c b/ui/gtk.c index e86b618f770..32f3a0805e1 100644 --- a/ui/gtk.c +++ b/ui/gtk.c @@ -1464,16 +1464,37 @@ static void gd_menu_show_tabs(GtkMenuItem *item, vo= id *opaque) gd_update_windowsize(vc); } =20 +static int gd_vc_notebook_pos(GtkDisplayState *s, VirtualConsole *target) +{ + int pos =3D 0; + guint i; + + for (i =3D 0; i < s->vcs->len; i++) { + VirtualConsole *vc =3D g_ptr_array_index(s->vcs, i); + if (vc =3D=3D target) { + return pos; + } + if (!vc->window) { + pos++; + } + } + g_assert_not_reached(); +} + static gboolean gd_tab_window_close(GtkWidget *widget, GdkEvent *event, void *opaque) { VirtualConsole *vc =3D opaque; GtkDisplayState *s =3D vc->s; + int page; =20 gtk_widget_set_sensitive(vc->menu_item, true); - gd_widget_reparent(vc->window, s->notebook, vc->tab_item); - gtk_notebook_set_tab_label_text(GTK_NOTEBOOK(s->notebook), - vc->tab_item, vc->label); + g_object_ref(vc->tab_item); + gtk_container_remove(GTK_CONTAINER(vc->window), vc->tab_item); + page =3D gd_vc_notebook_pos(s, vc); + gtk_notebook_insert_page(GTK_NOTEBOOK(s->notebook), + vc->tab_item, gtk_label_new(vc->label), page); + g_object_unref(vc->tab_item); gtk_widget_destroy(vc->window); vc->window =3D NULL; #if defined(CONFIG_OPENGL) --=20 2.54.0 From nobody Mon Jun 8 12:13:50 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1780903342; cv=none; d=zohomail.com; s=zohoarc; b=ZeHgPNQGa89CXBsd0S2K2+HlhHkpbD10QKo8vQ+iqJiR+tzCMOVjTn2DRKP+474Q168uh56IPUaeENx8JbwvhSyYz0ZkXQL0Fj0JlrRoJ/W4tiRJcl+1I+D42FzHVKaB3/7hqgavKEXFodj3W4I8JW2VQ0mAXWC8SRnfr6KS/fc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780903342; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=AsVrsiZ0meaa/YoI6FZuo3X+M9wXLZrkZH/oW8MzyVc=; b=VColt4t4JZAYqWutQKvRLUa5uCjp5A7LzB3JUmPcnkPxSf+iWtdfRahrtR/c2yAjjGpAOPFDe8AZ+a/xoLsSKUbzt/Fi6TAtH4vFCvpRyVQRWMDSUhV+wsGtbBvb+QIJ7M9s7w99GCdTETBALawaJ13FVyda0m1Yq7Xxd6LZ4y0= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1780903342042669.3931095220529; Mon, 8 Jun 2026 00:22:22 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWUGn-0002uG-F0; Mon, 08 Jun 2026 03:19:40 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUGT-0002Xy-8t for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:19:17 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUGQ-0000oJ-Hi for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:19:16 -0400 Received: from mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-576-24XivFVfMI2Uy6i8yPv5bw-1; Mon, 08 Jun 2026 03:19:10 -0400 Received: from mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.93]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 48F3C195609E; Mon, 8 Jun 2026 07:19:09 +0000 (UTC) Received: from localhost (unknown [10.44.22.16]) by mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id CDB271800367; Mon, 8 Jun 2026 07:19:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780903153; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=AsVrsiZ0meaa/YoI6FZuo3X+M9wXLZrkZH/oW8MzyVc=; b=LyfK+rdX90cd+br88tB/Lxp1UfB3q3kweplpNMsY9PZsj15v5H7ynxXUuq79aQjkp89EiL cL2I4Pjy7h9+xtg49MGKX3DtZxx57W0dXJ6II169JJ4W/KcZLX0GRRNx2bNbKj6EeS/lCK huxSChgv20jnfv49Qd3krF+GoyNhFYU= X-MC-Unique: 24XivFVfMI2Uy6i8yPv5bw-1 X-Mimecast-MFC-AGG-ID: 24XivFVfMI2Uy6i8yPv5bw_1780903149 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Mon, 08 Jun 2026 11:16:46 +0400 Subject: [PATCH v2 28/33] ui/gtk: centralize console menu and shortcut management MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260608-b4-ui-v2-28-9ea6355ea08f@redhat.com> References: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> In-Reply-To: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> To: qemu-devel@nongnu.org Cc: Paolo Bonzini , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Pierrick Bouvier , Fabiano Rosas , Laurent Vivier , Alex Williamson , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Peter Maydell , Akihiko Odaki , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= X-Developer-Signature: v=1; a=openpgp-sha256; l=11639; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=ETEiMbg3kqrPMa7BTvXAoJayKExU1kpudPUuavSq+ko=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqJmxNGulz/AO/ph+KFn30T9ViEcXdMi5KuNVgw GYRAjTS4VKJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCaiZsTQAKCRDa6OEJdZac 5bkIEACtzk5YL3iBIhfWqK4nWZZ9zoTfxXt6//O51F3X0oJ2Aj8eoOhqHmeiFWNUoNXL2eP/sFP 0fyjCAklay0QUTYRLPl997+GqnR6bwvgUCjeQA2z2rqhf/upCt6JpV4//OHqs3ljxDAiK3VkBuq rpzjaMc5ZAd1wzBjPMpC10/kVkA/CScuSxWMvW7Z/iFMEr1Ef1IHMWZiHhiH/CIqKwmLW/zyxjq bVEvAjp7VesRKNM0iYWTgIrlzLPCDzFEXFbLtYJod++UM5/W88PRCo8hVRjTPbEX8SHq6RteKos xyo63HN0pbJNPpPl9V1kMYrTcLC2VAUrPsA2XNUadYcFne1lyOz5E3yQm51yAjj3AcGJAbE4woo uWRQN9Q64VF25bXlPL1bE3/776Sm3cq9EtGNJvvUvyJMm6sJMhX/0XZROHPZkczk1bO45q+wNU5 sb+1v9VdkKKhR/vQQ8SRpHmUaSBaAMy08TNcDot33Q+Hm+1dmr7ddYBL+04ps/+CcjUN3wQUzB9 2rIoslCMINMZPjsMz+nHu7bGVeRAaK7T/BbWEyIXoxXpTWYdkGUEomL/FmRYsWT/nkU6oZUnDFU 4C6wAqcXXQTnH/Ku7k03TVWhAAFuBrEFJz+pl6a6JjhfSiT08+gi9WSdrtJxlZomWuT3xD4AVCY PajJX/rNdDKuThg== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.93 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 8 X-Spam_score: 0.8 X-Spam_bar: / X-Spam_report: (0.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1780903343831158500 Replace the per-console gd_vc_menu_init() with gd_rebuild_vc_menu() that tears down and rebuilds all console radio menu items and Ctrl+Alt+N accelerators at once. This is called from initialization and whenever consoles are detached or reattached. Shortcuts now skip detached (windowed) consoles, so they always map to reachable tabs. Rename gd_vc_gfx_init() to add_gfx_console() and simplify the init function signatures now that menu creation is decoupled. Signed-off-by: Marc-Andr=C3=A9 Lureau --- include/ui/gtk.h | 1 + ui/gtk.c | 127 ++++++++++++++++++++++++++++++++++++---------------= ---- 2 files changed, 85 insertions(+), 43 deletions(-) diff --git a/include/ui/gtk.h b/include/ui/gtk.h index 4d54de97ea7..b0be5070795 100644 --- a/include/ui/gtk.h +++ b/include/ui/gtk.h @@ -120,6 +120,7 @@ struct GtkDisplayState { =20 GPtrArray *vcs; =20 + GtkWidget *vc_menu_separator; GtkWidget *show_tabs_item; GtkWidget *untabify_item; GtkWidget *show_menubar_item; diff --git a/ui/gtk.c b/ui/gtk.c index 32f3a0805e1..6325704c397 100644 --- a/ui/gtk.c +++ b/ui/gtk.c @@ -142,6 +142,7 @@ static void gd_grab_pointer(VirtualConsole *vc, const c= har *reason); static void gd_ungrab_pointer(GtkDisplayState *s); static void gd_grab_keyboard(VirtualConsole *vc, const char *reason); static void gd_ungrab_keyboard(GtkDisplayState *s); +static void gd_rebuild_vc_menu(GtkDisplayState *s); =20 /** Utility Functions **/ =20 @@ -1488,7 +1489,6 @@ static gboolean gd_tab_window_close(GtkWidget *widget= , GdkEvent *event, GtkDisplayState *s =3D vc->s; int page; =20 - gtk_widget_set_sensitive(vc->menu_item, true); g_object_ref(vc->tab_item); gtk_container_remove(GTK_CONTAINER(vc->window), vc->tab_item); page =3D gd_vc_notebook_pos(s, vc); @@ -1508,6 +1508,8 @@ static gboolean gd_tab_window_close(GtkWidget *widget= , GdkEvent *event, } #endif =20 + gd_rebuild_vc_menu(s); + if (vc =3D=3D gd_vc_find_by_menu(s)) { gtk_widget_grab_focus(vc->focus); } @@ -1539,7 +1541,6 @@ static void gd_menu_untabify(GtkMenuItem *item, void = *opaque) FALSE); } if (!vc->window) { - gtk_widget_set_sensitive(vc->menu_item, false); vc->window =3D gtk_window_new(GTK_WINDOW_TOPLEVEL); #if defined(CONFIG_OPENGL) if (vc->gfx.esurface) { @@ -1566,6 +1567,7 @@ static void gd_menu_untabify(GtkMenuItem *item, void = *opaque) gtk_accel_group_connect(ag, GDK_KEY_g, HOTKEY_MODIFIERS, 0, cb= ); } =20 + gd_rebuild_vc_menu(s); gd_update_geometry_hints(vc); gd_update_caption(s); } @@ -1906,22 +1908,73 @@ static gboolean gd_configure(GtkWidget *widget, =20 /** Virtual Console Callbacks **/ =20 -static GSList *gd_vc_menu_init(GtkDisplayState *s, VirtualConsole *vc, - int idx, GSList *group, GtkWidget *view_men= u) +static void gd_rebuild_vc_menu(GtkDisplayState *s) { - vc->menu_item =3D gtk_radio_menu_item_new_with_mnemonic(group, vc->lab= el); - gtk_accel_group_connect(s->accel_group, GDK_KEY_1 + idx, - HOTKEY_MODIFIERS, 0, - g_cclosure_new_swap(G_CALLBACK(gd_accel_switch_vc), vc, NULL)); - gtk_accel_label_set_accel( - GTK_ACCEL_LABEL(gtk_bin_get_child(GTK_BIN(vc->menu_item))), - GDK_KEY_1 + idx, HOTKEY_MODIFIERS); + GSList *group =3D NULL; + VirtualConsole *vc; + GList *children; + gint insert_pos; + int shortcut_idx =3D 0; + guint i; + + for (i =3D 0; i < s->vcs->len; i++) { + vc =3D g_ptr_array_index(s->vcs, i); + if (vc->menu_item) { + gtk_widget_destroy(vc->menu_item); + vc->menu_item =3D NULL; + } + } + + for (i =3D 0; i < 9; i++) { + gtk_accel_group_disconnect_key(s->accel_group, + GDK_KEY_1 + i, HOTKEY_MODIFIERS); + } + + /* find insertion position (just before vc_menu_separator) */ + children =3D gtk_container_get_children(GTK_CONTAINER(s->view_menu)); + insert_pos =3D g_list_index(children, s->vc_menu_separator); + g_list_free(children); + + /* create new menu items for each console */ + for (i =3D 0; i < s->vcs->len; i++) { + vc =3D g_ptr_array_index(s->vcs, i); =20 - g_signal_connect(vc->menu_item, "activate", - G_CALLBACK(gd_menu_switch_vc), s); - gtk_menu_shell_append(GTK_MENU_SHELL(view_menu), vc->menu_item); + vc->menu_item =3D gtk_radio_menu_item_new_with_mnemonic(group, + vc->label); + group =3D gtk_radio_menu_item_get_group( + GTK_RADIO_MENU_ITEM(vc->menu_item)); + + if (vc->window) { + gtk_widget_set_sensitive(vc->menu_item, false); + } else if (shortcut_idx < 9) { + guint key =3D GDK_KEY_1 + shortcut_idx; + gtk_accel_group_connect(s->accel_group, key, + HOTKEY_MODIFIERS, 0, + g_cclosure_new_swap(G_CALLBACK(gd_accel_switch_vc), + vc, NULL)); + gtk_accel_label_set_accel( + GTK_ACCEL_LABEL(gtk_bin_get_child(GTK_BIN(vc->menu_ite= m))), + key, HOTKEY_MODIFIERS); + shortcut_idx++; + } =20 - return gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(vc->menu_item= )); + g_signal_connect(vc->menu_item, "activate", + G_CALLBACK(gd_menu_switch_vc), s); + gtk_menu_shell_insert(GTK_MENU_SHELL(s->view_menu), + vc->menu_item, insert_pos + i); + gtk_widget_show(vc->menu_item); + } + + /* sync active menu item with current notebook page */ + vc =3D gd_vc_find_current(s); + if (vc && vc->menu_item) { + g_signal_handlers_block_by_func(vc->menu_item, + gd_menu_switch_vc, s); + gtk_check_menu_item_set_active( + GTK_CHECK_MENU_ITEM(vc->menu_item), TRUE); + g_signal_handlers_unblock_by_func(vc->menu_item, + gd_menu_switch_vc, s); + } } =20 #if defined(CONFIG_VTE) @@ -2064,9 +2117,8 @@ static gboolean gd_vc_in(VteTerminal *terminal, gchar= *text, guint size, return TRUE; } =20 -static GSList *gd_vc_vte_init(GtkDisplayState *s, VirtualConsole *vc, - Chardev *chr, int idx, - GSList *group, GtkWidget *view_menu) +static void gd_vc_vte_init(GtkDisplayState *s, VirtualConsole *vc, + Chardev *chr, int idx) { char buffer[32]; GtkWidget *box; @@ -2082,7 +2134,6 @@ static GSList *gd_vc_vte_init(GtkDisplayState *s, Vir= tualConsole *vc, =20 snprintf(buffer, sizeof(buffer), "vc%d", idx); vc->label =3D g_strdup(vc->vte.chr->label ? : buffer); - group =3D gd_vc_menu_init(s, vc, idx, group, view_menu); =20 vc->vte.terminal =3D vte_terminal_new(); g_signal_connect(vc->vte.terminal, "commit", G_CALLBACK(gd_vc_in), vc); @@ -2128,20 +2179,16 @@ static GSList *gd_vc_vte_init(GtkDisplayState *s, V= irtualConsole *vc, gtk_label_new(vc->label)); =20 qemu_chr_be_event(vc->vte.chr, CHR_EVENT_OPENED); - - return group; } =20 -static void gd_vcs_init(GtkDisplayState *s, GSList *group, - GtkWidget *view_menu) +static void gd_vcs_init(GtkDisplayState *s) { int i; =20 for (i =3D 0; i < nb_vcs; i++) { VirtualConsole *vc =3D g_new0(VirtualConsole, 1); g_ptr_array_add(s->vcs, vc); - group =3D gd_vc_vte_init(s, vc, vcs[i], s->vcs->len - 1, - group, view_menu); + gd_vc_vte_init(s, vc, vcs[i], s->vcs->len - 1); } } #endif /* CONFIG_VTE */ @@ -2285,12 +2332,12 @@ static bool gd_scale_valid(double scale) return scale >=3D VC_SCALE_MIN && scale <=3D VC_SCALE_MAX; } =20 -static GSList *gd_vc_gfx_init(GtkDisplayState *s, VirtualConsole *vc, - QemuConsole *con, int idx, - GSList *group, GtkWidget *view_menu) +static void add_gfx_console(GtkDisplayState *s, QemuConsole *con) { + VirtualConsole *vc =3D g_new0(VirtualConsole, 1); const DisplayChangeListenerOps *ops =3D &dcl_ops; =20 + g_ptr_array_add(s->vcs, vc); vc->label =3D qemu_console_get_label(con); vc->s =3D s; vc->gfx.preferred_scale =3D 1.0; @@ -2367,14 +2414,10 @@ static GSList *gd_vc_gfx_init(GtkDisplayState *s, V= irtualConsole *vc, qemu_console_register_listener(con, &vc->gfx.dcl, ops); =20 gd_connect_vc_gfx_signals(vc); - group =3D gd_vc_menu_init(s, vc, idx, group, view_menu); - - return group; } =20 -static GtkWidget *gd_create_menu_view(GtkDisplayState *s, DisplayOptions *= opts) +static void gd_create_menu_view(GtkDisplayState *s, DisplayOptions *opts) { - GSList *group =3D NULL; GtkWidget *view_menu; GtkWidget *separator; QemuConsole *con; @@ -2382,6 +2425,7 @@ static GtkWidget *gd_create_menu_view(GtkDisplayState= *s, DisplayOptions *opts) int vc, i; =20 view_menu =3D gtk_menu_new(); + s->view_menu =3D view_menu; gtk_menu_set_accel_group(GTK_MENU(view_menu), s->accel_group); =20 s->full_screen_item =3D gtk_menu_item_new_with_mnemonic(_("_Fullscreen= ")); @@ -2445,14 +2489,11 @@ static GtkWidget *gd_create_menu_view(GtkDisplaySta= te *s, DisplayOptions *opts) =20 /* gfx */ for (vc =3D 0;; vc++) { - VirtualConsole *v; con =3D qemu_console_lookup_by_index(vc); if (!con) { break; } - v =3D g_new0(VirtualConsole, 1); - g_ptr_array_add(s->vcs, v); - group =3D gd_vc_gfx_init(s, v, con, vc, group, view_menu); + add_gfx_console(s, con); if (qemu_console_ui_info_supported(con)) { zoom_to_fit =3D true; } @@ -2478,11 +2519,13 @@ static GtkWidget *gd_create_menu_view(GtkDisplaySta= te *s, DisplayOptions *opts) =20 #if defined(CONFIG_VTE) /* vte */ - gd_vcs_init(s, group, view_menu); + gd_vcs_init(s); #endif =20 - separator =3D gtk_separator_menu_item_new(); - gtk_menu_shell_append(GTK_MENU_SHELL(view_menu), separator); + s->vc_menu_separator =3D gtk_separator_menu_item_new(); + gtk_menu_shell_append(GTK_MENU_SHELL(view_menu), s->vc_menu_separator); + + gd_rebuild_vc_menu(s); =20 s->show_tabs_item =3D gtk_check_menu_item_new_with_mnemonic(_("Show _T= abs")); gtk_menu_shell_append(GTK_MENU_SHELL(view_menu), s->show_tabs_item); @@ -2501,8 +2544,6 @@ static GtkWidget *gd_create_menu_view(GtkDisplayState= *s, DisplayOptions *opts) GTK_ACCEL_LABEL(gtk_bin_get_child(GTK_BIN(s->show_menubar_item= ))), GDK_KEY_m, HOTKEY_MODIFIERS); gtk_menu_shell_append(GTK_MENU_SHELL(view_menu), s->show_menubar_item); - - return view_menu; } =20 static void gd_create_menus(GtkDisplayState *s, DisplayOptions *opts) @@ -2511,7 +2552,7 @@ static void gd_create_menus(GtkDisplayState *s, Displ= ayOptions *opts) =20 s->accel_group =3D gtk_accel_group_new(); s->machine_menu =3D gd_create_menu_machine(s); - s->view_menu =3D gd_create_menu_view(s, opts); + gd_create_menu_view(s, opts); =20 s->machine_menu_item =3D gtk_menu_item_new_with_mnemonic(_("_Machine")= ); gtk_menu_item_set_submenu(GTK_MENU_ITEM(s->machine_menu_item), --=20 2.54.0 From nobody Mon Jun 8 12:13:50 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1780903403; cv=none; d=zohomail.com; s=zohoarc; b=i8wzZaJHA9B9oCSVKP82Lh3gXoMLiu/JfNohRR5W6rG3ELOFoqlkVAn+Lc7kdZ20tRrOQkG65xHAElQLkMhzHMXRxGp/dVZbtZugoPOMSM+m/jT5i+NYjxGjFturUYR+0j+VuXF0QBy2QUvw2fJsRGNpxw/s3E7aGBWJQqmQH/4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780903403; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=vSo12UqAozNyKPNf2wzj6CS1smHf5IC3QLcPig7r7q0=; b=Eh3vk9jB2l4OfPg88pJUfM8W+2Y+sbgTlOaMAcMmqQFf93eGoHlNYInTXIfg+Hw3KS++yyuJtvBkWPm0cbqxRNdWGqU+ujcJC66WoLvY6FK5Imjk2rAP9gVyac8h/IejQRdG9hjee4ahlK9RkQCJD/As42FlnpYWL8KQL0X9sxw= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 178090340348961.213164805474435; Mon, 8 Jun 2026 00:23:23 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWUHJ-0003aH-I2; Mon, 08 Jun 2026 03:20:11 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUGe-00032i-69 for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:19:37 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUGZ-0000xU-Sd for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:19:26 -0400 Received: from mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-47-t78_EQ_ZOHGC5uljl6PE2Q-1; Mon, 08 Jun 2026 03:19:16 -0400 Received: from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.17]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 063681956094; Mon, 8 Jun 2026 07:19:15 +0000 (UTC) Received: from localhost (unknown [10.44.22.16]) by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 87E151956053; Mon, 8 Jun 2026 07:19:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780903163; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=vSo12UqAozNyKPNf2wzj6CS1smHf5IC3QLcPig7r7q0=; b=dpONcwV4MpGPxsqktx3oou70/PuBq5ZfuoFsu+l3+aZiegL2w3zIt8T9bsNhHIcoj0shBc ClhSq8bwclHAmJZS89TUmvbEmMfHL2HmL2aS3l+9XAYOqJ6ltvkrO8o7P45nhs7BpKqPx3 rHfYezM80RXZsqdVQHx2euTmVcNMv68= X-MC-Unique: t78_EQ_ZOHGC5uljl6PE2Q-1 X-Mimecast-MFC-AGG-ID: t78_EQ_ZOHGC5uljl6PE2Q_1780903155 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Mon, 08 Jun 2026 11:16:47 +0400 Subject: [PATCH v2 29/33] ui/gtk: handle console hotplug/unplug events MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260608-b4-ui-v2-29-9ea6355ea08f@redhat.com> References: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> In-Reply-To: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> To: qemu-devel@nongnu.org Cc: Paolo Bonzini , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Pierrick Bouvier , Fabiano Rosas , Laurent Vivier , Alex Williamson , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Peter Maydell , Akihiko Odaki , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= X-Developer-Signature: v=1; a=openpgp-sha256; l=4053; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=oS1XDhLVUJSxwsHHpY/8zKXncSL2PFHxGoOAAs9N4C0=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqJmxN1O8HE9QddYSfgDzMrGoVOY33tUiIcfIGn fVLNzeX0iuJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCaiZsTQAKCRDa6OEJdZac 5XCkD/4oKdHhDz9H/f5ygcsfV5BO+1C/o4tZ5Yd+Mp3pVPqjMYhyRzwLEbeGiCDeWaDE/fAwirf gDzrkXnzO9fPgBRrcg76IQ7EIlWGXcW/cJ5O6zXncMSAd/nQoQq40ygQRf08iDvwRVNuZfwJs5j o6iYL2Ns5HfB9FcRh+EAVcefawYyumEoWRsRcmt7v3QDimHgFaKmS2b08+z1jx5KmQz2RLkNP6j Yf1422mKwxL66Ujxb8CN4TUnk4xtmXcJM/7hr449+PDWPjEBKxrtL3zxJkL7i++3ssDAek25cUN ku9AjrUkI8FB8GdAUae1Zly2cIgmm7jb6wq+ZMb4OiNMb3M34AIsLCoLJAI2X5czNStz1ijFylN X0ONLcxRqvRz7kaQWLFLSQZgicvzNPGFqE/cxYNCoA5Rc4+YRoouQaCshKXcD9WP6iiM2oZhRMA KSgf53m46WQ2lNRTAYmSJKTzthgIJLuDg+cwlrHHIQdoYQ9BccV+oZtFHa3//QLOY2+tL3W9rz2 YxseUtnsUVgQ4hRSrF1xXx4FB7/uLBbWOR7CSAbJMAC3o20b6fKp3JL6+p3yeJmANPQ2Nz7JfW3 rXjl/q0p0J5g5j8xhBCRNXQcDBbDPJZv/4pNY1qAae/3DogqHFJcpd8NagZTabMHLIEdUs2WWee uS9+qp/pvWyfmcA== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.17 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 8 X-Spam_score: 0.8 X-Spam_bar: / X-Spam_report: (0.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1780903405210154100 Register a console notifier so the GTK display dynamically creates and destroys VirtualConsole tabs when graphic consoles are added or removed at runtime (e.g. vfio-pci with display=3Don hotplug). Add skips consoles that already have a VC binding, remove skips unknown consoles. Signed-off-by: Marc-Andr=C3=A9 Lureau --- include/ui/gtk.h | 1 + ui/gtk.c | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++= +++- 2 files changed, 77 insertions(+), 1 deletion(-) diff --git a/include/ui/gtk.h b/include/ui/gtk.h index b0be5070795..6cb611ce474 100644 --- a/include/ui/gtk.h +++ b/include/ui/gtk.h @@ -140,6 +140,7 @@ struct GtkDisplayState { =20 GdkCursor *null_cursor; Notifier mouse_mode_notifier; + Notifier console_notifier; gboolean free_scale; gboolean keep_aspect_ratio; =20 diff --git a/ui/gtk.c b/ui/gtk.c index 6325704c397..6ef58d1367c 100644 --- a/ui/gtk.c +++ b/ui/gtk.c @@ -2332,7 +2332,8 @@ static bool gd_scale_valid(double scale) return scale >=3D VC_SCALE_MIN && scale <=3D VC_SCALE_MAX; } =20 -static void add_gfx_console(GtkDisplayState *s, QemuConsole *con) +static VirtualConsole * +add_gfx_console(GtkDisplayState *s, QemuConsole *con) { VirtualConsole *vc =3D g_new0(VirtualConsole, 1); const DisplayChangeListenerOps *ops =3D &dcl_ops; @@ -2414,6 +2415,76 @@ static void add_gfx_console(GtkDisplayState *s, Qemu= Console *con) qemu_console_register_listener(con, &vc->gfx.dcl, ops); =20 gd_connect_vc_gfx_signals(vc); + return vc; +} + +static void gd_vc_add_gfx(GtkDisplayState *s, QemuConsole *con) +{ + VirtualConsole *vc; + int i; + + for (i =3D 0; i < (int)s->vcs->len; i++) { + VirtualConsole *v =3D g_ptr_array_index(s->vcs, i); + if (v->type =3D=3D GD_VC_GFX && v->gfx.dcl.con =3D=3D con) { + return; + } + } + + vc =3D add_gfx_console(s, con); + gtk_widget_show_all(vc->tab_item); + gtk_widget_realize(vc->gfx.drawing_area); + + if (s->free_scale) { + gd_update_windowsize(vc); + } + + gd_update_caption(s); + gd_rebuild_vc_menu(s); + + gtk_notebook_set_show_tabs(GTK_NOTEBOOK(s->notebook), true); +} + +static void gd_vc_remove_gfx(GtkDisplayState *s, QemuConsole *con) +{ + VirtualConsole *vc =3D NULL; + guint idx; + + for (idx =3D 0; idx < s->vcs->len; idx++) { + VirtualConsole *v =3D g_ptr_array_index(s->vcs, idx); + if (v->type =3D=3D GD_VC_GFX && v->gfx.dcl.con =3D=3D con) { + vc =3D v; + break; + } + } + if (!vc) { + return; + } + + if (s->kbd_owner =3D=3D vc) { + gd_ungrab_keyboard(s); + } + if (s->ptr_owner =3D=3D vc) { + gd_ungrab_pointer(s); + } + + g_ptr_array_remove_index(s->vcs, idx); + gd_rebuild_vc_menu(s); + gd_update_caption(s); +} + +static void gd_console_notify(Notifier *n, void *data) +{ + GtkDisplayState *s =3D container_of(n, GtkDisplayState, console_notifi= er); + QemuConsoleEvent *event =3D data; + + switch (event->type) { + case QEMU_CONSOLE_ADDED: + gd_vc_add_gfx(s, event->con); + break; + case QEMU_CONSOLE_REMOVED: + gd_vc_remove_gfx(s, event->con); + break; + } } =20 static void gd_create_menu_view(GtkDisplayState *s, DisplayOptions *opts) @@ -2688,6 +2759,9 @@ static void gtk_display_init(DisplayState *ds, Displa= yOptions *opts) =20 gd_create_menus(s, opts); =20 + s->console_notifier.notify =3D gd_console_notify; + qemu_console_add_notifier(&s->console_notifier); + gd_connect_signals(s); =20 gtk_notebook_set_show_tabs(GTK_NOTEBOOK(s->notebook), FALSE); @@ -2808,6 +2882,7 @@ static void gtk_display_cleanup(void) return; } =20 + qemu_console_remove_notifier(&s->console_notifier); qemu_remove_mouse_mode_change_notifier(&s->mouse_mode_notifier); gd_clipboard_cleanup(s); g_signal_handlers_disconnect_by_func(s->notebook, --=20 2.54.0 From nobody Mon Jun 8 12:13:50 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1780903463; cv=none; d=zohomail.com; s=zohoarc; b=lqLYq0SyAkXWKOZM0GJklkWrXH7f1mPVJzXP5gQtq5/0aKyuTXvtn5pmPk6iifckXx1NT00elGNTSrdU462gfmu3pGqa/kZ29zPhImYPUYmk5hAp4MkmvkmHWZUU55s1A5So4WEdLbMqTzPWar4blHKzI1nIK9Zv9AXzppfpN64= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780903463; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=smITB6zL39eWiVsZ5X8YQmvcTjlNu7U6xyC2M1fco68=; b=cvZs+cXCdppvQVqY2VEN39ocR2k28Z4qK4EpjEiBWzmZt0nrE5T/A51RUYiDmNipsKlIii2+jhJNZ63H8ScwKieKG4Qtg0BYFPldky7n3KInCNB24bfwhrnc1le/xZWkGUrOlpSOlS5PssY6tU/pimJpgekyes+djcunz9gNS/g= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1780903463618158.33910840003398; Mon, 8 Jun 2026 00:24:23 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWUH9-0003NB-9q; Mon, 08 Jun 2026 03:19:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUGb-0002oo-Vo for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:19:29 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUGZ-0000xO-Fv for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:19:24 -0400 Received: from mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-618-jWHCaYTnNTqlvzXSaGdUeg-1; Mon, 08 Jun 2026 03:19:21 -0400 Received: from mx-prod-int-10.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-10.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.95]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 2D5DD1800750; Mon, 8 Jun 2026 07:19:20 +0000 (UTC) Received: from localhost (unknown [10.44.22.16]) by mx-prod-int-10.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id D0D11763; Mon, 8 Jun 2026 07:19:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780903162; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=smITB6zL39eWiVsZ5X8YQmvcTjlNu7U6xyC2M1fco68=; b=M3o9wGsm24lD3bCUCmw/wSrBaTEYOAu7iQpj1nttfglTRrBmG+QLCTKyFgAuamw0oD29yU EVO6sAPtdIZHKZDc9+BbZJzctZeyPOJGXGqCjkeRzjV0ysa2dhAj1mqpwjkWNGnk1J0WXf O+pcc+bpzrBH0qBS2qFw34XJ82KIRlk= X-MC-Unique: jWHCaYTnNTqlvzXSaGdUeg-1 X-Mimecast-MFC-AGG-ID: jWHCaYTnNTqlvzXSaGdUeg_1780903160 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Mon, 08 Jun 2026 11:16:48 +0400 Subject: [PATCH v2 30/33] ui/console: register console in QOM tree dynamically MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260608-b4-ui-v2-30-9ea6355ea08f@redhat.com> References: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> In-Reply-To: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> To: qemu-devel@nongnu.org Cc: Paolo Bonzini , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Pierrick Bouvier , Fabiano Rosas , Laurent Vivier , Alex Williamson , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Peter Maydell , Akihiko Odaki , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= X-Developer-Signature: v=1; a=openpgp-sha256; l=1885; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=gHM3wO/P2ne1JXOvnW4MgBu4jfpvTvZCkSPD3/MPa0o=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqJmxNFhto47ZXxJcuCkL36/QJ5coCohAPTUODP kaAN/Ne2n2JAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCaiZsTQAKCRDa6OEJdZac 5fcOD/9IvqdxetlvLZhAqZdLu5vUxPNbaAl0LYNzo9dFOT5kAsAoStmdcuFw+9QkLoMfEhLLkyq AfkNpn/lliTw5hU9QSTj7s6y/R4MyqSYFPTZGHBWVbxmbcs2iEqFfs6+pvzKwb7acZo4mMU7uw2 tewOp+XDWf2hzKQbEIPZdvxAs6kAOQ/Ypl3pmCGGHRM7vkuf5qkMUFl2bprvzjQ4I2o63BoQjNp 9vvOPxwGyGr7lQZEEdnQWWva9OB/NC/iGPz2HhqSbv2jxAhQ1BQeOUkYmyFPAh+0rsfzSMQQyN0 b16YXULHdOV7L5SGxR32oo8nZ88AHDSUy8dMpzjADcJHNBVLJ5VauqmWnhksffLDPm8mfQ9OJqZ ez/xdeEh0kwIXTh1ofsHGTC95eDkRGdu1ElPDF7dqNbNFht+mojSPV7SW8Rsw9vb5yUzrdkRr5K 8rJr4WBawwIZG4VuWTH/9fQgJjc5pBE9+yBSVZfX37fNjNbjTTmbgVmjktdHUTc2gvTK1VmoHAV 01bjWVU9buvC8fdULnOwXccLLJi37Dc3kIn/H6J6xWmonMblEafqfv9rPLMbSOz+g1qHpmHUAZn tM3QJepcM23g00/1W8Z9pLjT98rHhzRsr3Y3VL7haq6lc/Afs7kx0qaxd1ZWTGfCerzo/D8TaPd MDepFo6OwdMNqmQ== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.6 on 10.30.177.95 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com 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, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-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: qemu development 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-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1780903466156154100 Consoles created after init_displaystate() (e.g. hotplugged display devices) were never added to the /backend/console[N] QOM tree. Extract qemu_console_add_to_qom() and call it from qemu_console_register() when the display is already initialized. Signed-off-by: Marc-Andr=C3=A9 Lureau --- ui/console.c | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/ui/console.c b/ui/console.c index 975eaf15706..e01d893df4b 100644 --- a/ui/console.c +++ b/ui/console.c @@ -376,6 +376,13 @@ void qemu_text_console_put_string(QemuTextConsole *s, = const char *str, int len) } } =20 +static void qemu_console_add_to_qom(QemuConsole *con) +{ + g_autofree gchar *name =3D g_strdup_printf("console[%d]", con->index); + object_property_add_child(object_get_container("backend"), + name, OBJECT(con)); +} + static void qemu_console_register(QemuConsole *c) { @@ -413,6 +420,10 @@ qemu_console_register(QemuConsole *c) } } } + + if (phase_check(PHASE_MACHINE_READY)) { + qemu_console_add_to_qom(c); + } } =20 static void @@ -1089,17 +1100,13 @@ void qemu_console_remove_notifier(Notifier *notifie= r) */ DisplayState *init_displaystate(void) { - gchar *name; QemuConsole *con; =20 QTAILQ_FOREACH(con, &consoles, next) { /* Hook up into the qom tree here (not in object_new()), once * all QemuConsoles are created and the order / numbering * doesn't change any more */ - name =3D g_strdup_printf("console[%d]", con->index); - object_property_add_child(object_get_container("backend"), - name, OBJECT(con)); - g_free(name); + qemu_console_add_to_qom(con); } =20 return display_state; --=20 2.54.0 From nobody Mon Jun 8 12:13:50 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1780903450; cv=none; d=zohomail.com; s=zohoarc; b=mq3M+yZXnFRf6I0n1WewDjhIlMqlmN8DRS040kQk5VgpH3BW/eUKJ8inaS4LxwJAhLHXZQbl6SkDf9lij18v5VeDE3pRKO+cYvcdBzxU3ENh/X6xUpxQy6K1rIiOfG1Fnw8DJsOI2zsrymhMpfR7H+WJwYE92sdIpRxdeAF0Wxs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780903450; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=jE+/q4F6W7Ekdb2sIMCJWMNTaDYcoal5/NVcetnDHis=; b=F2QVD6ppSfkoSeXXsdZRrdqDBO7OXBjZFiUJ9wASJdb2abivZZzHVkmua0Kc5It3WHixSV7zmftW5wnWtrB8K1ODanR9x8XRq5B613m63V/c6P6EFFdVIRYxns6F6fPWWGTGbmFP2+MqZKZ3ocF8+wb4D+0sWBnQwylOoWz38ho= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1780903450234119.49374560147874; Mon, 8 Jun 2026 00:24:10 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWUIy-0005Gr-EF; Mon, 08 Jun 2026 03:21:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUGm-00035d-So for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:19:40 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUGj-0000yv-Ds for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:19:34 -0400 Received: from mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-317-BUclrGQANPSpD8Z2pnLsJg-1; Mon, 08 Jun 2026 03:19:26 -0400 Received: from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.17]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 414F51800741; Mon, 8 Jun 2026 07:19:25 +0000 (UTC) Received: from localhost (unknown [10.44.22.16]) by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 291B31956053; Mon, 8 Jun 2026 07:19:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780903172; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=jE+/q4F6W7Ekdb2sIMCJWMNTaDYcoal5/NVcetnDHis=; b=fosvPwcQeBv79yS9dRu7UkMw0ai0/XbcE3/9Pa/40E/+aksnmGLFVUKsDjBwJX7Ufkeq9j q7KcYn+SQgx8oC554nJQWIir+3qVfT+cr98dto+z04GxoTRKKbgcK7A6IpPIolgzYlxlHy vYo4cWrMx85VeXQDFPlE+vUtKy+ibiw= X-MC-Unique: BUclrGQANPSpD8Z2pnLsJg-1 X-Mimecast-MFC-AGG-ID: BUclrGQANPSpD8Z2pnLsJg_1780903165 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Mon, 08 Jun 2026 11:16:49 +0400 Subject: [PATCH v2 31/33] ui/console: unregister console from QOM tree on close MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260608-b4-ui-v2-31-9ea6355ea08f@redhat.com> References: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> In-Reply-To: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> To: qemu-devel@nongnu.org Cc: Paolo Bonzini , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Pierrick Bouvier , Fabiano Rosas , Laurent Vivier , Alex Williamson , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Peter Maydell , Akihiko Odaki , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= X-Developer-Signature: v=1; a=openpgp-sha256; l=1336; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=G5ETinkAlSD3wMtGo4G48qKqH8z6lNeiiIdxzS1jppM=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqJmxN9hc/OeCLU4dT/we9x1XwpSTG0SqPYCG5c V7B88qh0HyJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCaiZsTQAKCRDa6OEJdZac 5ZusD/9256bTWScUqHwgWmxGQgsjpJh22QPSw1P8SG3JLekH4CxOuz7uWfvU5LqBPLWZI6avys2 LcVMd6o1KgBwTZ2PKGXCSqTutzCkrdOyC1YNGfyZ2MGUEIUo4P4vLtWU/AXIUrUb4KxHd5MgM/H jEKIg0X0K3JJTVo6BpZd6jguJIizdZ8hASTKgncJnmRlyG0VF637G4epGZq/TTzOenaBFmk/vbq K86h/UxvsZyAGUP+Ha8XSAFiQCCLryMf7s2GmoefjQeeKorXBPf4libuMZw5jV1qRzEUNR0Bflq IBjw3MclI2VuyMBqCn9pVWorucWi8rAfEqkMotefrrWfUT41jUiYReEjXBhpuciO1zA01oOlhB8 qmlZRJrmM/DCBgvQ5ugALvNTtJHLEWyzvH2bOLUFSjJUWGNcuWfdnu2zQE5qZ+GeRWCky5J95ns NmLgxUVMdcsmxamgSPsavCp4EXkvP6UOMi4p+sCoLgKw8DMZANFJpGZV9fAT0pYtabnhEXaA8d+ ptaF9zvoFaRfN0sc5MQs4Coe40z0UMqMuqdr4Vg24nMuCrykrQwT/JjgVnai0G0firdJ7ByC+i6 aXDV9/Jzhn5Dw/wRnTWDHEVl898ybqjcIRBu+4AjX1Ca5081yLUd86mY6GjnJ70EmGkRimvUcv0 l9E0JJKD2OjvKqA== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.17 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com 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, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-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: qemu development 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-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1780903452271158500 Call object_unparent() in graphic_console_close() to remove the console from /backend/console[N]. This drops the QOM tree reference, while the initial object_new() reference keeps the console alive for potential reuse. When graphic_console_init() reuses a closed console, re-register it in the QOM tree. Signed-off-by: Marc-Andr=C3=A9 Lureau --- ui/console.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ui/console.c b/ui/console.c index e01d893df4b..4d10884dc11 100644 --- a/ui/console.c +++ b/ui/console.c @@ -1136,6 +1136,9 @@ QemuConsole *qemu_graphic_console_create(DeviceState = *dev, uint32_t head, trace_console_gfx_reuse(s->index); width =3D qemu_console_get_width(s, 0); height =3D qemu_console_get_height(s, 0); + if (phase_check(PHASE_MACHINE_READY)) { + qemu_console_add_to_qom(s); + } } else { trace_console_gfx_new(); s =3D (QemuConsole *)object_new(TYPE_QEMU_GRAPHIC_CONSOLE); @@ -1176,6 +1179,7 @@ void qemu_graphic_console_close(QemuConsole *con) } surface =3D qemu_create_placeholder_surface(width, height, unplugged); qemu_console_set_surface(con, surface); + object_unparent(OBJECT(con)); } =20 QemuConsole *qemu_console_lookup_default(void) --=20 2.54.0 From nobody Mon Jun 8 12:13:50 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1780903337; cv=none; d=zohomail.com; s=zohoarc; b=E4sEim6jGsCNFHolJ4ssma/wsnsSK7nMx/hZoIiyRsMUgaJ986PNdfbvGWNAqZ0f/kMVATFB/SNTnoBqHbU4uNNZMSPiCfuRVbAjKEucGpzoBoq48OkJ8EAnsGN5JphtMSXCx+TpSP9lsGyKaaDnR716mbyr/7jGg6nR3tgkAik= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780903337; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=ZoHRGobLUxqerXDNbYNx+RPADFh2pje54raj1bkZA5c=; b=XPZYdHs2fHnFZcSFdY4Op7A7VryMmZFP7d4t+tiAEfEVwoAdg+VEdYYa5zWmppZ6T3ESD4/QqgmT0u09Sd3HBdcCBdRngkcdqx3hYodqfXK/or9Iv8ijVa2yDUQclGlXUoLg8kp8vQaHWIawOg8J3ivsE3LWZmotPm8pIUvVEWA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 178090333749172.04700311731995; Mon, 8 Jun 2026 00:22:17 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWUHz-0004OD-5O; Mon, 08 Jun 2026 03:20:51 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUGs-00036x-Mz for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:19:43 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUGp-0000zm-BZ for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:19:40 -0400 Received: from mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-261-_viUqlscPteF84vU1Eps_w-1; Mon, 08 Jun 2026 03:19:32 -0400 Received: from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id DD0341956050; Mon, 8 Jun 2026 07:19:30 +0000 (UTC) Received: from localhost (unknown [10.44.22.16]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 65C9019560A3; Mon, 8 Jun 2026 07:19:28 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780903178; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ZoHRGobLUxqerXDNbYNx+RPADFh2pje54raj1bkZA5c=; b=jS+SqNBz1J51JYzyp+YbgJ11MvML3+HerOu7DQ85/B6LANL5LI35UzG77N/oCugurTt2Ed 8JhHZO/yPLn/FWvH783OxngokMHWhTnsN8gvLQprfuPRLdmPD0XfC2Qma4dgDB1ILDNcDF cnURqYnLvrJjx+HwwAf3z/2QmC011PU= X-MC-Unique: _viUqlscPteF84vU1Eps_w-1 X-Mimecast-MFC-AGG-ID: _viUqlscPteF84vU1Eps_w_1780903171 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Mon, 08 Jun 2026 11:16:50 +0400 Subject: [PATCH v2 32/33] ui/dbus: handle console hotplug/unplug events MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260608-b4-ui-v2-32-9ea6355ea08f@redhat.com> References: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> In-Reply-To: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> To: qemu-devel@nongnu.org Cc: Paolo Bonzini , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Pierrick Bouvier , Fabiano Rosas , Laurent Vivier , Alex Williamson , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Peter Maydell , Akihiko Odaki , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= X-Developer-Signature: v=1; a=openpgp-sha256; l=6566; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=HZFDz6Yi9B8ywej4sh9mgPViu/0HVObhL89ecuGVYbM=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqJmxOQtT3Gq4sZ0WBAir8PP2PqTG0UbXP3q1Ph 26g7FGAtViJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCaiZsTgAKCRDa6OEJdZac 5ZAXEACSvx2OxbDRjNhH9ru0ZL7tTKhvNfgkUM8cTgtyJY7vID5BTobQpaHSPcH83WTGJS1wZ+Q xxTvqFBLFXfArFSvFQ7p0KC3eBns/dmQbqjnFQ+s/f5XaVfVs63ACvdvLKemaYjyXrMbDM4RyFc f1im9pfa3a4CCW6k37hhefQQK4oVCaFTb20nM6rksrjhPSqzfGiYH/zz+45eXUiugokMphewRj7 7GqPWg/69aROFx+nl0s8tVWXQbsyHENpIK2wkrKlOWJsd9qyEIdMFcnRbyDXcg9FG+lJ0O7JDBo h6zhHHVu1O7RHpQLaNARxH7xQPNlJGNC1QPHq1in05ufIbD5NUwNthDCi3Mm636zI+YFqPhFYyz yhErF4xhEoOZJCXYHXsQDHg/gp7s9mZTKNSZQiwFn9tWo5MNYlwbca5zNjg4u9r/l7iEtOVwhum PAx7JWfaqJ2fj8iotuf/ztp29YkPl1eng97GJHukoLf9n/RfE18va6QVNpift1u08KogWaFnO/m QqmtjE72N+O4hCBQAa3xr8Z8RgIwQ/L2qq+AmrnefrvJnyEIIcO/r5zGsr2N/rr7xF5d5dLmrsk 21J+cM19YtTk94sZLX5PgjILXAI3mICBpRuIfI7l/ThG8jJrYk04yiqwubH9RzZZNnqcunDbtdk 1J2EmOSmmYdTdVg== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.12 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 8 X-Spam_score: 0.8 X-Spam_bar: / X-Spam_report: (0.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1780903340040154100 Subscribe to QemuConsoleEvent notifications to dynamically add and remove D-Bus display consoles. This mirrors the GTK backend's handling added in the previous commits. Signed-off-by: Marc-Andr=C3=A9 Lureau --- ui/dbus.h | 3 ++ ui/dbus-console.c | 5 +++ ui/dbus.c | 93 +++++++++++++++++++++++++++++++++++++++++++++------= ---- 3 files changed, 84 insertions(+), 17 deletions(-) diff --git a/ui/dbus.h b/ui/dbus.h index e4e78590b49..d2cc176648a 100644 --- a/ui/dbus.h +++ b/ui/dbus.h @@ -60,6 +60,7 @@ struct DBusDisplay { DBusClipboardRequest clipboard_request[QEMU_CLIPBOARD_SELECTION__COUNT= ]; =20 Notifier notifier; + Notifier console_notifier; }; =20 #ifdef WIN32 @@ -86,6 +87,8 @@ dbus_display_console_new(DBusDisplay *display, QemuConsol= e *con); int dbus_display_console_get_index(DBusDisplayConsole *ddc); =20 +QemuConsole * +dbus_display_console_get_qemu_console(DBusDisplayConsole *ddc); =20 extern const DisplayChangeListenerOps dbus_console_dcl_ops; =20 diff --git a/ui/dbus-console.c b/ui/dbus-console.c index a4a17f5b4d0..66ed4b1def4 100644 --- a/ui/dbus-console.c +++ b/ui/dbus-console.c @@ -533,6 +533,11 @@ int dbus_display_console_get_index(DBusDisplayConsole = *ddc) return qemu_console_get_index(ddc->dcl.con); } =20 +QemuConsole *dbus_display_console_get_qemu_console(DBusDisplayConsole *ddc) +{ + return ddc->dcl.con; +} + DBusDisplayConsole * dbus_display_console_new(DBusDisplay *display, QemuConsole *con) { diff --git a/ui/dbus.c b/ui/dbus.c index b23cb44c535..7be0f8e2611 100644 --- a/ui/dbus.c +++ b/ui/dbus.c @@ -142,6 +142,9 @@ dbus_display_finalize(Object *o) { DBusDisplay *dd =3D DBUS_DISPLAY(o); =20 + if (dd->console_notifier.notify) { + qemu_console_remove_notifier(&dd->console_notifier); + } if (dd->notifier.notify) { dbus_display_notifier_remove(&dd->notifier); } @@ -164,14 +167,35 @@ dbus_display_finalize(Object *o) dbus_display =3D NULL; } =20 +static void +dbus_update_console_ids(DBusDisplay *dd) +{ + g_autoptr(GArray) arr =3D g_array_new(FALSE, FALSE, sizeof(guint32)); + + for (guint i =3D 0; i < dd->consoles->len; i++) { + DBusDisplayConsole *ddc =3D g_ptr_array_index(dd->consoles, i); + guint32 idx =3D dbus_display_console_get_index(ddc); + g_array_append_val(arr, idx); + } + + g_object_set(dd->iface, "console-ids", + g_variant_new_fixed_array(G_VARIANT_TYPE("u"), + arr->data, arr->len, + sizeof(guint32)), + NULL); +} + static bool -dbus_display_add_console(DBusDisplay *dd, int idx, Error **errp) +dbus_display_add_console(DBusDisplay *dd, QemuConsole *con, Error **errp) { - QemuConsole *con; DBusDisplayConsole *dbus_console; =20 - con =3D qemu_console_lookup_by_index(idx); - assert(con); + for (guint i =3D 0; i < dd->consoles->len; i++) { + DBusDisplayConsole *ddc =3D g_ptr_array_index(dd->consoles, i); + if (dbus_display_console_get_qemu_console(ddc) =3D=3D con) { + return true; + } + } =20 if (qemu_console_is_graphic(con) && dd->gl_mode !=3D DISPLAY_GL_MODE_OFF) { @@ -179,20 +203,58 @@ dbus_display_add_console(DBusDisplay *dd, int idx, Er= ror **errp) } =20 dbus_console =3D dbus_display_console_new(dd, con); - g_ptr_array_insert(dd->consoles, idx, dbus_console); + g_ptr_array_add(dd->consoles, dbus_console); g_dbus_object_manager_server_export(dd->server, G_DBUS_OBJECT_SKELETON(dbus_consol= e)); + dbus_update_console_ids(dd); return true; } =20 +static void +dbus_display_remove_console(DBusDisplay *dd, QemuConsole *con) +{ + for (guint i =3D 0; i < dd->consoles->len; i++) { + DBusDisplayConsole *ddc =3D g_ptr_array_index(dd->consoles, i); + if (dbus_display_console_get_qemu_console(ddc) =3D=3D con) { + if (display_opengl) { + qemu_console_set_display_gl_ctx(con, NULL); + } + g_dbus_object_manager_server_unexport( + dd->server, + g_dbus_object_get_object_path(G_DBUS_OBJECT(ddc))); + g_ptr_array_remove_index(dd->consoles, i); + dbus_update_console_ids(dd); + break; + } + } +} + +static void +dbus_console_notify(Notifier *n, void *data) +{ + DBusDisplay *dd =3D container_of(n, DBusDisplay, console_notifier); + QemuConsoleEvent *event =3D data; + + switch (event->type) { + case QEMU_CONSOLE_ADDED: { + Error *err =3D NULL; + if (!dbus_display_add_console(dd, event->con, &err)) { + error_report_err(err); + } + break; + } + case QEMU_CONSOLE_REMOVED: + dbus_display_remove_console(dd, event->con); + break; + } +} + static void dbus_display_complete(UserCreatable *uc, Error **errp) { DBusDisplay *dd =3D DBUS_DISPLAY(uc); g_autoptr(GError) err =3D NULL; g_autofree char *uuid =3D qemu_uuid_unparse_strdup(&qemu_uuid); - g_autoptr(GArray) consoles =3D NULL; - GVariant *console_ids; int idx; =20 if (!object_resolve_path_type("", TYPE_DBUS_DISPLAY, NULL)) { @@ -233,27 +295,24 @@ dbus_display_complete(UserCreatable *uc, Error **errp) } } =20 - consoles =3D g_array_new(FALSE, FALSE, sizeof(guint32)); for (idx =3D 0;; idx++) { - if (!qemu_console_lookup_by_index(idx)) { + QemuConsole *con =3D qemu_console_lookup_by_index(idx); + if (!con) { break; } - if (!dbus_display_add_console(dd, idx, errp)) { + if (!dbus_display_add_console(dd, con, errp)) { return; } - g_array_append_val(consoles, idx); } =20 - console_ids =3D g_variant_new_from_data( - G_VARIANT_TYPE("au"), - consoles->data, consoles->len * sizeof(guint32), TRUE, - (GDestroyNotify)g_array_unref, consoles); - g_steal_pointer(&consoles); g_object_set(dd->iface, "name", qemu_name ?: "QEMU " QEMU_VERSION, "uuid", uuid, - "console-ids", console_ids, NULL); + dbus_update_console_ids(dd); + + dd->console_notifier.notify =3D dbus_console_notify; + qemu_console_add_notifier(&dd->console_notifier); =20 if (dd->bus) { g_dbus_object_manager_server_set_connection(dd->server, dd->bus); --=20 2.54.0 From nobody Mon Jun 8 12:13:50 2026 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; 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=pass(p=quarantine dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1780903234; cv=none; d=zohomail.com; s=zohoarc; b=glXgmy2NHXJyQRmlqbeLNrNUqPrsi7JMSU500t+3TdIyFyHHmnMRum37XV6Ly18vrmDCVlH7PCLwJzRShb4veSJyqpVbEpiGAFWPSoE5n2I7XSctVbUU2eKy/wGv4YdwhEpyPv4LDGDYUuH0qzeJ4kkSl3/hfGPYT0yzforwsos= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780903234; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=xbxN/mAMtJtduNKSGnc8CLMOmhvQhZe+7JMf8JBpoeE=; b=OTUeFU65IMLMAo+3dUxifYlwOTy58cpHTELoEKNew7nyoiaRPaa77kIMyoiGiVbr8TPr2GAnIbuKaJ7wk3azA5DoF4k7xLSPxb0PZoz7W/JwU13kSe+Sw/aSY6nQKO6fi+Zt9GN8FvbhBVwa5oRcQazye8seYt2VdaxKt6zvpI4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; 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=pass header.from= (p=quarantine dis=none) Return-Path: Received: from lists1p.gnu.org (lists1p.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1780903234309772.6296208857691; Mon, 8 Jun 2026 00:20:34 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wWUH6-0003Gd-SI; Mon, 08 Jun 2026 03:19:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUGs-00036S-1C for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:19:42 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wWUGp-0000zl-A6 for qemu-devel@nongnu.org; Mon, 08 Jun 2026 03:19:40 -0400 Received: from mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-587-BS6Kj0_YNSGGvCZXHfynEA-1; Mon, 08 Jun 2026 03:19:37 -0400 Received: from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id DDBD519560A3; Mon, 8 Jun 2026 07:19:35 +0000 (UTC) Received: from localhost (unknown [10.44.22.16]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id E6B5419560A2; Mon, 8 Jun 2026 07:19:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780903178; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=xbxN/mAMtJtduNKSGnc8CLMOmhvQhZe+7JMf8JBpoeE=; b=LveEOl8k+3fWnxI9sB/tj/07qq+LxBqVhPr+0nuu9dskN3hTqKvIUCc2K3x82rXAl+I6Oq lfOUaG/XZ2+XexLQf/5csTzAr+2lJ1kVeTEf/AOY4tPUVdmPSPw1lv+WpCN/4OS6yCOve1 VGigNt7p/BRxqVqJIw4kHEOX1HMSH8E= X-MC-Unique: BS6Kj0_YNSGGvCZXHfynEA-1 X-Mimecast-MFC-AGG-ID: BS6Kj0_YNSGGvCZXHfynEA_1780903176 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Mon, 08 Jun 2026 11:16:51 +0400 Subject: [PATCH v2 33/33] tests/qtest: add D-Bus display hotplug test MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260608-b4-ui-v2-33-9ea6355ea08f@redhat.com> References: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> In-Reply-To: <20260608-b4-ui-v2-0-9ea6355ea08f@redhat.com> To: qemu-devel@nongnu.org Cc: Paolo Bonzini , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Pierrick Bouvier , Fabiano Rosas , Laurent Vivier , Alex Williamson , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Peter Maydell , Akihiko Odaki , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= X-Developer-Signature: v=1; a=openpgp-sha256; l=4986; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=Qj9RcQ/RNJdYxcuio5b6l1xNzAqRshVBUlgn/gQCRCY=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqJmxOJTitUvEjN5G0tXu7RyXd2xAxHrm5FnW83 Rm+SGwbSLiJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCaiZsTgAKCRDa6OEJdZac 5fz1D/901hPmkcFNZRHanu82Ixnvfj/l/hVp0E80KJoWNnRg0Yk5Wd3+vW8yvuM8lj993eB7T8p 8EjOyoJSm4nNU+fz9cW3CUJPWNOrKOATZrB5RkS3cGkXqq7MyICJAY96+nLDFukAZAPT3PotZMT 8KUbDOCHGBWHsrTk8KA+d2+vnACVyMAl/hxfwWLpGSerF2fvtB6uTmvNFJXOANF4N66aZqy0JBq wCNmzs1fXjqjWbcQjuASiw9EE+ctYr872DSBaOi2a2RjZDRxaVbBkOQdT5D7Ua31C+Xuo0aVOQT uM+APSsza3c7WdGofxhjCAJi4jW9OyHjJ2tg0OolGGId3AXWHMYoCmcOv/5FG3oMWv1ECBo826h HmhcUejrwVvp+Dzz1iCDuAuB6jUhkdBOaQC4kLJayN/+ol1ZH/ASS2bUzjvYNSrBAppK24kCfwv o5xoR6fdCYaOv7J8fwXRWxKpWgPmYggJVIjHKlU/OcuYJO53XRY1BqRmVBRK7U0OgfTDnzFPcQU SMTvDVrIwJHxdvx5N3u2ohUWeZljQJk5TQM7XCjXUcb79BoK0XSCX4goXPmsM9uxsqwtzemb5ns eC44cwnZPaQVmOWbXEp+grYspPOruXz5maoEMSJMY0UxS/ucsQG3SRLHFIVBqe0QJs1ceqIvedw pWtrP6offQpGYUA== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.12 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=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 8 X-Spam_score: 0.8 X-Spam_bar: / X-Spam_report: (0.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development 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-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1780903235291158500 Add a qtest that verifies display consoles are dynamically added and removed over D-Bus when a bochs-display device is hotplugged and unplugged on a q35 machine. The test plugs device_add a bochs-display, waits for the DEVICE_ADDED QMP event, and checks that the D-Bus VM interface reports a second console. It then device_del it, forces a system reset (q35 removal is ACPI-based and needs guest cooperation qtest cannot provide), waits for DEVICE_DELETED, and checks the console count again. Reviewed-by: Fabiano Rosas Signed-off-by: Marc-Andr=C3=A9 Lureau --- tests/qtest/dbus-display-test.c | 101 ++++++++++++++++++++++++++++++++++++= +++- 1 file changed, 99 insertions(+), 2 deletions(-) diff --git a/tests/qtest/dbus-display-test.c b/tests/qtest/dbus-display-tes= t.c index 5773776cad5..7838ce7323f 100644 --- a/tests/qtest/dbus-display-test.c +++ b/tests/qtest/dbus-display-test.c @@ -7,6 +7,8 @@ #include #include #include "libqtest.h" +#include "qobject/qdict.h" +#include "qobject/qstring.h" #include "ui/dbus-display1.h" =20 static GDBusConnection* @@ -38,11 +40,11 @@ test_dbus_p2p_from_fd(int fd) } =20 static void -test_setup(QTestState **qts, GDBusConnection **conn) +test_setup_args(QTestState **qts, GDBusConnection **conn, const char *args) { int pair[2]; =20 - *qts =3D qtest_init("-display dbus,p2p=3Dyes -name dbus-test"); + *qts =3D qtest_init(args); =20 g_assert_cmpint(qemu_socketpair(AF_UNIX, SOCK_STREAM, 0, pair), =3D=3D= , 0); =20 @@ -52,6 +54,12 @@ test_setup(QTestState **qts, GDBusConnection **conn) g_dbus_connection_start_message_processing(*conn); } =20 +static void +test_setup(QTestState **qts, GDBusConnection **conn) +{ + test_setup_args(qts, conn, "-display dbus,p2p=3Dyes -name dbus-test"); +} + static void test_dbus_display_vm(void) { @@ -360,6 +368,92 @@ test_dbus_display_keyboard(void) qtest_quit(qts); } =20 +static gsize +get_console_ids_count(GDBusConnection *conn) +{ + g_autoptr(GError) err =3D NULL; + g_autoptr(QemuDBusDisplay1VMProxy) vm =3D NULL; + GVariant *console_ids; + gsize n_ids =3D 0; + + vm =3D QEMU_DBUS_DISPLAY1_VM_PROXY( + qemu_dbus_display1_vm_proxy_new_sync( + conn, + G_DBUS_PROXY_FLAGS_NONE, + NULL, + DBUS_DISPLAY1_ROOT "/VM", + NULL, + &err)); + g_assert_no_error(err); + + console_ids =3D qemu_dbus_display1_vm_get_console_ids( + QEMU_DBUS_DISPLAY1_VM(vm)); + if (console_ids) { + n_ids =3D g_variant_n_children(console_ids); + } + return n_ids; +} + +static void +wait_device_event(QTestState *qts, const char *event_name, const char *id) +{ + QDict *resp, *data; + QString *qstr; + + for (;;) { + resp =3D qtest_qmp_eventwait_ref(qts, event_name); + data =3D qdict_get_qdict(resp, "data"); + if (!data || !qdict_get(data, "device")) { + qobject_unref(resp); + continue; + } + qstr =3D qobject_to(QString, qdict_get(data, "device")); + if (!strcmp(qstring_get_str(qstr), id)) { + qobject_unref(resp); + break; + } + qobject_unref(resp); + } +} + +static void +test_dbus_display_hotplug(void) +{ + g_autoptr(GDBusConnection) conn =3D NULL; + QTestState *qts =3D NULL; + gsize n; + + test_setup_args(&qts, &conn, + "-machine q35" + " -device pcie-root-port,id=3Drp0" + " -display dbus,p2p=3Dyes" + " -name dbus-test"); + + n =3D get_console_ids_count(conn); + g_assert_cmpuint(n, =3D=3D, 1); + + qtest_qmp_device_add(qts, "bochs-display", "bochs0", + "{'bus': 'rp0'}"); + + n =3D get_console_ids_count(conn); + g_assert_cmpuint(n, =3D=3D, 2); + + /* + * On q35, PCI device removal is ACPI-based and requires guest + * acknowledgement. Since qtest has no guest OS, issue the delete + * request and force removal via system reset. + */ + qtest_qmp_device_del_send(qts, "bochs0"); + qtest_system_reset_nowait(qts); + wait_device_event(qts, "DEVICE_DELETED", "bochs0"); + + n =3D get_console_ids_count(conn); + g_assert_cmpuint(n, =3D=3D, 1); + + g_clear_object(&conn); + qtest_quit(qts); +} + int main(int argc, char **argv) { @@ -369,6 +463,9 @@ main(int argc, char **argv) qtest_add_data_func("/dbus-display/console", GINT_TO_POINTER(false), t= est_dbus_display_console); qtest_add_data_func("/dbus-display/console/map", GINT_TO_POINTER(true)= , test_dbus_display_console); qtest_add_func("/dbus-display/keyboard", test_dbus_display_keyboard); + if (qtest_has_machine("q35") && qtest_has_device("bochs-display")) { + qtest_add_func("/dbus-display/hotplug", test_dbus_display_hotplug); + } =20 return g_test_run(); } --=20 2.54.0