From nobody Sat May 30 17:44:14 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=1780053446; cv=none; d=zohomail.com; s=zohoarc; b=ZpP+DeS8v1QtAD6NrYdWHh7aIc/uCHQcW0a+35A8DOcRiU6Nhnp0pY1UthQsvggH+MoANAVe3sTK6wMo15z2NMSk76w3CIgGGnDFV0gOP5wb5enQyhko+E5c6cCzPSeTYu9BYn2RReX8T6r7m0j6s2qyUMk6ONCnsnMsUDudf30= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780053446; 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=FaUXQMfdJTjTC0N3GcTJa6oA4cG3GNBcvTccRqPBkiMa+Ob6Jt+uhAUtc7HibAqRC0yN9A3mxY1b/9iXi/uFTcuz8oieor2rnt1F1/m218q5KwUYiqKq0KIk7VBhzaTzUH4Io0bAayZUbyZrwEJcsWfuqGQPlQnMu7qWhbCD5v8= 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 1780053446358243.44276389488607; Fri, 29 May 2026 04:17:26 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wSvD1-00018R-9Z; Fri, 29 May 2026 07:16: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 1wSvCx-000187-H7 for qemu-devel@nongnu.org; Fri, 29 May 2026 07:16:55 -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 1wSvCw-0008Aq-5H for qemu-devel@nongnu.org; Fri, 29 May 2026 07:16:55 -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-629-mOyaV5zZPbKa7p0Yrbm52A-1; Fri, 29 May 2026 07:16:49 -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-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id CBEFE19560AA; Fri, 29 May 2026 11:16:47 +0000 (UTC) Received: from localhost (unknown [10.44.22.6]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 8128F1800465; Fri, 29 May 2026 11:16:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780053413; 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=RvGJxSqum+a5GdWPhVirTt7HIcbDfn4s+qcNT3MDJW/qAN7unSr4GzgbolPmb5Z80EOOcB 6W6wrlmrGNw4pv9dDCadvhZQpNOVz74aCwB8aw5+YuDZ032nMFpixIwcqXE9vz9fuUndIR 2/EQ5h3Zz9ItDBUuPs9i+lxkp5Tkg1w= X-MC-Unique: mOyaV5zZPbKa7p0Yrbm52A-1 X-Mimecast-MFC-AGG-ID: mOyaV5zZPbKa7p0Yrbm52A_1780053408 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Fri, 29 May 2026 15:16:22 +0400 Subject: [PATCH 01/32] 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: <20260529-b4-ui-v1-1-8db3068421ef@redhat.com> References: <20260529-b4-ui-v1-0-8db3068421ef@redhat.com> In-Reply-To: <20260529-b4-ui-v1-0-8db3068421ef@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/ZANAwAKAdro4Ql1lpzlAcsmYgBqGXWOskEjR/vEs5J+/EpbbP+f2L2xsszcPsvlw ChwTff/bCGJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCahl1jgAKCRDa6OEJdZac 5RQlD/9fDXRMC6jg4cWoUbn8/dxaepND95H6stMp1jUCJ1/z3iy2ly/wMhMjjN5uEuqxxw7E5/t LHNDND/qfwK2pYlClSxxxUpYPYbbPctdyT8h1iI9nu3nyQrbqJR+xJnaVesLbCN4wwD9XNC+OqP V1CxYdzOlum4sJ/v33XCUiEWxo4GnR6EOR67Jfu55oVDx+f0Tn62jOiz7dO1+ASiNKxDPXxrg1g pymmeNMcCten2CQUGcPVXs7u+MDuIyTMl7gYiR19Dzv9TMUJS3gWnFcy2S3wCSUXD5fE4AoBeE+ 6jgSLyUURBctNp1X6mW51NbUQWYRkIZV9sAD3iGgugdOnXoP8dxN4W+5VRa4RrDXys+gnNWEa8G +U05wLGD7MNqFPmmmrD+lbVJZddVsxmDngVysE2+tgNDe0DdrZ+hM4hVfwAofRjbnDYAvjefAsb FOlcmRdeTG9Hi0Yk/cp1/5Qn/H4b9Ewv0yf/Nby6PuL768iHFUqFsPxi7eh0hat3xM70EBiH2xo AiPAeIOH6fmaaVyE91T9EzlMoIEMftBF+vYntC0vGnJXuM0enCn5gsjh+E7/R8o8LTJyU0GAVL3 vW/xBPZJaSKkpTcK3qxgtiPnLCVeNJMsUrT0mu/01wifL5Tf9oKLr4zqIVSMH74vEZGikMmYW6d R8Xq6jr4nEUEelA== 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: 1780053449209158500 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 --- 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 Sat May 30 17:44:14 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=1780053525; cv=none; d=zohomail.com; s=zohoarc; b=VdEt15ZkwzyxpXtFOWx50xLMVMf2kgijtdttf3didekTar/F33AnNhfc1gjPpcIT1e3vJKwK6Ltr4u0Lqh4O7ZrWYSBsewGwieqWuhf6wnuoky6DntMpyh2GMlKWbjaFbwHPAyhmOTpVSMO1roXAFHDffT0hYTybThDuowqX/T0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780053525; 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=lM1V8XjBrCxs1yBLSZROpXvQPyHauxhZXHX7W4Xzbho=; b=CobMnNPK2DhmV25Cwm4eVH2Wx3ueO6aKNPqz5NVhVJEnDlZVLoGsrwrwR91bZ/8frM4I+KpMrVhYkToBk5AF3GV+TRF3AcyKzy1gjAw8MmI2PononeRe8SkDuzd8Uuu4HI5440P34GcNaM/rSflSgv+Qc9iEIgjvMdO0tA8NKyU= 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 1780053525547538.9846446523892; Fri, 29 May 2026 04:18:45 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wSvD8-00019X-QR; Fri, 29 May 2026 07:17: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 1wSvD5-000197-F3 for qemu-devel@nongnu.org; Fri, 29 May 2026 07:17: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 1wSvD3-0008Bk-St for qemu-devel@nongnu.org; Fri, 29 May 2026 07:17:03 -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-605-qe3RjKEJOCiL3SHMXl1Bzg-1; Fri, 29 May 2026 07:16:56 -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-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id B9C9319560AA; Fri, 29 May 2026 11:16:54 +0000 (UTC) Received: from localhost (unknown [10.44.22.6]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 7760A19560A3; Fri, 29 May 2026 11:16:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780053420; 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=lM1V8XjBrCxs1yBLSZROpXvQPyHauxhZXHX7W4Xzbho=; b=RCD5t2OPYSSFkbZO4d4fMvci1hwtGxMolVLKTkIvNAPrMSkV/Onnfe0mJJXBNhGjOl5APK APWCFdS9HbjW0U7hNIoGIFrgEJ4MCUGYQOyJkpQnYfeMq82/qiSK1Avf73LP1EoWMMRjQq ahka+AtJtlwH5dywMZmxMoJrbNvIYmY= X-MC-Unique: qe3RjKEJOCiL3SHMXl1Bzg-1 X-Mimecast-MFC-AGG-ID: qe3RjKEJOCiL3SHMXl1Bzg_1780053415 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Fri, 29 May 2026 15:16:23 +0400 Subject: [PATCH 02/32] 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: <20260529-b4-ui-v1-2-8db3068421ef@redhat.com> References: <20260529-b4-ui-v1-0-8db3068421ef@redhat.com> In-Reply-To: <20260529-b4-ui-v1-0-8db3068421ef@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=eP9coWA13E2Og6kJdJyotHqJ3qp6iuOYSQNlNUaMVew=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqGXWOveEOldIwc/Dflxc4f5XST2qLMCuYKHM+b DNkE5KuBESJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCahl1jgAKCRDa6OEJdZac 5VRkD/0VsVax7bLNkDPzmbpq4YZcI0zpq1Oc84qOiQnwOHI0Bfc9AJWibwdxKun2u3w3yHFexBz L1do93SIcZEv1SobwhfDNLSdrGomOFReMDTxwLH26mvyJ1PN6udDAOiR/Xx/4ssgNWDA/ju4idZ FjfaQnkTv/Ch9Trx2N/ts9HZ2gIJDcIom5qQKUXlJc98eerLxYWgLNihUz0TRoSrbIzxHFAFLic MUaZOvtR20O4Vve144cCFkoZsoMvo5CzPx3mR/hyzm5EQCETEarw6WAlC96ZXu9/qWHx4X9AnCz RcPMpJhOguO/UGEfYd7ywo7WDZuYB/0YqObWnB5EUOhjLa2S2kLre+1aRXBQOjSMkxaJkLiyBK7 Gz3TqNe8qGNxLslX2baN18qcUYOQuYniJq51ZmbIvZ/c4SWHY0r+UJCKTG/hQL6AIEr6A1IIvlQ YiAbLJ+hQkIljZguWQF5Fm/T107SfVNvnM70UADFwM1V1NbjhJEXRnMKetZHi6kI1Hs5GsgZKtP zBIMsMdOO1lbJYJZnG6HupRzhl23UiF3Fxd12N7a4YSs6ie+VemHdZrcCAxPDRYRwamcYygqeEl 5BIegkCc6fizNOXPU2ywAELKzdSB+VpDsjWS4RTLvyrBv/z8Bf295q4LBfPO9F+Oy0yTGbeyYZ8 gBVUts7u0w6+hgA== 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: 1780053526490158500 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 --- meson.build | 2 ++ 1 file changed, 2 insertions(+) diff --git a/meson.build b/meson.build index eb074918193..224534ac351 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 Sat May 30 17:44:14 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=1780053458; cv=none; d=zohomail.com; s=zohoarc; b=GwhlChH878Jefgu1VWUHMOqUYtc2zIz4e9z/ny2Bv2+vUj4uZFhL2DT+P1+//i1zSui6ws06bKPUAGaF2z+m64uHaz0T7S+xyQoWPV97F9XqIIztGlTYApwW0x5U3IA5OQSh2WOqmjRpqHzaI5IiMLV+QtL4ACC1h55gJ7mbmJU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780053458; 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=wY3DqdzotWKSNT8RMduN5EZCcx+3OdHIWy49nisB+mE=; b=GaYJBEHVMMgqAH9fkX1gjwXhMeycnbS11lAPk9JFuxaAP2JNFXbHkvKZ0+9mcxNHiSfTkUItud+3oWb0sg3ek8ni36qNZLhSRbyOb0KHsa6c6jTC6RIx69dBEtv8nqruACR6HZZzNeajR2QC2Y9pUSsmkb1IK4pVIiZ1OFW4DK8= 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 1780053458467172.5788736939686; Fri, 29 May 2026 04:17:38 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wSvDC-00019z-Mw; Fri, 29 May 2026 07:17: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 1wSvDA-00019k-E5 for qemu-devel@nongnu.org; Fri, 29 May 2026 07:17:08 -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 1wSvD8-0008Ce-Ol for qemu-devel@nongnu.org; Fri, 29 May 2026 07:17:08 -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-220-zG8795jPMD6m_MPWQ4NC6A-1; Fri, 29 May 2026 07:17:02 -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-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id E8E571956094; Fri, 29 May 2026 11:17:00 +0000 (UTC) Received: from localhost (unknown [10.44.22.6]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 524D1180034E; Fri, 29 May 2026 11:16:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780053425; 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=wY3DqdzotWKSNT8RMduN5EZCcx+3OdHIWy49nisB+mE=; b=Whuj2Ra9XyImm4jm4CzuXi4TSFAZJIBcWu9n8C+oVpkLiqjucT1UQV5ubgWZgs+ELwQk8k vaCCR7jYzBoZOZdpXHgcpMCuACXQawg4+HlScsKyC9EvTOthU12mSBDPhPHIfS6SW87ldt w+bxRjCBa/ziDo6JUziYKSOedykLoU8= X-MC-Unique: zG8795jPMD6m_MPWQ4NC6A-1 X-Mimecast-MFC-AGG-ID: zG8795jPMD6m_MPWQ4NC6A_1780053421 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Fri, 29 May 2026 15:16:24 +0400 Subject: [PATCH 03/32] 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: <20260529-b4-ui-v1-3-8db3068421ef@redhat.com> References: <20260529-b4-ui-v1-0-8db3068421ef@redhat.com> In-Reply-To: <20260529-b4-ui-v1-0-8db3068421ef@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=3581; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=8BV9XKCCJHZtxTMIxPScYaA1rInwrGcYDZ1yr66/tJo=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqGXWOFMQhK4a1tths1eevg0SnUN23BHppedz8r up91MnUqN6JAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCahl1jgAKCRDa6OEJdZac 5TlND/9fVyASCBAIODtrOAsaeylTqbQeS0HsPlaRP9/xS6cxH0ivye0Qpj6veEs0OmzuTbIMvoZ pvRzxevsXZs4M+lo0R37H7OSd+y85SnnLlApsU9pOyiCTLcUHhvW8TnwEEb+Zri1+lklhvtcqNe NnDE6p0j8+7BwG70tm5DIlBOUN9AFWGEG9U3uar2OUUvjojSm1hhgaVRaoN26+jYGVripc8jrYg ExFJF42kxU+s1H5PFuvkkahgu7qk+IXZohQZZtmr9aX0Uw92UiBybT2Qe3ipPZvhKQGd2euvQkB 2gkWMRpvkc9jKw9Ry42Z67bgcIezRW3kQoUeDaj2sx5viBMXBarrx0TrmbaMaZsN4uyo6YYJd5O 8w3ix245/L+KWOvzGKE8FJ/lVz6FL73bN2t+Z5SRAZTww5oKEcqXwJFrmBSdGc6z9jiZGGKyrAP EVE5kQ27TY4n9Lc7FIub/vVgkv2rOJG1la38d0EGZS77rcTGJJHfcpsjZNPxQLkpZKACsl+K5NQ y0t/OanjCXTBcDCQCXYVm8q2asBNF9DEUrDxREIzwCjWzAiz5XKHs0fqZPfw86cOJCIWUBcwMI+ N/a7DbalUHDXHObtIcHTFRU101HGrC+Wld5dguvk17kmWw3RZk7ICHbBkT0ygdZb+R16jA6xGGM 0h+JLtxD4Cx2G5w== 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: 1780053460939158500 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. Signed-off-by: Marc-Andr=C3=A9 Lureau Reviewed-by: Fabiano Rosas --- include/hw/core/irq.h | 1 + hw/core/irq.c | 10 +++++----- system/qtest.c | 3 --- scripts/lsan_suppressions.txt | 8 -------- 4 files changed, 6 insertions(+), 16 deletions(-) diff --git a/include/hw/core/irq.h b/include/hw/core/irq.h index 291fdd67df4..93d5710a73e 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); diff --git a/hw/core/irq.c b/hw/core/irq.c index 106805e2417..fa11e9bc0aa 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) @@ -124,11 +127,8 @@ qemu_irq qemu_irq_invert(qemu_irq irq) void qemu_irq_intercept_in(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 a79d10d1361..b359a3e1c84 100644 --- a/system/qtest.c +++ b/system/qtest.c @@ -324,9 +324,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; 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 Sat May 30 17:44:14 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=1780053483; cv=none; d=zohomail.com; s=zohoarc; b=KLpESVJxzz8yQVoIKsDdDDltVJvYwM9/Adghv5ha4aU0iF/to+NaOJg+ZP5RXFyyqZfwdedAvUtfPMArn1MVqEKDt7mJ3ywm2bDR+p02hlsuWG6ZHdf3ZJG9xjib1Nf7tn27jT/t1sNAxp4+dc2b3gxx7aYRABb0HG2/2rqttqc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780053483; 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=HEHDqJaRo023gOsu1dwf4L1jqH/tjzHb9MVA3MRI9aSMF9cMM9I0SzqWLWqpy229O1/sJRIbOvayWO4XqTEBiwkpkzaHoEV8Jk4eA89AIKJaW3LDDsBdce8OEdT0j4Et0SuQ+8kN3pW1iJll7weXRTt9bK/JxT6CPg2Cmb9lLkY= 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 1780053483069242.22930817273175; Fri, 29 May 2026 04:18:03 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wSvDI-0001Am-As; Fri, 29 May 2026 07:17:16 -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 1wSvDG-0001AJ-9f for qemu-devel@nongnu.org; Fri, 29 May 2026 07:17:14 -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 1wSvDE-0008EP-PZ for qemu-devel@nongnu.org; Fri, 29 May 2026 07:17:14 -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-340-FofyBwm0N4W_NvY4Mrw5ug-1; Fri, 29 May 2026 07:17:08 -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-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id F12AB195608F; Fri, 29 May 2026 11:17:06 +0000 (UTC) Received: from localhost (unknown [10.44.22.6]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 55B5130001BB; Fri, 29 May 2026 11:17:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780053432; 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=U+Lyaz1hYaMjJQSAg49+WCZlIzzwSMJGGeX6jrngBIeUEY+cU+vVhcnFZrC5Nt2LmmCYlO e5U+rL2Mh+YpII0prsUXqduWBbUQDccJhS5vTDl3X9GZvCH3A8PujNGYrAMPaWKfp8Lpw2 qsoiXuA3zd92ihZ5upYz1u8wntXTJwc= X-MC-Unique: FofyBwm0N4W_NvY4Mrw5ug-1 X-Mimecast-MFC-AGG-ID: FofyBwm0N4W_NvY4Mrw5ug_1780053427 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Fri, 29 May 2026 15:16:25 +0400 Subject: [PATCH 04/32] scripts/lsan_suppressions: suppress fontconfig leaks MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260529-b4-ui-v1-4-8db3068421ef@redhat.com> References: <20260529-b4-ui-v1-0-8db3068421ef@redhat.com> In-Reply-To: <20260529-b4-ui-v1-0-8db3068421ef@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/ZANAwAKAdro4Ql1lpzlAcsmYgBqGXWOt0EnDVwmPiFzM0FeIB+W9FYSBy+QTwfH3 cW/5ttGzrSJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCahl1jgAKCRDa6OEJdZac 5WduD/4plJWVHeLaeN9X/C6EmBx+1t3ujfIla5kyd1CL1FZh2sZIzszvjuzR+bK4LGmmPBopocI LGyIG5xinYT2tZNaCeZ2+12KiuPwv4nE5Oe+s73M/ddvRnNxkKFY3q25Y5kM7RMRjxIk7izI6eH /upsKNFaYLt3mvMoQxUUbejijwgDwGl2gqoVsd8svERTM2VKGl25y0k9SZxLTHFC/d0arYktI9R kcCCI4wBsh8LoAQqK3WucFHD9KAWrrpx7X94jM9feT6mFCOHCnrz0f2ORdeJcABGmUroRhak87g rVGHO1i93ViYP9ukIBLguYGvVUsz9MrUzDOVyEHVqeN9245UJG86BSxg6zuHtqvZRkx5YVPoU5V QxLiPom9B9HDmG+AAM2wa9aaiPkyoWHYYXOrPZsswVVpJyqpvIibUqjFkSS63Vmpu0DNs6sZu2d HmV6UL76F+6J6zla6i9Q5wqOUfTyfReDKs6I5Trlpd8UajfIvtRp2FabUQRmX/lbA8J7BZzw6LC bOTVoBnZ5LFtMFXXTileG55RkUhLzS2L+9UvHoI++IUqDN7VkGxGQiKWGUfFQuwEpiNEnF0OCDH eBuaNXQUzY7cuyqpckgFOMLh3RDHK+Xk2dbt44re5bNhd93IeXz9I7eQC+QlchuCB9PHrH/W/Zr RU4nNMjmR00fK7A== 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: 1780053484244154100 Those are annoying reports for gtk/sdl etc. Signed-off-by: Marc-Andr=C3=A9 Lureau --- 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 Sat May 30 17:44:14 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=1780053485; cv=none; d=zohomail.com; s=zohoarc; b=hUnNhi7UIEIITD4DQT/4V73+a4cBgKZhGUqI6D23YBi8R9UgExY+BtIeSALtanbxCd7U1V5npd6cHzDYdR9/3kpr5WjMBJ6UEkwzKBGmjWp+XmnU6R5kodyHwhnMXD27fmTjtjW01IcYNWsaiWJ0pTKzQWzIeTogMWBynv/RJzs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780053485; 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=GIHhpdTLTpfrX5RjJ3cX47OwPSMHt3Yid/BlkV5k87dBdzwEPKR+yEAtSkBYB71ndx6qUoZVLcXH+hES3N9YLmQgXSAYs2ytCeQbwbgyyKLo2Kk95k7gtyyZdigBlBOxa6lon6mD1xXkLcRWUYsjxyhC/vNCv7toaXfeg8i6ufQ= 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 1780053485677690.4925064299852; Fri, 29 May 2026 04: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 1wSvDQ-0001CH-4d; Fri, 29 May 2026 07: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 1wSvDO-0001Bk-6l for qemu-devel@nongnu.org; Fri, 29 May 2026 07:17:22 -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 1wSvDM-0008G9-LS for qemu-devel@nongnu.org; Fri, 29 May 2026 07:17:21 -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-7-H9WSfipQM8yVYJYaxJ8CFg-1; Fri, 29 May 2026 07:17:14 -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-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id EC68A180060F; Fri, 29 May 2026 11:17:12 +0000 (UTC) Received: from localhost (unknown [10.44.22.6]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 8DBA11800465; Fri, 29 May 2026 11:17:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780053439; 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=eMz0RbIkUn9T9hmHektU02go7onX6aPCqYQ9i2+gCFbwbUY9hQvox2rE1wg6CbMcGi+zux EjwYETV+gHKGkXTLFGtQdexWWrnPCEBDGAWLcT1ubeHT66vEqzIrdsH7TpQv/PZWIEeFdm 1hvmkwUnIJLpTuGj4e9DSozvlCqoHo0= X-MC-Unique: H9WSfipQM8yVYJYaxJ8CFg-1 X-Mimecast-MFC-AGG-ID: H9WSfipQM8yVYJYaxJ8CFg_1780053433 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Fri, 29 May 2026 15:16:26 +0400 Subject: [PATCH 05/32] 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: <20260529-b4-ui-v1-5-8db3068421ef@redhat.com> References: <20260529-b4-ui-v1-0-8db3068421ef@redhat.com> In-Reply-To: <20260529-b4-ui-v1-0-8db3068421ef@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/ZANAwAKAdro4Ql1lpzlAcsmYgBqGXWPltb3cKVepBIG91NiEmrOif4orMn8xGCNw qk0xFDpKuWJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCahl1jwAKCRDa6OEJdZac 5WE7D/4rQ0y1hitU6hAzaioqr5HrgIIXkEe49k1LzynlsCAT5RaQqQJVw0AWt4u63wPhjSGQVKe 7kwwM042PTLsLC4c/r3LcJjqDSZf2lcllJZqTRkBU0rzC8xHFirL4ewgaRjDLxAPqIdxhI6Tov6 khCxZYw3FYvb7SKj4cIrPOgcIA6HJcS+HTxPgBZ5COpqJOk3y/4zGpryUpRriLf5h2o6zmOaQhJ g+QcFflItBt6/PQvIRZWSDQR+K+jz+XWv37Vd7spYqxOFEHlxdHYdWBZ4dQz9zw07Zz+Kdp7kur TXocn7CbERf1Ay89wNGDgWgGzcMv+tPY7WBwXFXWhY0rJY9jQUAU+pQTBCyn1MP0vHtrDJdc/1V s2PLqHTFaMT3G3QGTQoxAHfEDcEzEWIxNLhkRGFrR5ymwTDsXgjSePyW9VbYaGobdMoG2VxssNE 71Vt1HcYoQuhnHH8LmUyYRwfOv2hzEaiS51wDlBD3nYAmb1mRSrEMHEYVjhGzUpTYTlvTqwOTLZ 3kY9QkN6n0fE68q2sLJ9l15jbqciAa6CFftDrDjEqoepYladWxJ5YtXClrD/9eE6bpgg0t1HFK+ LNUPxzWg+t3NzeuchJieMYp/9Qbfh+pukqr4sRdLkdY2IloX51XOfSwInJBXy3Or6IRjwShhySy nPEgOV56DusQV9g== 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: -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: 1780053486568158500 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 Sat May 30 17:44:14 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=1780053458; cv=none; d=zohomail.com; s=zohoarc; b=QaVUM2ZlgjdrorCv7pnuCyvufI9WwIWTK8V8HIPvrxDXpt8UQhtIyIwXlF7WLS0R7yxL+rDl8jukV3ibMlByWKbb+NuyA8V2QNBOUcOwjWRo1git9F0299F63ig7faaXYt6aqlP7cCl5AEGshB4ngyzcCDVPzXmpN8eDYn/STZw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780053458; 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=Gdy7DCN5pCGDh9fqBNCskLYRwJ5q4vxICKGxms47BLYdnffuLXzWUnXWWL6waU4gYfz9YdamapYmFxGGMDQz17JbZFxDkB7c4XGUokxx08YIi9SOxrQ9GEiJRGt8kL9MiQ4Uimr4XxA/S6lASfJcMRc+/UZ92sTe+RbEU6RT+Ko= 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 1780053458552525.925646719222; Fri, 29 May 2026 04:17:38 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wSvDU-0001I6-SZ; Fri, 29 May 2026 07:17:28 -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 1wSvDS-0001HV-LB for qemu-devel@nongnu.org; Fri, 29 May 2026 07:17:26 -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 1wSvDR-0008Gi-8o for qemu-devel@nongnu.org; Fri, 29 May 2026 07:17: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-636-ZaDMdiGoOg6FZD66XPSgdA-1; Fri, 29 May 2026 07:17:21 -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 5E678195609D; Fri, 29 May 2026 11:17:19 +0000 (UTC) Received: from localhost (unknown [10.44.22.6]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 903B019560A3; Fri, 29 May 2026 11:17:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780053444; 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=LsO13kWoytQUAAf94CE82JTszqUIk4xNdG0eE0jwfxaU3cDQl9OkP7ue9ol98yTtDk4S1r ybwwxMablDfBZ3wMuKo/IsDF/uMicIYrw8hgsc+NfKXeZuYW6SldeptTmtK+05DkmfHwFQ VN7T3mw5juU59QazOYKu9kZDYGihf3Y= X-MC-Unique: ZaDMdiGoOg6FZD66XPSgdA-1 X-Mimecast-MFC-AGG-ID: ZaDMdiGoOg6FZD66XPSgdA_1780053439 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Fri, 29 May 2026 15:16:27 +0400 Subject: [PATCH 06/32] 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: <20260529-b4-ui-v1-6-8db3068421ef@redhat.com> References: <20260529-b4-ui-v1-0-8db3068421ef@redhat.com> In-Reply-To: <20260529-b4-ui-v1-0-8db3068421ef@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/ZANAwAKAdro4Ql1lpzlAcsmYgBqGXWPc0bZf1mgaQzXersmWjueBos/qYBP4Igar Kk2OIkoe5OJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCahl1jwAKCRDa6OEJdZac 5ew2EACKAy0oxj/D2Sd0sficzqdvFMRXmBTGNG5Y50blEq6Mx8Nt9Of/tNFZVTTVoMCaSJf9+X/ c3RGwNiqN+hYUrDPdpXV3jom3xfSJI58W1hvPhxHTMhPoz3jm0N+Q89TSNpvOBtAO0nQ2687m5S aEgVTVHPe1vMczG8wcXo9qSKiweWBKyeRz5bqaz5RhNPRfRdnIm0Qc2gbsya0x7iUtvSQa56alX 5fkEu0ShLnC955aCWVbRdPokNWS4oninU7CW0RHtBXgxaqvpSWMF1iaZBTJ5tI7fc6eVDMzT+bn gMWqv2ef68Rr1P1TjkgGfjqEYW3WrESOOJwsYjE6q8kn+F4wwo5fSg6L5wpxfsCcQrbCHlDTRgM +1yX0IgzCDHFT9P6rqlctdXpvxtgGZNEj51OQbTRt33ejOUrOd5s/ITfGtfKSFsJalhjgmMUi9C WWTGdYkexvxoWKPObiOmQMGlHohynLJYR0cujsLg3MRoDW61ZUtws84tc5imT/kANJStLzEJUx+ taadarXlZEb7Ved/kN6ydT+2oXH9sIj+MhJkpDDDp9acggDWftl/YDx8rDWi9APgf/227whGoIX XS73rd8FEUtwoL8yJ/0P2cCBf0VUpZibvIrUT3nUuZAhKtHODgSh1g1sDTO4AKHt0PxnkM9fbyT y18zN54N1gsPUIQ== 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: 1780053460826154100 Those helpers were added in glib 2.76. Signed-off-by: Marc-Andr=C3=A9 Lureau --- 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 Sat May 30 17:44:14 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=1780053497; cv=none; d=zohomail.com; s=zohoarc; b=iCbxd8Iqpn85T4bA5lVrk7STOR7/HBl/gvCFjVS/qLJb+YeIDMubENF8mJpGZyfnGt6LSTu1kQxktLwlhvHC7s1G2j09SGVX3Cqbg/e05gYRnobOM72NyEzrI+NnJR1AX/5KZHHq9vWcVNz3Ax5HcOtZOdwPCIt+sGq/7AgHDWU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780053497; 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=UYqQvVWu2q6uwEEm554hTnyGZJeDwOy2Av4yuY9W+14vpTS7r+ejD5e8PPi8LggbLwQLSwGNsLfRe5vsUgctNyLsqY5wzpHWk4lZYqx3Z5+udXMEY6+4XcdxBh4FDqjikoN0OLd8EEsyO7SttQ7/PVqBhcCE2xXqqiFJ7JsEa+o= 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 1780053497337244.0118847988267; Fri, 29 May 2026 04:18:17 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wSvDX-0001JV-BN; Fri, 29 May 2026 07:17:31 -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 1wSvDW-0001Ii-39 for qemu-devel@nongnu.org; Fri, 29 May 2026 07:17:30 -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 1wSvDU-0008H3-Mw for qemu-devel@nongnu.org; Fri, 29 May 2026 07:17:29 -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-684-T5hNag_2OGCcX2rAbzNF3w-1; Fri, 29 May 2026 07:17:27 -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 5C75918002C7; Fri, 29 May 2026 11:17:25 +0000 (UTC) Received: from localhost (unknown [10.44.22.6]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 87F6F30001BB; Fri, 29 May 2026 11:17:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780053448; 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=VYxLcVcpr3ZN/nsh9ShWAYDVx/3On4Xy1riqNQ+2psKO6YeFDK2MW5bqACDrqtniqHvIs3 ZboAV5j44/7/NSs1I5A5PcdNucCk7xWbMgE2S7rsgwcpfpyZ+F21dyH1fa9x3oJOJ8oKAR sLJlzkrhP4bXxVELrJsJnpIR8lHNzdU= X-MC-Unique: T5hNag_2OGCcX2rAbzNF3w-1 X-Mimecast-MFC-AGG-ID: T5hNag_2OGCcX2rAbzNF3w_1780053445 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Fri, 29 May 2026 15:16:28 +0400 Subject: [PATCH 07/32] 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: <20260529-b4-ui-v1-7-8db3068421ef@redhat.com> References: <20260529-b4-ui-v1-0-8db3068421ef@redhat.com> In-Reply-To: <20260529-b4-ui-v1-0-8db3068421ef@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/ZANAwAKAdro4Ql1lpzlAcsmYgBqGXWPPJofxC63hIwTlGShgcfhitkAPjEetB5BP DrPqxJr69iJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCahl1jwAKCRDa6OEJdZac 5fv6D/4hsVkImrjBXeTkB0yX1BDOEueiEw2N0XRUS8QCael0FcG3HCW3dA5KLWEy/5Rcnjm1HUC 4PhiYJjkEismrNJ6LQ80lfkKBw45oybog77wdBLIn7PXA3/WUKMFxUY7+DG1XMvrk1HtnTrxOr1 sCW5GUVgQscK5lGkbJfMRc/vl07qQnT7ARrXgYAvOugxUxra+uLIitI5vk8sIPP3afWdWE5Pmwc PStuIGwh29qBQk1W4Qjp7YHJU4X2z9xakGAWC3YzHsQc0/08Qv9eX4Ha9gbOI2UxrJadUmIowXg e2wOlu7KdHUgTetiiupXuCT28ge+MrSx7v3+d+H/Ixvamg7ILtCLTRgh2Uo+3t6JCLDn9XIFg3s 5fnKzqvtZQt3aEScC4bF81ToHwyu0NkYY4BxpMPfsWM8FKD9yZkZY8fd4+ks60DtsQJ00FAgNnO ts2cHyoEnH7zBNadlX4kEdRMusZyl4HlwMB/bJgj6RENDvJhr+mnyCoTDXoMqVCVJWrTgtDTz6I J0qQm9/9FYWnmKfdTQal+/z1sHuIapYxJghkV+hUUKz/1ryB1HQTEOKnvqrDTWj+hWG5ODzNv5G GrlsYs3ShR0X9xSpuIULjqbV0N7a6X5OKjlG5bzUxPySk9IOuOLlnaAo1z+A3aNcvI7jkNDdUkr KJIWsx6/DQgbFMw== 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: -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: 1780053498412154100 Fixes: 142ca628a7 ("ui: add a D-Bus display backend") Signed-off-by: Marc-Andr=C3=A9 Lureau --- 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 Sat May 30 17:44:14 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=1780053479; cv=none; d=zohomail.com; s=zohoarc; b=JDQbixS5WfGA/7Pr+J9XlBfMXAcYMscxmNkyujWJ7trwHxhmbWbsAlskezUXFJ7/qWc+bklj9JxsuZdFftldMNiUrqTYCFb2Ssj5LcQSyLQV0nzmgL6wa//n1sKvZJxLnKoQ48tR/p1drrsZU4VXSZDKTWkCo44uDMXHqn38aOY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780053479; 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=EZNWA6E/WXVIb4vTXBByz3VnAg43c6aEIl66sSgYYFvHUXGPBswGSnEt8moAiaEMZlmV+cwQ708Aok8ecFWepQqSLkvoFxTzuFcyeNcon36DjEUOqH3Bny4wz8USPTgGE92N2vakTTvgIgb+cJyH2lKNjn4IB3DgcbAvtZ/kwUY= 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 1780053479679775.6591716440598; Fri, 29 May 2026 04:17:59 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wSvDg-0001Qp-Pk; Fri, 29 May 2026 07:17: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 1wSvDf-0001QE-Cp for qemu-devel@nongnu.org; Fri, 29 May 2026 07:17: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 1wSvDd-0008L8-W6 for qemu-devel@nongnu.org; Fri, 29 May 2026 07:17: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-207-3ILKgsvnPqiez2vz-DrG9Q-1; Fri, 29 May 2026 07:17:32 -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-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 2B8551956080; Fri, 29 May 2026 11:17:31 +0000 (UTC) Received: from localhost (unknown [10.44.22.6]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 1776C30001BB; Fri, 29 May 2026 11:17:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780053457; 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=EXK5Huep0RV66X8hnJ6zrm9SOXOLL29XgYyk86MBmvxhql87vLsiIGyQn/7v71/vxvsXN4 ROz8XlCe4zWofrVl2YL4lT7zYXjDdDSMRdBeI3pBUiZ0iSP0q4//4rddp0MaR9L/DBN/dJ tL449YqW9Tddkweh1yjZKP1iN8CpPVA= X-MC-Unique: 3ILKgsvnPqiez2vz-DrG9Q-1 X-Mimecast-MFC-AGG-ID: 3ILKgsvnPqiez2vz-DrG9Q_1780053451 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Fri, 29 May 2026 15:16:29 +0400 Subject: [PATCH 08/32] 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: <20260529-b4-ui-v1-8-8db3068421ef@redhat.com> References: <20260529-b4-ui-v1-0-8db3068421ef@redhat.com> In-Reply-To: <20260529-b4-ui-v1-0-8db3068421ef@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/ZANAwAKAdro4Ql1lpzlAcsmYgBqGXWPVLLCzPc3rqkr/xqAtSmVT+mB1jI7R+sy3 ZN0dMIE2OeJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCahl1jwAKCRDa6OEJdZac 5U/GD/98/ZclwQMV2LAQY3RXlGIe2jXdZ+7fu8CEEANVEBx3fTQQjrO7676ZKeuSGIZQuOZsvbt shXH7W7MMr5RBxCxmlcSE+8GGKU8PuAzKAUFRU5FHe3HRNG0TPaeMX8imcNxa6r2AtP9KwiWGjy KpuOqBF1HI3yMyEf6qeoDDLjzEFXi1/TPtcWl8HjmGbeYPw7OrztLDICCBs93nYP3Fuu2P2arwm WToJoWmT1WUUsmxbVcV2kAA5keJAI9e7yC70A+rjmyLc0SZ9c8ExQ6o5i9gDX/Lh1hIBme7IWLU ab0jIj0PmfVL/WqZPktEZugYhmMsI0aCUMBl/QggaVI0Tc6bHLBiJzNeSTJwCO1lp6WVOhHd2Kf 4TlqEV0gDwSXP/NmdnxsGwWDXQRquv1kmRdFTyt88C4ngc1KK2ToeGYG/+qOXjH76t+Y5W/9Ukn Um/Erkoxi5LVju2oE4M3DHzIokRPO8S5XWyfA48Z1cCtsnFMv6f1BfSgU56HAnbqA/cjRBWO/fL ypYfsEbWYcJrbCHO/kLBSi9u1xaeFgh41+k992E5e6yOBS0k4rRumA8Q5tcnFmqTWcQXLa2d4xy mw13YOUzeFf+qdeoWZV/Fr6SM95hgCkUMiOMv+0O1PfOCCC0v6LCrDoK7YatkEra7mwmV0imL74 dHk5/x6WZGEnsig== 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: 1780053483104154100 While the coroutine is waiting, the console could be finalized. Keep a reference to prevent this. Signed-off-by: Marc-Andr=C3=A9 Lureau --- 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 Sat May 30 17:44:14 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=1780053488; cv=none; d=zohomail.com; s=zohoarc; b=L0mmj257Ol0rCnmZiPh6wd3yEIomjDzgYaDDv3obOQvkXvabj3KDqIavlELIvm/cN+bPJOFot2C69MQO5vKBVV0FN3n2RbYbT7UwREAwRq9ditsDKuE0MLvJXLvb0BPvC3Ki8UJyqLQInYj3fDml4OJxLmjCK2BIcwFDhWOGpB4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780053488; 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=EjF3SyuOym4PFCE7+uv/bk66N+vDIXuoJQKzCxkFb0V4iqHvKNlHEVQmJ+vK4yKLhhWAY5YwE5jertRHkZwGx6DcaknUrBegKjU6i6TiFzJcsLEPr6FpqVtMJ/A/CK8eFo8GCmMipOfHGpj9U4gCNxtSusreS9/FzaHex5KG6gk= 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 1780053488945186.2197285167848; Fri, 29 May 2026 04:18:08 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wSvDl-0001ZS-Mt; Fri, 29 May 2026 07:17:45 -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 1wSvDj-0001Sx-EV for qemu-devel@nongnu.org; Fri, 29 May 2026 07:17: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 1wSvDi-0008LT-4N for qemu-devel@nongnu.org; Fri, 29 May 2026 07:17:43 -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-652-5A4RuWDUOn6Eit6yA7ba1w-1; Fri, 29 May 2026 07:17:38 -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 EC9491956056; Fri, 29 May 2026 11:17:36 +0000 (UTC) Received: from localhost (unknown [10.44.22.6]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id DA91A30001BB; Fri, 29 May 2026 11:17:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780053461; 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=BTGte6UGs5GIIFfp1dBsFJM57tz7yh0l4UjoOl4446MfLyPP2ZKLBt6bpBO6Hib2MwzUFg QFK8KvqN+EKH65ZoQ/hlKDAdIAgZPsU4mokKCdXAys299Vyy0LWC0pNToIb1j75OYGb3pO mhN52vuWtZinuDiQRqI8UoKlMlH+/1U= X-MC-Unique: 5A4RuWDUOn6Eit6yA7ba1w-1 X-Mimecast-MFC-AGG-ID: 5A4RuWDUOn6Eit6yA7ba1w_1780053457 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Fri, 29 May 2026 15:16:30 +0400 Subject: [PATCH 09/32] ui: stop ui timer when closing MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260529-b4-ui-v1-9-8db3068421ef@redhat.com> References: <20260529-b4-ui-v1-0-8db3068421ef@redhat.com> In-Reply-To: <20260529-b4-ui-v1-0-8db3068421ef@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/ZANAwAKAdro4Ql1lpzlAcsmYgBqGXWPGqDqVgIA7MJNrgWiIzpODVWrg/A9meuyf 2c5FVMWJpCJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCahl1jwAKCRDa6OEJdZac 5XpjEACIGnxqyJqedzsgfRwo4Uh1+tYMzzei+CFirlKCbSIgrf1YXGvrJcMDXZwI/V/a3XbDqgf Z8bLR+NEtOE4ca1WXmOJWYeJjh3Sfv89RBzu5wdh3iNlR6PJQPxI/fnFrIoDpb3pzDDQby4p+/N hvsU85qFS/eytYmaGDAFyulGamVKxw9LcimJECMjR/Ym3RnMwn3AGFB+IGrjWyHObEMI7bSwXRd bCsfHfVbrMI5/6sz97pRlUutO1F+2PRnuYQvFe/YfUxuzwdbne8SlpYLLf8k99OTa1/X8NxkwLd b/NjQHK0IsRLxrMnCH/NahWyDgfrXh8ZEk/Wb9x8c0i0Rnax48Dime8pTJem6x86vBH4OUM4EzY 8d1IYGhhxhe8G7k3HMJnKqHBCl4uAns9VNMW/gLL2WsH8k/5JQvj0a3WKAjpdHyY2bpgnFW37+G 0/xAg78PCG/4PUQ2NN9f5HHFgMANv3kamFC47s8DvAohr98/TA6xnkJ4hifeeOMyjtN6seH42dT Ey7B9o7py3Cs/FLy6ZczQ9O1A7wIEjGo4KkBvtciD4GfMlrY6f0/F3agCTyE20FeYj0pT9E5aeV B2hxyStj7wcIlKl9fTysHvNYYVOl2vp3qwMBG4DY7xdHVdBMS+zsUjhTqFKbpmrjIVDEhVoTTDo dc9DqYXRvp+gH+g== 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: 1780053490326158500 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 --- 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 Sat May 30 17:44:14 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=1780053485; cv=none; d=zohomail.com; s=zohoarc; b=SaVostX0SJmkKAZnQFtqHjEhuX3hdQ+CMstoIvmi4hAK9VhMcMpAzlgIKOketq4ltoG3TqOUInfV+zldU2arkyl4b2fpeYxElVE+4N6r1+VryQf2XEY2QLYLgXmqRoB+XBw7iwzx+WYDNbVr0i+ilucUgjKi5uHwneKW9Lv1SZ8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780053485; 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=MMEV1PCGsCSHU0/u6abwNA9oEkjEBTxGdGSSo3/5Q875hfUgB/b/sXD7hoOssUCP+uMpV7MDECi2IfR044SxWBTbazbUd+dF/UKjb3XROMPowMkxzQESvwTC5q+z4GmCImgjOsb0rJsP7wuJJ+RaiiI6xd/wHD+rfb9AMRjbbo4= 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 1780053485365383.24492507233674; Fri, 29 May 2026 04: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 1wSvDs-00021h-Ft; Fri, 29 May 2026 07:17:52 -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 1wSvDq-0001wG-Mh for qemu-devel@nongnu.org; Fri, 29 May 2026 07:17:50 -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 1wSvDp-0008Ly-AO for qemu-devel@nongnu.org; Fri, 29 May 2026 07:17:50 -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-324-_ya0yHxuNEC61wKoZY96_A-1; Fri, 29 May 2026 07: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-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 20D661956053; Fri, 29 May 2026 11:17:43 +0000 (UTC) Received: from localhost (unknown [10.44.22.6]) by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 9981719560AB; Fri, 29 May 2026 11:17:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780053468; 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=XT2cnKQZlZU2bALdd7OsS1lp1I6zwwKcdfNzEli6LDx0U36d0kFDnqs+MJ4h2wiJcUdM3R eDRaclYfdynte5KSqoQDhTjKxnY+ih1twPQXvq4P6f6EKxGPoHB+U+QYERlL25L/ad1Vbj OspoSpCaLW6Rv7HKvB7ZEk3EOW7PCQY= X-MC-Unique: _ya0yHxuNEC61wKoZY96_A-1 X-Mimecast-MFC-AGG-ID: _ya0yHxuNEC61wKoZY96_A_1780053463 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Fri, 29 May 2026 15:16:31 +0400 Subject: [PATCH 10/32] 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: <20260529-b4-ui-v1-10-8db3068421ef@redhat.com> References: <20260529-b4-ui-v1-0-8db3068421ef@redhat.com> In-Reply-To: <20260529-b4-ui-v1-0-8db3068421ef@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/ZANAwAKAdro4Ql1lpzlAcsmYgBqGXWP8zpX6HgABBmyPuN/Hi+KBKper6zDnK6Yo RxDnevrW5aJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCahl1jwAKCRDa6OEJdZac 5R6CD/0QVLAVyqCHIqR143v6YZXJ5k7UH0YjjTL3HIjv/i8amibKN+IBWuGYRpALi7CP7q5Xw/v lLXQuIArQS9IGncrRFpaP/tb5XRe5xzT0VOsJJ1vQ0YqewAhLPWMGrZn4yMmC34DXM125yJucfl jKDD/ylUrpYq3/2MMlBve+Kc5RZb1ipVYtjeJFHZRke7BfDm3NK2cS6Hwr1kIMbrOaqcdeMnZLq Ul4oAAJkCml85LMpX1qHRDytCGBeESk4gXKUTXYcxJKI/yRCUJ2HwUYswDmBXXcx3QTt2/RGhWQ LpJyuFl684stWbEVg1D0QQrJEvNjPTeBicjmeM0KpPe2OPPLpaaGnbyzmsBuSx+thtXUeaZXKhR t74C5JXeYRRHkz+7am8tGSRSQ0ZJktPSQPESLiOimtkmEJgXLKbMVMu/VkWwAbmOgNpR37hMpbf H01NGv2oGbI/wOC4d7ypxOXcubp2m9Q1GPbo/O4G3ysDHsUg2OP98rYXCm+2pPJ2YSFcEh2kxXS 0TmMJPdsPn5EOgb83+pYQ2do78m/F6cTMq0M5v7knru5odsHXX/1EhwAQFyws/8vnq0tPZ21X6l 5gWRYB6iGZXB4S5feosS2LRQWoQkLicTWuvwvPYx2+ipDCOITvlFxSbFmMLXMcAwCjWGQnVXlwu C68GqEEFiVpYtWQ== 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: 1780053486525158500 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 --- 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 Sat May 30 17:44:14 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=1780053492; cv=none; d=zohomail.com; s=zohoarc; b=RqX0gy7o7ubITr9E3rMkXUGKUPv5m9zJjuwd+p8iGJe0HFBfnCajq0z1W/esLXZE/ONVKauMW/7ZZ+Jq4g7U5HRJ1DAg0Towang1/ITIV+tWvl+OotezH6bWcLyI4vNugypoY1piTzbbb4JekzVcRLom94w2eP81346Le97g58A= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780053492; 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=j/cEcvQnquw7526rjZBzslPpGaxzOERR2SYVgw4Wmhp+6DIp+p/70477DuOGVrQqN1tLcuxfo/5fv3HkJA3Ip10c+gDVl6GPkkRRJwiyU7Q+hotiGzIS2K4N+Zd/PNVcHLxviZd8e+MCX3IWove7TTZfhVzO0fwDgbDq1dpVaS4= 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 1780053492930608.8408541001088; Fri, 29 May 2026 04:18:12 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wSvE0-0002au-C4; Fri, 29 May 2026 07:18:00 -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 1wSvDw-0002JP-EF for qemu-devel@nongnu.org; Fri, 29 May 2026 07:17:56 -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 1wSvDu-0008Ma-Ux for qemu-devel@nongnu.org; Fri, 29 May 2026 07:17:56 -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-246-5N2GbwZ6PbO19PuSTVCZiA-1; Fri, 29 May 2026 07:17:50 -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-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id F12EA1956046; Fri, 29 May 2026 11:17:48 +0000 (UTC) Received: from localhost (unknown [10.44.22.6]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 742B219560A3; Fri, 29 May 2026 11:17:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780053474; 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=Grqbx7WtqGL84D+p1QgRxw/F+eaCjCYuzINxjyl9epoji9w8JOCGPqHw5+0qirMPrE6zNo LsykU3zSwLq8vb5U6sK8zldGIZiEM/x1UnvUMdsTsuLz7Ur+LUWURxNqTExLkM0wPJsf/g hy4yY2L4p88m0DJX0rms2jQoEX4uT1o= X-MC-Unique: 5N2GbwZ6PbO19PuSTVCZiA-1 X-Mimecast-MFC-AGG-ID: 5N2GbwZ6PbO19PuSTVCZiA_1780053469 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Fri, 29 May 2026 15:16:32 +0400 Subject: [PATCH 11/32] ui/spice: remove dead spice_displays MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260529-b4-ui-v1-11-8db3068421ef@redhat.com> References: <20260529-b4-ui-v1-0-8db3068421ef@redhat.com> In-Reply-To: <20260529-b4-ui-v1-0-8db3068421ef@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/ZANAwAKAdro4Ql1lpzlAcsmYgBqGXWPnx61QN2ZW9+8go94ELYVjFGko8GC2cbm/ 4N++ZlRLnuJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCahl1jwAKCRDa6OEJdZac 5S4kD/97m4rrAnsGETRA+EGtb1nxhHOyPu0oJeUorHua/ZOEC5Un1B0igmfnlWndPBl4aw5OhZJ +JBGQ0A2kHQzTwkEeN+0F24bzIj+XrH2uhJarXK4IigEcXyMqhq6zgARf9dsyznE/R/kXyDstu3 K1KHbh5YcUZtDBdjpLM/sBDK4Mzafbgv+5vTqN93LBY33DEhDq0E7s2bnNhO0sMtsgWUWflQW+c vEz+SxPNIJM0z4J6VG4B76gEhHMlEZbUJ/pYwNBOhGgPP/9P2C6tW+HadgQGx6/zNbURvcMPisS q0GbKadRZ6K1vH3FSOhM0wdMyHP9mt9ia9073B1XZ4R5a0cUnZEkQXz4BLBF+bQe7VBWKpEndH9 0IL3FeQZXykg7ZFkde7a+avnMyetjJY7XU8ganhcCynh+8LnkzQIMnmR/QqDuSdR0autf3uDqpH wUwhzzGI6EApt3Zu2z5T86oarTEe41JqorVB55jrQrnhGVCrrhpFkgbdqVoFWVLLmw58vwonAXd pAxT3tD/ZPk7twQBXWudg66uphQLGJvzvn4iDOqOo1b7lewhWaiJ4kPxEzdQsaytjAjzTxmDFQD k7UBDV+gUttGQT8+ERVJXRdIMYVWSf9l/jfw2Z4iLd4+vqx6T/g61vMrxcok8eag3iadsdhG9eO ru6qXI61GpJJ5xw== 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: 1780053494411158500 This is left-over from commit 9fa032866da ("spice: fix multihead support") Signed-off-by: Marc-Andr=C3=A9 Lureau --- 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 Sat May 30 17:44:14 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=1780053511; cv=none; d=zohomail.com; s=zohoarc; b=FnF4CBvBwcs5zamRvyRj3fYbfRe1IOWdbr/zROUYtY14megw5d/2MHEKhKbbM5KdPZxu8f/I8F8FoJqLeN+ZNbYv1oT8Wt74cVd4SRVxQljZOlfPcr6E9NaAaipKUdurE4cZIfvV5Q1jzVi2CuBG5rAhUyY+LstBsqYA6T8QFK0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780053511; 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=YyFZN0q/eTDCu0DngsA53k13jztx2uzgcEMWgGBP0nV6zESzrF4a/da/M/WfKGldPgSQoKN6zETg3QHbV0C9D6an6NSjlF5/aHvE8MgCocvBJA+mUSG0SS+WjfK8cNp80dNpGnhLMCKy9S8TbCFZM3KQlesMBNt+mJebiuHQfBY= 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 1780053511719815.4591967636944; Fri, 29 May 2026 04:18:31 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wSvE4-0002zr-7i; Fri, 29 May 2026 07: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 1wSvE2-0002tS-Vl for qemu-devel@nongnu.org; Fri, 29 May 2026 07:18:03 -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 1wSvE0-0008Mo-G9 for qemu-devel@nongnu.org; Fri, 29 May 2026 07: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-59-O4ncg85WP0a2v4rV12ut4A-1; Fri, 29 May 2026 07:17:56 -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-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 6D70219560AF; Fri, 29 May 2026 11:17:54 +0000 (UTC) Received: from localhost (unknown [10.44.22.6]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 02E42180034E; Fri, 29 May 2026 11:17:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780053479; 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=Opcqf1Xb0bKPwQOA3iXyRpNGHOip1pkovjHNBoNdNA/ucvt3ZJ22R6OBvKf8jPSfzpqyIx p93AsvviyVadJFrRjNdL1tZIl1BDlqFTLGs532s8elX0Myjp4Va2SdAlXDdWGiNGTBe7uI fwqCSrmxOJppu8okNWrW+G474U8V7mw= X-MC-Unique: O4ncg85WP0a2v4rV12ut4A-1 X-Mimecast-MFC-AGG-ID: O4ncg85WP0a2v4rV12ut4A_1780053474 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Fri, 29 May 2026 15:16:33 +0400 Subject: [PATCH 12/32] ui/spice: add cleanup on shutdown MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260529-b4-ui-v1-12-8db3068421ef@redhat.com> References: <20260529-b4-ui-v1-0-8db3068421ef@redhat.com> In-Reply-To: <20260529-b4-ui-v1-0-8db3068421ef@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/ZANAwAKAdro4Ql1lpzlAcsmYgBqGXWPK03WSUHnkP+GPc4OxLtDaEdpYpYxGVR0l +yaISb5IsOJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCahl1jwAKCRDa6OEJdZac 5fWQD/0eX+iNx0p4rMV0KkzsnSbgE5Pzp34EtrLACfwBJGezT9x+vGEovLn7Rpe/WqDv+SVt2sA 1ClIR3TDY8x7Stvgd6h1p+qCq2OoCLIX+JojhAdirk25mPrm+HqKofJeRMpXXKZdM8MMEnoJ7lE gJCXjdw/PngRK13q/yVZWZ0ULC3Un2CvoibUE9Mjw/5+Nbf0/4a/yItvmqzXba5lhRsn78fCLc8 XNy76GiHRlIxqSLBPDKOZbeoFq4P6hYJQ9hIkZyClazm+wXFfw3IR1cLzLpNkYMJc0nYUM+gThf /j0L23U6564cYRyUEfxyzSFtlvAgXfek/u8xGRmWUjC4B1VuOWUvo/hTbQZbrrndEQgcDQIXEjt XidwOoNby2utC19BTZr4IFf5CrawldiTH+82zs8Xw7GjsET54Kmc11vUPByTOdFW0tsQmKH40a8 qOtCsDLlRrn3g7HFpfO17sDi+mJAMvo2E1Ix2cSTyT2+Dmv15ZaklilB5D92/aAnZvbzQgXkkR9 vUkYyIWJBcriJBm6qretO0z2gp1ZsEFQG1gPDI3u5vWx0mHXlHxpBOmJhgZWEUX5s5OibWdGUN6 ZYQvD0ISGUNRNpRCzrPr2tnjgOgeMIOB0OdqCgXJ4S6Dzs0NrLqv/lWJf5bIEpfdVghA8rS/bwZ ziMwQez7PXmGnBw== 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: 1780053514815154100 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 --- 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 Sat May 30 17:44:14 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=1780053593; cv=none; d=zohomail.com; s=zohoarc; b=LKF8qk1ohklnXVDmWkUHN367HIN6xdFc8zQUyFLjaYLEIt9KWrvtzyL9LMaI+ze+kkzg1t954sgiXRRTXFscmDT7aq6yGYDFRdsUTYefMgM5/mIESRgjk79FFiFRdvEZuIggBubkVczbSO5ECG6is5DLcjbNUCjoHnASDDeFI3I= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780053593; 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=CXF59FaE7x8jVubtD5zIv34XQWHGluhCG44YVMK4S4tBHRQm4+g0XZ/fZRY7iFGEtFj5zFYHw+2kPTUknqsFS0JE6881XAIXPv0aDUSF+H1YJk7hxKJ2CbmaWrdYlt24TqfoSaRrfpxb+cdWOR8JpYnL82tkIM2NNPbxRUdGOA0= 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 1780053593229247.43732385404496; Fri, 29 May 2026 04:19:53 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wSvEA-0003i5-4R; Fri, 29 May 2026 07: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 1wSvE8-0003b3-QZ for qemu-devel@nongnu.org; Fri, 29 May 2026 07:18:08 -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 1wSvE7-0008Ny-0Y for qemu-devel@nongnu.org; Fri, 29 May 2026 07:18:08 -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-679-lEKu4HegM4eqnKPsVo-QsA-1; Fri, 29 May 2026 07: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-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 6D68418002CB; Fri, 29 May 2026 11:18:01 +0000 (UTC) Received: from localhost (unknown [10.44.22.6]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 09C2430001BB; Fri, 29 May 2026 11:17:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780053486; 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=eP3KheMLHG8X6cxF2d5Z972x1CLjpNk94qsqSql24za8huilyin+RYH9NrpkcqIKb3ed65 Ird+AkK7Av9vMt5hfOf/6t44UpnwOIQj/XRYeL5M7150Cgn/2WmD4hXsVWatNuLHVS5lwD pI4nwhvW+bZYoJ5Dt07Qj7XxOEn+HhM= X-MC-Unique: lEKu4HegM4eqnKPsVo-QsA-1 X-Mimecast-MFC-AGG-ID: lEKu4HegM4eqnKPsVo-QsA_1780053481 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Fri, 29 May 2026 15:16:34 +0400 Subject: [PATCH 13/32] ui: add display cleanup infrastructure MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260529-b4-ui-v1-13-8db3068421ef@redhat.com> References: <20260529-b4-ui-v1-0-8db3068421ef@redhat.com> In-Reply-To: <20260529-b4-ui-v1-0-8db3068421ef@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/ZANAwAKAdro4Ql1lpzlAcsmYgBqGXWPf2J/4X5hES5w7ZAm/yy69tgP0eOFF3Y8j TQbBIakI8eJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCahl1jwAKCRDa6OEJdZac 5RYXD/9xVay4bWz4/oCTbL53yEUtuP/35ZTRkx3n1+8cg21HEklnGAIGp3tm800TwI4gTY7LPtM sZLUO5bGhCEilagyXv9AXboENYzmhTtu/Q432lBxUhQbRPssz/jM/cXHCVw+18CFcyrqbufxmla CG2v1iqaNGT6KvAP5uS2dhZsFA/HRwuvVkId/8gck4BeZnQ+XrzAS5lk3SG5jLO/NWNdvV7ROF7 fHcHmHR0og/IzmLYS2VLZ2jF9JQXPxTDvmb7SvUjhh5hOUMWhMN6VessJVdoSDSmmhA0TdJTKnh jsPzL9r7UL1jdRqp/isLw665oCA9cXDFF0vSmjMttRKtc9+bRzXJ3+CkNMKILXQw6WIQjSVWKf7 PIn2dWqar1KBu3YLuK9F7SzRi8kdcIn0XTCn3RoGEVOM8vCBVAe2zTxZnrNSnCUnclYhdeDbdLG aVzH0v3MfNUwGkJZv9yy/Vj1+8lQhn4N+jkctgBaaP5rkZFNduPEIqfn1wjKjVG5xMlvfDxrV4h npm49o8eD+dcxnPlIstEJEV5QQf/CXID+IKY/nwZuTUAlyrMLW9zp2SM+M0KuLR8FU4wW/Xks0L 9Pdf7npb/Ck1d++7bGlJ3YEoxspD7CRUTXVp1uu/9quC4l2gOo41+luZYcJf0aQky3uFfG4YnA3 SjhxHN+hqBHNW7g== 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: 1780053596043154100 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 Sat May 30 17:44:14 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=1780053529; cv=none; d=zohomail.com; s=zohoarc; b=l4WBiiefLwpsPEx5l+McLpwjbChj0/6eVMP5R4vx6IMBRQXO4YchlIB7XZuda1VV7Hg5IlDfM2RqEe8CpaoI00c8xE0aaguBteeDW6bjmjWXurElKDpYtxgP30MTP3kvQz/OCkRlXaNC99yLLXLR+cHt6JGDbiGYNJZcKwa1xHg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780053529; 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=LzysuCYAuk5rkhdhRqpsf2YGiG7VWfac3yvBVGAwGPIDky0rKKoawmC0lda/P8Xg9WOMbWUvZ6HNAFf0PgVlqRk4a/MwsiIoDHcA9NPMpNAlG3kE+jpr+7GFOMANh8kyq1LmcVGYx3BWSaHkB5QprSTDXlRSke5GjHNtjcBTxjA= 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 178005352914376.96566499685514; Fri, 29 May 2026 04:18:49 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wSvEH-00044n-7Q; Fri, 29 May 2026 07: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 1wSvEF-00043m-Ul for qemu-devel@nongnu.org; Fri, 29 May 2026 07:18: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 1wSvEE-0008OT-HL for qemu-devel@nongnu.org; Fri, 29 May 2026 07:18: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-639-t8HBDzCgOpe8zvd7V7Sj-w-1; Fri, 29 May 2026 07:18:08 -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 30260195604F; Fri, 29 May 2026 11:18:07 +0000 (UTC) Received: from localhost (unknown [10.44.22.6]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id DB2A130001BB; Fri, 29 May 2026 11:18:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780053493; 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=bkyC2dd5zj6GuSmZhOgUg8qsYpAXbJNhrS0VnFFTWsvNZML8bCSOIaU849GTq6kG3Jg8em uYoAn9mldmxksFNSGs3G0vS2Cy6hYSIZUDZU8FKoiLVnUuj+8foXOSB1ZKWDuuMCM2uGSB mBh/y6rjKPBEX6unQriC4t9iQQpN2mA= X-MC-Unique: t8HBDzCgOpe8zvd7V7Sj-w-1 X-Mimecast-MFC-AGG-ID: t8HBDzCgOpe8zvd7V7Sj-w_1780053487 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Fri, 29 May 2026 15:16:35 +0400 Subject: [PATCH 14/32] ui/curses: implement display cleanup MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260529-b4-ui-v1-14-8db3068421ef@redhat.com> References: <20260529-b4-ui-v1-0-8db3068421ef@redhat.com> In-Reply-To: <20260529-b4-ui-v1-0-8db3068421ef@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/ZANAwAKAdro4Ql1lpzlAcsmYgBqGXWPZwEjcViyyg2gnmCfnqOP8BcS1kM6cVlyG rDYyXtE64SJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCahl1jwAKCRDa6OEJdZac 5VIXD/4+OzYq2YPrplNjABNziozPHnEwZ1Xxnt5co24euOYQ86I7JvR/uQzAUhaLSnXdrL1j69P FmKGT8Iy96+LLGjXhdFft1uySpq3bhUXgFvZ1pXDtCLLiobvTpp4ioa8uqNSiKmaOsnu00LY/LT Qy5LPOF9ooNbmO+K2i0CLOX26eNi0qvEdre/FqOUvfXclTWkQf4AEHhYvMD6Hxbe5usbxvknnIq fY0ycqidAZZ6p+X1mP0g87slHurS/sy0M9TmnpkWuwpqlmmL6wVJ8nT+mrgnVK3eL8Ihywnn9VF HDecy4mMXE6n9a/3nmprcKd1JEuMdjInvQpS4C0tiCkObU78upNpQy2sNAT8igqadXvluA2kmTr fM/WUYbu5qpJY6BeYwaAmeTj79ONmTcD+9FBve/cY9IvxpKWm8b6b5FVhdjA8eJRz/GNtZ2dMcb 5TGnYvn0KKixTnnMBNVd41y0ySp3D13eUr/wOkotF/52zN9BozXL2SPQFMDd3SLvTuDWswAMHC9 joO6AsbIwV+vfXdCKj1YGTewaVI+v28gywobq3HQ7ynXU0StQVlnBCrSSXVRb0ys8NoAjCHS7gv V9J4mxVtjHTq3kMBaA1MnZ9JQeUr5T4BMqBuME7XKqyXytx6i25+4OnKSi6NNDMTkm3jI7dlVXa DAzxEOCAA7PVx9g== 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: 1780053530965154100 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 Sat May 30 17:44:14 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=1780053516; cv=none; d=zohomail.com; s=zohoarc; b=nKnzR043qPBsyKD/US6tI8zLMzL5sR1z7c2+l7a8kYPhabpRa4iDLXVAo05/3R85gTioTRUOh+2ENxonKdfSIWVUtGOkIW66AC6RrCNPX3ilpIMwV/Qd3kA0K6s5rEotxtIjnW7hLTdTO/HD62jjdd5vCNgPpQZELIapjwkNlb8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780053516; 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=YKJyjyTkiRRawDqeMT1OsRKOpcFv5tzQ4IHqiml4JEt+gzQFx6l/4SDfA2S6kuVbCKbgRYPdXPZxvTMbfCMxcLIctns8otBLTMe/dLgLD3pYV+xNvBNAqx+wLUnuXem4zres0/HLNhEYxQTpeuyd+Lx29c2yA3+38ThBSNn0w8g= 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 1780053516219807.7807519987973; Fri, 29 May 2026 04:18:36 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wSvEP-0004Me-2R; Fri, 29 May 2026 07: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 1wSvEM-0004H0-7P for qemu-devel@nongnu.org; Fri, 29 May 2026 07:18: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 1wSvEK-0008Ol-Ng for qemu-devel@nongnu.org; Fri, 29 May 2026 07: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-222-BaFwf2flMjSDrkPiUd3OwQ-1; Fri, 29 May 2026 07:18:14 -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 ECC751800596; Fri, 29 May 2026 11:18:12 +0000 (UTC) Received: from localhost (unknown [10.44.22.6]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id CD0EE30001BB; Fri, 29 May 2026 11:18:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780053497; 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=TVmkFw4sFwp6L5LtRXlzYlkUSrtXjSlRFIfoNyVJdPYm+rXqI1dJkACocEyo/2LRsEXnD3 5U/aItgp20hL0LFHcr8P6F0gN0V0aD9+rR5ZwV2AQxSLQpO+gzzH1dyIR++PVdc983lPn/ oLT2JRQCsQHJNalDaXjtt23B9qs3lhg= X-MC-Unique: BaFwf2flMjSDrkPiUd3OwQ-1 X-Mimecast-MFC-AGG-ID: BaFwf2flMjSDrkPiUd3OwQ_1780053493 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Fri, 29 May 2026 15:16:36 +0400 Subject: [PATCH 15/32] ui/sdl2: implement display cleanup MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260529-b4-ui-v1-15-8db3068421ef@redhat.com> References: <20260529-b4-ui-v1-0-8db3068421ef@redhat.com> In-Reply-To: <20260529-b4-ui-v1-0-8db3068421ef@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/ZANAwAKAdro4Ql1lpzlAcsmYgBqGXWPy05pDIEkBStG5SjwiHyJmzHe/iS4EidfW E7AwgQMfdKJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCahl1jwAKCRDa6OEJdZac 5V/UD/96/8aou+paBn9WgVCjqdSX16kN8NOQw9Ufb1sScT2fHogOoKPmgoaHDZhYUuchgSC0p8n j8cOzuj4M6e5YDtNDVhc2FMRiJHd/W1zsIYvKVEBGyEbhydobldo8Ru8SES12YODO2AfubI0nBN HZfMMTtj7gICuzBy9YrKkQwrp2WgLugxmqFSVkJ96wNVWKIfPbmipVFRm8jZ4nPU2c1U5B4WlZ4 9NU4CWpog3PYRwenhUD6u7qoZzybyIC+eqh8pB9asv3n9f04+B8GAfm6Z4ol3Zcef77QEeJL51l phM9uLzd0wrKTOgVMHxBlfHRIh5cRWfcS/YVjmK2bHTjJmhzzmJu21imXVFb0a626Pq3Kzx5F4K EfWsQAwWkoGWdby7jyprDp7oMIBsZCdApTSxiKqTPMDWyaJUTeBQ9PPaP8PDOsyPsn5W7ILEu9N YquniZO7oiNUUnq3UaCprh24Hphzk70G9vzQiucoKfMHREBkxq5RjbgjFnjYxFsHgtEbbmar1ea +tDRbtQ0IK/r9Gjz/hYu08JB38xzE7kRnOsAgS7kUe6ped5XQ1klYCoyWsRMmMiEdfd5QaUIcc2 L/Ve9eC+jMXIni8l/9cdMNMyvo1c6CeIZDZhS/98BL2nwkHtkQxG838NabE6k0TYkKMXMd60taZ 8kHAbhA2pab6xHA== 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: -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: 1780053518746154100 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 Sat May 30 17:44:14 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=1780053528; cv=none; d=zohomail.com; s=zohoarc; b=hhAtpRm34f6jx4Y2ygeDaGKQefQ1WU5sjmmRkLLu7O+//kDr9kfs7NV3l4SWyZ2sfm0afAPLsM0Hn/7Z026+VxTkTYIbR2hvDqmLF5EWdGYcYGKtKl2Sg6mO1UcEyPpWv52ypHjqRGhs64bGcCyIvCU8EZ/lHfjNxHGFAUStP4g= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780053528; 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=KUNlK5r/SkW2brmkZmKV5T1SbVWuhmFXuP+crpkOAXxGXKQ9ged0vHCAQgWKFXF830nA3ENnPRpZSvJB4wAOU6SsEpB74BMs7MEfaQ8ZhtANvTStppvf4I6+ff/XQmOesGjRN5+bp4garQ6XoohiZYT46K0MWJ7Y1RoKgILZlGw= 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 1780053528191992.5834947673015; Fri, 29 May 2026 04:18:48 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wSvEZ-0004bx-6F; Fri, 29 May 2026 07:18:35 -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 1wSvER-0004Sk-9O for qemu-devel@nongnu.org; Fri, 29 May 2026 07:18:27 -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 1wSvEP-0008PT-Km for qemu-devel@nongnu.org; Fri, 29 May 2026 07:18:26 -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-479-PMp3dL_xODGFgMmKnlAs7g-1; Fri, 29 May 2026 07:18:20 -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 2A9A2195608B; Fri, 29 May 2026 11:18:19 +0000 (UTC) Received: from localhost (unknown [10.44.22.6]) by mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 98F101800357; Fri, 29 May 2026 11:18:17 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780053505; 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=J8yuaONezn5tjaWNZ2itKjEqoVgCPJm7+sQ1WxOwjzOmogIYEv6E7B35p4nwFEQ5vbXMhA OP5gaGjLifa7rkWsJdA5hKKSpzIwzV5i1iJdU48BYV0kr6oGj+VAqPvKgqiRZEEYNsImr8 xKwRVD1cF1WI6JBfMRw4WbIy09XBwoQ= X-MC-Unique: PMp3dL_xODGFgMmKnlAs7g-1 X-Mimecast-MFC-AGG-ID: PMp3dL_xODGFgMmKnlAs7g_1780053499 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Fri, 29 May 2026 15:16:37 +0400 Subject: [PATCH 16/32] ui/spice-app: implement display cleanup MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260529-b4-ui-v1-16-8db3068421ef@redhat.com> References: <20260529-b4-ui-v1-0-8db3068421ef@redhat.com> In-Reply-To: <20260529-b4-ui-v1-0-8db3068421ef@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/ZANAwAKAdro4Ql1lpzlAcsmYgBqGXWPxhqOpiI3mSnM18GPWh7GQCv7XNx9RFo/g DYnif9OfsOJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCahl1jwAKCRDa6OEJdZac 5eY9D/9EjtNl6u8rN/TKT8f4gB0sqwvR4qugTHOMjD8CUUtG+ii5/raGCRx8HDDvDGMHnJlc5Pu ZVTZCDN0I14wmDTyoqiNj3+fwS6T7jiIiVTwfeHPYpvNIT1iZQbxF7ytFXgcKtzYlv/Jrhr/TCu PaMLQdkt2dP9CJmFSKun636Ha/tPBN2GmVxqorl2IGa5BAA4WK6BIBygswlJKMTEG+f3ponuqoy pRiANbC0nA5c4hKDdx3iqagLr7fOWN5q8/J3Ke7x0D7HxJjl7ZxZWSBkl9EU0VMy8bV1d/7RfFf EZoPIShHNcAaZgPy5Jovg4AzKeKmouJHCQeLydZaAI0V+CRbKGVg0rI0sJlI+t+hdYQReC0k857 FYcmNbpV6XkiaXXuFJJrrO2LO23FEpf+XaqPJ3Qe3hItLzDj0K+OMppwyVl1IqB7a+si0SEtoDQ 8S5lcEYOvJSOC21Gx9ywKvmeS4gcStTtNG4EL1h6WsNpLdpE7SusCyCIZQynDXcqScYM+DhRRng Gn03QjrJBnuHEZUEvGT0oeDDnd8XkZrUedWJWGbFozOb1JTmkE3mkPbs76amakT3yblpqdQ0to4 oI40QrNJnXSqIVzrrG9tv2mNLZwSwAwsOgqGCecJ8zHvpaaVx3uMvHolEmAGZDbxVQcz/GYfyB1 r03sYNpBvDwfLZA== 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: 1780053530945154100 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 Sat May 30 17:44:14 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=1780053546; cv=none; d=zohomail.com; s=zohoarc; b=NSD8nnSeqmPq+Sf18RStHBtqexghfNSiag5gGd+ZSJ7WIIgD6gzKk7nwjYC91J23HrKXkkMfpUwVHh+Et/TN6nQ0omAq/afYT3yxvTQPH9hs9RaVbODrM/ueE2gEPOJa01lPQqIW+xQVzK2P/ncxDmooeY3d+9GIx5Fj2wwoaI0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780053546; 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=YgrM6djWhclr18JiSc3Qekd36qVfMhGNxlE7xWK6T+Lg3sVeRnld9jIIMWawvgLcFdOHzdiS+8qPKxNoTEfq5zheD8JgyZF8zZ2A/bCnOD0F5ZkLok1Y9ceCbG/DHRR/oHcgKsgtAzsualivRLzo6mBaEXkIHqzoGh19nW+hQ/w= 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 1780053546908867.22752771018; Fri, 29 May 2026 04:19:06 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wSvEl-0004vl-BR; Fri, 29 May 2026 07: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 1wSvEX-0004c7-TW for qemu-devel@nongnu.org; Fri, 29 May 2026 07:18:35 -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 1wSvEW-0008Qx-3G for qemu-devel@nongnu.org; Fri, 29 May 2026 07:18:33 -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-402-k_CRWTMePDOo4WKSO19HWg-1; Fri, 29 May 2026 07:18:26 -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 1A66F1800359; Fri, 29 May 2026 11:18:25 +0000 (UTC) Received: from localhost (unknown [10.44.22.6]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 68D9019560A3; Fri, 29 May 2026 11:18:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780053510; 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=WBzPlzv7HwQT+9LON+HHdzhShP4GZvipRRwevsj1sIxi9qEH5zJq6Nw75qKY44/9z5X2l/ E63ltox0//+PaPcTHDW1aHlOmlbXWaHXkBh3SAf0KsFoeCCB6MYNpKEu9e8mb5oxSOYuum jSZww8/KUAF3QsOtsKy+UQCUcOqmtFI= X-MC-Unique: k_CRWTMePDOo4WKSO19HWg-1 X-Mimecast-MFC-AGG-ID: k_CRWTMePDOo4WKSO19HWg_1780053505 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Fri, 29 May 2026 15:16:38 +0400 Subject: [PATCH 17/32] 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: <20260529-b4-ui-v1-17-8db3068421ef@redhat.com> References: <20260529-b4-ui-v1-0-8db3068421ef@redhat.com> In-Reply-To: <20260529-b4-ui-v1-0-8db3068421ef@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/ZANAwAKAdro4Ql1lpzlAcsmYgBqGXWP2sxRwfC+WYEXAj3BMe/SlpYmNO2dx23bl h7e8JH1y8KJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCahl1jwAKCRDa6OEJdZac 5YV4D/wJ8WGwTL/VI6ViuyNpE9D9YIT8FQTpVOiZLwmlu15P/C7KRHHjqgvsPxDX8gI8Vfe8PJa ZpgV3HStqGn9+wE83rleR0t270M/0vL825mDUlM4z0IFCQBevDgyYh4g4TflsnkOK0LdexVn3yu QXPrZJh9gceHN2S6qVISQKRGkHOLOVVbhKWtq3ISuFsfbH9lzvSLtesoYxIEtNGj90FT4PRkyAH 7yWqcLK58Ip1VzElQDrB1lpJjTqZQj2XSsl0bUsHNpNW89sTVF9a3eurM//GFPdssZUYPxDNLQS h8XNRaxxfz5HwH8KkiTw0ojU1kr68ORL7w4S7TvxG3pvPbPhX70FrgubAknwlImKZVGbWF/EGEZ 9bvnlmfrUTgAjJfhDUjd356WbewPq59N7iUVqQsKvZnr3sgZcwv1rh2KgIcN4jF3M8jblSTEJ7x v10LVaElUODdQ3+WISMV5TfjEGULKxJLNMs4wAcOcxs1xLxGiZu1Trybq2SBTMfqht2EkSmmthH zSG6OLRnL4wTDgx7ubLaL2SFGFuIebbl3fT+JSkh3HpftiN25yOYzXrUyLFVf4EZndDhWtHAxk0 VcCn67icOOj2TCs8+v2A6jkhB350gxgUGm+oO0UfqaAzBPoOKjZdcR6U3YsCYDlyYzAOrwfKb/Q Z+iyVNLTX9HLv3Q== 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: 1780053549247154100 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 Sat May 30 17:44:14 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=1780053577; cv=none; d=zohomail.com; s=zohoarc; b=jaWUH/bH8Qa0hMFcFgYK/2jVoegSLBsaoC8M9dxwrON3w9qFYO45c29PvSXuwrXEml6iMbq5GXWhaB0Yj7RCTH2ZKuOQ0XakhCarufiMJgrunovLQOtnnkodO0GfzQwG+96JIeZngMWMvx0ExF4tlfFgx/IzM/XpHIZ2qe69pNA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780053577; 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=F3t3fsy/rQMhLzCw6TeASl7W08VUb/n2CLQJ4CKE6G7nzMv9Np9sGq1gBEwexXvMsloi+73hH/a0vJFh7GlH9XFdY02R5zdCKyGVvOHu7AZqImcwyPlitNanhHVcWhxDCbjmrKtoWgO/J2SG0SmLnLTVs2zongWl/6fkyS8+BhI= 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 1780053577075448.4304242811603; Fri, 29 May 2026 04:19:37 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wSvEy-0005Kl-0s; Fri, 29 May 2026 07:19:00 -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 1wSvEe-0004oO-OM for qemu-devel@nongnu.org; Fri, 29 May 2026 07: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 1wSvEc-0008Up-Gk for qemu-devel@nongnu.org; Fri, 29 May 2026 07:18:40 -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-552-a5ColOvoOMqx7LPY4mVhrw-1; Fri, 29 May 2026 07:18:32 -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-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 67840180035D; Fri, 29 May 2026 11:18:31 +0000 (UTC) Received: from localhost (unknown [10.44.22.6]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 772431800465; Fri, 29 May 2026 11:18:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780053517; 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=YtCOxvKoaYtg3aaohO19udriKiDc6sUsLLmro9fPU3BpYxUaWzdHEcQbT4raM0IhhdMsqM XTSBq2rdp4zscFEZyyWwJBCggcfuHtaAcbFj8Vb7ti+oXeLyNC7D4VzkZ5bt+/rNxCFiwP jFOYPRi4JrjV+W3MlG7bUNwFwKKDcng= X-MC-Unique: a5ColOvoOMqx7LPY4mVhrw-1 X-Mimecast-MFC-AGG-ID: a5ColOvoOMqx7LPY4mVhrw_1780053511 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Fri, 29 May 2026 15:16:39 +0400 Subject: [PATCH 18/32] ui/cocoa: implement display cleanup MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260529-b4-ui-v1-18-8db3068421ef@redhat.com> References: <20260529-b4-ui-v1-0-8db3068421ef@redhat.com> In-Reply-To: <20260529-b4-ui-v1-0-8db3068421ef@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/ZANAwAKAdro4Ql1lpzlAcsmYgBqGXWPa7m+6vIPJ56/JF7/tJWVk4nAufRjhyHh5 xSQDcqL2AqJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCahl1jwAKCRDa6OEJdZac 5c6FD/9g52SVw7PClNGjj0BCgSjgJFIn0fxIGYe1pcqLZQ1b2D//O56jU8Z5IkzUI1OMyG584+X JM2n+rLcV2LOy42e+au69K58B29HPy5MbCkwIgLkCPvQuYmqOvbIzU5j1C3kPrm4oVGHedJBleh iKHNfBHJ2bQ9LSHmPBDOFaNFv5UTOSjuDieaEppU8dfX44tZwhzpxxEz5eJPtl4HWD13cTgijGY UR3TmwVk5M45l4aeL0+azeJKEV3VlThp6xDwjRKj8fyEguWukIp50MNTSXWNmskrfd9dlcgqzv5 A5bDoq1ISCKPWfe7JxHL1q49yWWJ8qPGX0Yl/DEQGgLqBGIXv59l2Akzs/eww7GvBR5YVzHo+TQ 72//yCHtxNTSbRJ0ZdrQ/WtBN7YJyh8BL3Cm+SXs41DeyY7xVHD5eMktFdVWTmIQ+QCOkEbVoWj FM+WzeJD3yISQFBgRsYQDP/aa4qz5qnn3UV9/hm0vp8MsqWk7kb6MgnGnqt0etNx/g0cSoC2xMX DbUz9KbHvJAIIvxiX7WTQlEpvYMEPR+itgwPi4VrX1YpofPQr9R4+cHyUm+N6FZKC0MofjB4Xr7 hgnuV09FBl1DPy/ZY9GdB35Y4np0gkQPP4T98xAHrbqg6tqf/OpY1BIAOmmk5a+Tm9RBI9EBSm/ fKp1gX9o9iz/J8A== 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: -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: 1780053578814158500 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 Sat May 30 17:44:14 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=1780053572; cv=none; d=zohomail.com; s=zohoarc; b=MW1zrLvLJcDOplx5T+hN0eWRf+PHvgaiiTVcgljSVlpj61C3wRR+nsWbg6U50lQZZJZFwMCzShhGOWJYwgI4XiyaDJIkeJ7TrCydUw2Pr1odKv2LbamS5TW0Q7ymgz8PZFtGyxVWzmkkq0Z4u9V/Z9Sd7BnvtEISPaiSb7bNlsg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780053572; 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=/45PWJIlvtplfS6tYbvgPglrF3hQ9j7W0s88Nl7Np3I=; b=D/xUchBCAWu87iOuIgH0ab13+sKJ0Baeg55Nxv0yljDPzTBfQoD1q/R0t1hpSev69wZAnJTdKzxCmlQsVkFu8TbKent9N7EwkIxYZU12muDAEa1rMKvBYPAI1GS2pWZax44cMkUqiB0mXkX6D8D5V5ZRdMO0fMG5NVQ83peixE8= 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 1780053572633766.6204260694791; Fri, 29 May 2026 04:19:32 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wSvEw-0005H9-P0; Fri, 29 May 2026 07:18: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 1wSvEk-0004uw-M5 for qemu-devel@nongnu.org; Fri, 29 May 2026 07:18:47 -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 1wSvEj-0008Ve-05 for qemu-devel@nongnu.org; Fri, 29 May 2026 07:18:46 -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-507-e-anqkd8Pxe3wUdtuW9Ksg-1; Fri, 29 May 2026 07:18:38 -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 323A419560AD; Fri, 29 May 2026 11:18:37 +0000 (UTC) Received: from localhost (unknown [10.44.22.6]) by mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id C43C21800357; Fri, 29 May 2026 11:18:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780053524; 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=/45PWJIlvtplfS6tYbvgPglrF3hQ9j7W0s88Nl7Np3I=; b=P3iFY3JO2R25qM4u3k/0DFFWCAcyVlW4FBKLbv2g7Jh6DRAcO+vLq38lSwHaSjlCULni73 GrkuczjS7/rArpQXyRjQPtikHZup6pe9GAtLuyqRy+Sf9qzLA7dEOxjSVgEBnIhs2YEuWn uwlq+g07F0zvpS+gRIO33v5o0T9Flms= X-MC-Unique: e-anqkd8Pxe3wUdtuW9Ksg-1 X-Mimecast-MFC-AGG-ID: e-anqkd8Pxe3wUdtuW9Ksg_1780053517 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Fri, 29 May 2026 15:16:40 +0400 Subject: [PATCH 19/32] ui/dbus: implement display cleanup MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260529-b4-ui-v1-19-8db3068421ef@redhat.com> References: <20260529-b4-ui-v1-0-8db3068421ef@redhat.com> In-Reply-To: <20260529-b4-ui-v1-0-8db3068421ef@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=1544; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=yhYBT7ch2dihRxPP22Eb7+8NveFD8IZ4MazvCK53hvk=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqGXWP8/yYRffcBVNRkiX9ZJIwvcT+nCheAXihm G7p0HMUuCCJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCahl1jwAKCRDa6OEJdZac 5WlTD/kBfOlyYHUn9hn9VTCkoIQViLtUODPu9uWa1+6ZdfvQK72Jq58qkDK3i4TZVICuSBaIDAX 3PfE5GQiNWeVHemPw28Vn340d3EfyjmGs8XlFzRwkCkxiOQLvnAp/WDJFDwnN7RsPa5lWI88arR zBs97D9TiPgaY8aJr/53sQkqsJo/uY0bDwEakVu9DftGU6RI4voV4YzDC4063FM3qmSHAgNK0FD +TwHWWll8po1CXkkDqXZ017SlFidUK5uMnJ/b7Sr8K9Loqxb3oZjVhCIOPqXg4tMCxE/LETCfWS xu7ZbH5R6i5483XPaippeDfx/dPvtVeRaJ/YQ12DwNoGbrM1oQlmyDEWxPjyjkOpjuiifEza7A7 QwuLUsSJ2sqdDHS2rIgq3Ji4hCURUI8IWZ5zlWWH+t4KmCdeqNncUroGZ/GM/u6klsDQhP3FqKg ZFtnhGChbSG8FlCxLLRSb3KrlrBKQjE1UMcP952PChmfnSoE/OOJzcnJER5+3m97WIy+m6qo4MB yg2vbE6951KrKYw/IzmdgVXEvRffOE/mUUrHLoCMn3yrqStWKnx8fnsvVWSUf7OEM0c9IXjwOJ6 gc82/YDwN2YkgSDxEeyP7R/UkhRSsYgic7eb8X+mGujhZknxAq43V6O16/3ixv98UGqibaiyRhP KvNsgqIYWk8frqw== 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: 1780053574788158500 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 0813a08f85e..0048951a7ab 100644 --- a/ui/dbus-console.c +++ b/ui/dbus-console.c @@ -151,6 +151,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); g_clear_object(&ddc->iface_touch); g_clear_object(&ddc->iface_mouse); 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 Sat May 30 17:44:14 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=1780053577; cv=none; d=zohomail.com; s=zohoarc; b=JAKlkz/izgq7Mn8exAc+hJToNWr+Nzra63zk3fsBHK/wEgQ549xAzVDL3dALcC7PfP3RIpguA1sA3ycXoh5XbfYyn9l1IisxXhXN1Im2ZV5eiW7z06fwaPbxL+z38hu28HkKoYtUh0sFZZ+oUJNas4xr8K/+5n7SFqHq6I48Rn0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780053577; 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=aI7e1BxNLCXt57SkPNXFDgUToMpbvvgHQWgDn8W2OJnQ+NvQ3osC3t/RbyOgVtBBiB99SImtpTQwRWIUimrkmeuyXlVukygfbma01urh7WBGStMdqfEgtch5poPImXCChGFMeftUFU6T+Ga2ETccvSo0axRnBAIEyw9/LxdUQgw= 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 1780053577037155.39914948545675; Fri, 29 May 2026 04:19:37 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wSvFD-0005bh-FC; Fri, 29 May 2026 07:19:15 -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 1wSvEw-0005Jy-Tk for qemu-devel@nongnu.org; Fri, 29 May 2026 07:18:59 -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 1wSvEm-00004v-8S for qemu-devel@nongnu.org; Fri, 29 May 2026 07:18: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-167-o8PBJGTENaiHgLAF637tVg-1; Fri, 29 May 2026 07:18:44 -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-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id C99FD180034C; Fri, 29 May 2026 11:18:42 +0000 (UTC) Received: from localhost (unknown [10.44.22.6]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id B903F1800465; Fri, 29 May 2026 11:18:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780053527; 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=T62PlfZ1pPw3k8vVty2M5XjJV3WmcOEjAP1PirKlwCHLKJe79Pogxo7wbfp0snFpLZqg0Y gKx2PKn5PdcwUeTdRbS4qKvGKYWa8H6ZEmhbaObsNmh6GWEJXjUXYkR6va6VL+WEOt2mL7 CUo3KpqLK5hIIeAA1R/cb5nflxvkNBE= X-MC-Unique: o8PBJGTENaiHgLAF637tVg-1 X-Mimecast-MFC-AGG-ID: o8PBJGTENaiHgLAF637tVg_1780053522 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Fri, 29 May 2026 15:16:41 +0400 Subject: [PATCH 20/32] ui/gtk: implement display cleanup MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260529-b4-ui-v1-20-8db3068421ef@redhat.com> References: <20260529-b4-ui-v1-0-8db3068421ef@redhat.com> In-Reply-To: <20260529-b4-ui-v1-0-8db3068421ef@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/ZANAwAKAdro4Ql1lpzlAcsmYgBqGXWPqk0VzjoqrEkm78M1bimp6BOO8wY4k3qdx EBKL0g4aI2JAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCahl1jwAKCRDa6OEJdZac 5Y4kD/9/UfSIw0E3itS6/uUeGvZFy1vXJWWDseUIvMis618AFmNMwEpE+WREglrBdL9/ql7ZlHE SYMULBzlg0XZOrAlrLQwSwlVph/fkKZ8qg7SeZLVOj4OJhI4LfG2cCp80Dld4xVAllWF4bRbGfv 60n8YKiU3TIeN7ohbKb49LNKl0D1pNOGx3VSyXg9W1w4JMsTCyJe7Utzu5LidZG+BLSotJjBDpx MC2MQg83Lbx3Wsd0pvJKofJ9NE2JDFTX+p+UdqIiVFawXZwsvF4akPsaz7WfFzmRvaAdQNN2rfz TRJmdkrDjXbzcoD+5nRvt3It9j8jAmkevvxj+jh5TiurGDeb3glMRArTSYeC+4S5Pd2f7Xua98n NVJaqXso8NyEV2uG88p3SzCexONMahI3zXQh6hahvxwH8tkilNHhwav6byvU+wDKYtD20dVXyB5 6zdj+2f19Eg5zdT1LJnWa1rUPNn7lYIxNbxwczbz48WYcYtCn9plNZMHpHqZgRGICEfw3ywnG2A V4fpU4prY3JcSfN/3E/SHmJcoLqCVD8Ygwz7ReeEA/9m6L1pzTPcbWbc0ftmV0MrUi0RdqgWGIp sPYJd8WABGvyHwCMv3JJKr7Ibn5fTiLpOd0XfwqLJEb0cDqiwIJ6JaROUU03jg+volzKx0qN76h P8YcAzZoruBppuw== 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: -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: 1780053578828158500 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 Sat May 30 17:44:14 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=1780053588; cv=none; d=zohomail.com; s=zohoarc; b=ZC5SPWJZboicDLxqLFTNA5rdnTytNcZ4Zpwx3OgdBWclUBbs6KV6eFPQorgWZG+2RCs1BejCHSpyWMRZCFZdLOk8QqtHYPFq8u6aUX7tIlidjpn5pdGg1dFO4mPkHn+O0G50iMOjrMXT2QSGtD7JR1oXZK93cjALP1MA0PMaTNc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780053588; 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=LYMEVkxKBmeYdTwj2fEag81CLWWLmJmIdUeEeQUjUbSpJd6MoE1binkdzbuK+C5nzCaddkkepXfh3bsvydbjuC2SDwywhXd9cSqyn/KiTrb3b/wh+e3WBaA1YLW6yvD6/ezuB5cjiCjZQU0Y0Fr8y4v1Ubsxtki2PU99zfM2v3I= 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 1780053588239605.5907974141844; Fri, 29 May 2026 04:19:48 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wSvFV-0005xW-I2; Fri, 29 May 2026 07:19: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 1wSvF0-0005PW-26 for qemu-devel@nongnu.org; Fri, 29 May 2026 07:19:03 -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 1wSvEw-00005K-MT for qemu-devel@nongnu.org; Fri, 29 May 2026 07:19:01 -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-359-QjVqiAR2MrmEBTAPd11dxw-1; Fri, 29 May 2026 07:18: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-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id D2C531956048; Fri, 29 May 2026 11:18:48 +0000 (UTC) Received: from localhost (unknown [10.44.22.6]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 5A92A180034E; Fri, 29 May 2026 11:18:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780053533; 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=hn267fG0tSEqUslHr94YWQJsh/pXDswEWAjdTgrZN9s1F4+j5puj63v//Q8c15FRlPTgsF 0hVZM7ifYvjwLOLpdZJjeleaAZYNqiykc05/T1T5hVR/t++P9bxygV0pHl4xUBuN46UEPg +6QDW6K/8rE4uafMGOuOD+5PML6CTao= X-MC-Unique: QjVqiAR2MrmEBTAPd11dxw-1 X-Mimecast-MFC-AGG-ID: QjVqiAR2MrmEBTAPd11dxw_1780053528 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Fri, 29 May 2026 15:16:42 +0400 Subject: [PATCH 21/32] 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: <20260529-b4-ui-v1-21-8db3068421ef@redhat.com> References: <20260529-b4-ui-v1-0-8db3068421ef@redhat.com> In-Reply-To: <20260529-b4-ui-v1-0-8db3068421ef@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/ZANAwAKAdro4Ql1lpzlAcsmYgBqGXWPq9ZqGU11LnXbYZX54+wCqEl+g4xpjIdEN vFCgW5X9K+JAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCahl1jwAKCRDa6OEJdZac 5fMSD/4sTR68kRcsTeV8l9ILIROG2CjYxiUhZxxX0Ezuluk6mXb7H7eZb1MHsr+Br0TT9X6Hro4 niOH6O3ds5BxctvFj82gq9R2sYGBR5byEKx94cHSVXXIXgm3fIj6TrVRKl72q9J9wY6vojLRy1b RQd8p5Y2zkL2uUNqEd8fs2UW3aCPNBgo0jLeIPyXtLmhrtH9n+BQBzUDmU0UT+/EL5srBR2/X7I AoOfajOUr+WD9vDBdxGzRxGoRl706ZN+W8QkcDsxx88Piuo744m5hQ2kB908fklRb88j0Ck3RN5 xVwnWPb2GcqQkCUjNKTzN1xFiNsCxFH5ptwnFPGaKc2mzneYdDiuHdaT+RNDq6UZLjYgY3ZfXxx l1+2wGWu75/P2o0zbeZJOkDkT9ly3f72zK2blNWyKAJYkE0r3UJIeBN8+qSkZdJIU8h+UaZnnmd 4r41PqEOvM61Qi03TdVUxVnQ7wmsSK3Ru7qyxxaG+5zfys5P/jMP0E4yrO69qZimfFsVMFBAIsi 7GJIqrPN0U1c+9gEY8xpuKY53kGfzRJvSYEzLuF2V7I1CvTremDvzD+tvFIqaIl3zIEz/xFPZi6 2bPG4h38jFn/j2fptJ7wcdMcDuZhom5yeKe2rW+IXtXMU+y52Ue7XdDiMn5rAhbea5QRK7cNv6k dVeMwlVkb0g0r1w== 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: 1780053589942154100 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 Sat May 30 17:44:14 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=1780053592; cv=none; d=zohomail.com; s=zohoarc; b=OBCQl4B6EjCyhzf1v4RS+fu+eHDhhSBX4PRO9YmkUq9U36bCjUX6QRrBDlVVjRmho9GV7v2sO4by28bHQLuMbn9V68Ngmuoyi7CySGez7tpn1eDG0kaYaZGXR59vZwl0q4xUFrITRoroTjacnKv49tpYAZ1q27Gx5AudBBNOgJQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780053592; 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=J4vGEZO4HTeXwmZO/chqZkaQuV8nRXY3vxWfJTUQUm7oj8cfs5+Tf2iPyO5GfT/FNICCvzTzCHrPfPd+Sof5vFS7VflOqU6ck4lxICatcTZxWz3nx176PHpvwjld7slCjXzZYrsya7Wg4dQNkRLOHVgJC9K2IElbo9p9L0Hdo8Q= 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 1780053592566871.6510658778606; Fri, 29 May 2026 04:19:52 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wSvFW-00061L-3H; Fri, 29 May 2026 07:19:34 -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 1wSvF0-0005PX-25 for qemu-devel@nongnu.org; Fri, 29 May 2026 07:19:03 -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 1wSvEx-00005g-Od for qemu-devel@nongnu.org; Fri, 29 May 2026 07:19:01 -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-645-irJNknhUOMuqrEHmEyzUiw-1; Fri, 29 May 2026 07:18:55 -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 921341800359; Fri, 29 May 2026 11:18:54 +0000 (UTC) Received: from localhost (unknown [10.44.22.6]) by mx-prod-int-10.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 1549B1688; Fri, 29 May 2026 11:18:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780053539; 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=BeLWhyDipe+dmyXDCzyfovVmBdw3ljyc4ibN4K06349Jciflm/hRvmwurwZrBKd0NSqOFN mGw4ayTX5MNpuPiUw3mqjmvr05vFV105S1eDWZhumlAJeWytA5alpUUiYr7/2wPO3rdOPm T17OtQTz+mOosHTqVAyY+knG7KGg8To= X-MC-Unique: irJNknhUOMuqrEHmEyzUiw-1 X-Mimecast-MFC-AGG-ID: irJNknhUOMuqrEHmEyzUiw_1780053534 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Fri, 29 May 2026 15:16:43 +0400 Subject: [PATCH 22/32] 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: <20260529-b4-ui-v1-22-8db3068421ef@redhat.com> References: <20260529-b4-ui-v1-0-8db3068421ef@redhat.com> In-Reply-To: <20260529-b4-ui-v1-0-8db3068421ef@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=kA0DAAoB2ujhCXWWnOUByyZiAGoZdY+j0VS4O509dlYbXm85z2Gk05NilYcTSu+b0P4l8fv3J 4kCMwQAAQoAHRYhBIepvZM/h8YG0nb2Ldro4Ql1lpzlBQJqGXWPAAoJENro4Ql1lpzlLg0P/1FS gFrC5bktt/GH2+N0dzfWGnlzp6Zal5j0thriz4SKAIiaDAVD0WNI4UqT2ybvkOYtqAQzuynsbdk jogSyV4LlEpuL+9fODbRzsiS27N9pr8knIOo8bwcDBsfZUm/iJaJAfoAYWszSD+W/L0Z7XFWge4 UHfkAYOHH1TPbcP9rJK+DjiVbwMRSIAA8FfynFIjVbm5mBt83NtWCGyWuBrM/Jel/IvTqBdfMjz zjdIgVvDlHflFZsTu4IENAtMuSmiaZMK3R2nisG/DBziPkNHlUlMkHkn/bKePkZJjOn/+CbjE3Y 82MswIlERaRpJpENvsmWEfvkKQ482MnjIqTyCo4JC2ex2apHR0BdHzBPhp3PLlMbCuDKrniX7la Ji+u1zPW0Z4ndODj2O03K410NnQ9JYHwp31BxqgUR4Ov5K7IgyOESP0jaeDokuhulRbOU2m1SZs C3J34uMcXGw5mf5/BG+0zlBK/NU0fe1qvf6U44IWeBNTsZIAKKzKGzTrSFmSQStltXBXz2g0uJY 9PuZxw/gIQAdLPvtsgG8D+ZdpPmsj5Zse/OhwfhhlKmnwlGtncBaz7ivuBCZGxrIlLqNpxp25RS wDpE10DhH53WbjZ0by+/2V1GLeqfOGH/yvEVkXHkZlaohojmVKiBWFHDItYjkpDiivYraUgtmEV pGcaY 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: 1780053594000154100 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 Sat May 30 17:44:14 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=1780053617; cv=none; d=zohomail.com; s=zohoarc; b=i4ot2uVUfkzAM8Pad4cKu0bN+4wcHNnLKJ6IfxavxFQaaAbM2aX9NLUfa8AJ5sbRrrz7i+QpHEr1A8qtQxMTQd5f03hD+Ml25eP4WaNRFIej7ujrTJvdabOzmTHnri2UWgQIUbL8Z9mtqU/9o+TMhW9ysYBVDOWITH7ZArk+tUg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780053617; 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=lSgo+QWZe77xttF52J239DuyBLKxfPdpr1fQ8Uyb0YvzLPa8OHwo7NWjOTepkVIAoyMzmwo2WrGGqhqAgWVgPzqYI56BBmxDuoVZguewdGUOzFjtsFK7A1uBYv5oOnQlMToV5bfeBCwAd6cYPtcwFjvPFw8vM7STRdd6W7kckwo= 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 1780053617866396.97580556098694; Fri, 29 May 2026 04:20:17 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wSvFb-0006V3-Tb; Fri, 29 May 2026 07: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 1wSvF5-0005Ud-T1 for qemu-devel@nongnu.org; Fri, 29 May 2026 07:19:09 -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 1wSvF4-00007S-F0 for qemu-devel@nongnu.org; Fri, 29 May 2026 07:19:07 -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-613-a7qBskdNMnKNycwLpYOtIQ-1; Fri, 29 May 2026 07:19:01 -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-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 16983195608D; Fri, 29 May 2026 11:19:00 +0000 (UTC) Received: from localhost (unknown [10.44.22.6]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 10D881800465; Fri, 29 May 2026 11:18:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780053545; 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=IHZDFCpcYMnL/nfARILD0XH5cpH3vKPOnNJyGvcQv9FmA1A+xcAiOwxdqsxNbrR4Wb2XEb Yb6vL2F05r6+mJ7/1hrG+Dcb/6Af8RmOTSswz1dJMglWW/N1nRaP2P2scZN/eUaeuesEnz aU2BmayP29BOh2zfytgGxEUUmUXR760= X-MC-Unique: a7qBskdNMnKNycwLpYOtIQ-1 X-Mimecast-MFC-AGG-ID: a7qBskdNMnKNycwLpYOtIQ_1780053540 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Fri, 29 May 2026 15:16:44 +0400 Subject: [PATCH 23/32] 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: <20260529-b4-ui-v1-23-8db3068421ef@redhat.com> References: <20260529-b4-ui-v1-0-8db3068421ef@redhat.com> In-Reply-To: <20260529-b4-ui-v1-0-8db3068421ef@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/ZANAwAKAdro4Ql1lpzlAcsmYgBqGXWQKmmZNnQR52NM4ITNFtrcpbAsIDn0WzojF U0Qh/pAPCqJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCahl1kAAKCRDa6OEJdZac 5R2PD/4/GETBTcFOLnaZVVEnI4920ajtAFMAV5Z3crxYdqfPyxdQS0MhieGvDn59AsUWdyA0KO6 jDGV/wub4+91sQRKsRwx8MHaY8aEZvUHyrChlBM/+icdzBNzBz8KCUkDkGItW9gGttQcQb4FNua tVV6EInDISmkyjPwC8lGBmSbIx1aZTcS2eOQ92h3BJBBZLiNv9rATBhI2VwXkqCPoykUw3L4Ra5 h0eoM2YgT8DaABVGm3ChDFsX2oNQfAamrvLQk1N5yyUinpUPMfYYksebdIn7ewaWbAR833hs3TT tDKJ6L6IM4tLRxyQpD6tgeNJ4nSvYhVR5TbkE3/38HXqhkyQ5+LRhl+QRt0RwhZXZREcCq25SGF WUeiJnTPmcJNurx1q2TjlepY459eSDfQ1X4659CwujUpl0DJaqXrLEX3CqP5SZFREaRXhkFVN99 4UI87Zbf9MIHee2yCf+KzcLftuuO6XniQsiEF3K4ZvhI479yFWYA39iRp+lrWoOtu1N5G7Y5iu+ w80/tIXqDgMwU3UerHgYDwxA4cFnypDfPoPJNhfp7LfW2wxBi8soKs8DNZheQxD0uqruKgP/OJC ylujCPtlOjgiaGCTSBOEXN55eghxPs+Dm0ktg3tgLoWmnG7oeVOxqquohIIEvrEvGRUu7jgqrRp YOXjV/KiPdirFjQ== 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: 1780053620383154100 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 Sat May 30 17:44:14 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=1780053592; cv=none; d=zohomail.com; s=zohoarc; b=kiPuDO8Tzg2gePRR3T3m8LqMtfwOzCjsvZ1iO5VxRC7ZpNrRSfpt6Vew8cPP1+ilz4SNZ7Bdt1+K0ZVKCco//xvtxVpiSknHyZpKCNxUEviOkuOOSaDnHmU1HqG8kQdyPsVjkXVnuzcNA6z1ghXDyUuQ5mE4OwO/UC/pBvTGJzw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780053592; 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=Einm1jk8bIWM9OZsBtk94jcsAK30LeqabZQUPmjTZYU=; b=MXj+m72JOMvV1TICoZKANh3LS0up0LVPjMcNuwE6j4U27AM0hklZ9jyo6iC5eUyFGxfbDpUhndymkJDrhA9+Kd/CQVqlrYu66EAOe8Z7XLpWI11oLABqA3qRYg4GKSYQFFs2DK2e2SLKQjdIc0ePWMjuz9rtYTTF6pGc4CCQPvw= 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 1780053592550703.1225426674529; Fri, 29 May 2026 04:19:52 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wSvFV-00060g-II; Fri, 29 May 2026 07:19: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 1wSvFA-0005aA-Bg for qemu-devel@nongnu.org; Fri, 29 May 2026 07:19:13 -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 1wSvF8-00007l-9S for qemu-devel@nongnu.org; Fri, 29 May 2026 07:19:12 -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-377-DKYevtdiNOuyuVMeQXmekA-1; Fri, 29 May 2026 07:19:07 -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-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 9FF6C1956056; Fri, 29 May 2026 11:19:05 +0000 (UTC) Received: from localhost (unknown [10.44.22.6]) by mx-prod-int-10.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id A4C921686; Fri, 29 May 2026 11:19:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780053549; 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=Einm1jk8bIWM9OZsBtk94jcsAK30LeqabZQUPmjTZYU=; b=PMOXsuLv9T4RwHpXBNpyStYBfSJl8HOHkPqn8ugIPxxNsmMlvV6Sz+nbC6komibCWNX7yA hHig+K5Km+B0LvzGMMjDUzJhkdYy+sp5SXGntslcWZBqvuMoJT+H996SVw3Gh+5Jq/0/aT DxbKOrj83ae0MUoLc1JOnuf82U0ObDE= X-MC-Unique: DKYevtdiNOuyuVMeQXmekA-1 X-Mimecast-MFC-AGG-ID: DKYevtdiNOuyuVMeQXmekA_1780053545 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Fri, 29 May 2026 15:16:45 +0400 Subject: [PATCH 24/32] 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: <20260529-b4-ui-v1-24-8db3068421ef@redhat.com> References: <20260529-b4-ui-v1-0-8db3068421ef@redhat.com> In-Reply-To: <20260529-b4-ui-v1-0-8db3068421ef@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=7108; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=4/WnCu13N53IfCYuVQgThsJH8NL+w5lgpJaoF6zvqO0=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqGXWQniveC6i2mvZ/okneIcNkvpBCxSpzcTLwV VvY3+Rryi+JAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCahl1kAAKCRDa6OEJdZac 5ZvlD/4tKVxD3EFFKjHE8twyTwRuL881m/XvnF5NoRt6JZ1TZv7qq0ezYiPd+hnl+//ba1/KACM fZzweG55elxg/4MYqQKqGH+SHGF/Pxqxne8T7ezGhAXUk3L2Rgxf246CjW6VTR2H3+upKEI441Z bFAmMlUazhAkFS2qNRCFcO8QEl8tUsgEYBxiyk/jbeY/pEoKkq6pE1YfznMQTYDpLwnzUwnsoef xn5lLw9QUNuR7hcuPKVHSmyBy43ObhYxsrjrWrJoY54tRfgHGIWCtoKoPJUIglLogDgvGPkI4dQ xpkZMjWRwxoDiuWt/bUDENCktXtFTvdEeXqpZiba4O86chfuSuOBt6qX8wQxllfE79o8TXYS/lf M+Ds438gBc25lZ8ve3VqZrVVaYW1B5dSG9UpdPrINGai3zl50SpcJlzLYfNo8s6Xt17gn6XHy71 CGe7PHOPkCFQph//mVfknE4Juw95Ouhnng3atMYaGtPm1vRY93ajTQeE+SRCXyTK3e+9HbDAd8c OdjdYUEK6wV0IH4MQLYae9WO84dT6s6jcHGl9BjU+zDJQoAHhmPqG/RRoEYOwqJYMm9vmnm9hhZ WJNsUOsBQc+MZ4nwaUd5lHNViUDMhwlo9/Yl711u9iNjzvEAn/ychn1VSUJwhtR85v1N75rL42S LpApQ/PFOAolKGA== 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: 1780053594076154100 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..141cb69d494 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; +#if defined(CONFIG_VTE) + case GD_VC_VTE: + fifo8_destroy(&vc->vte.out_fifo); + break; +#endif + } + + 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 Sat May 30 17:44:14 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=1780053604; cv=none; d=zohomail.com; s=zohoarc; b=Ovsd8cK3HD40bCYNL3SEKVHjVP+7ewzrnNNhAopzIXbYEDozDW0mMOxBR4/HuHYGSyeum8sq8WBYvMl+hwjZbNt4buE0irHji0jtSVe9iWq2exieWab4Ycw1hv5G4TuvtI9FKUYCwGBR1D40IGAyKRg43bbsDvCh3GVa/3WWGTo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780053604; 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=P24QCtBOPZAeXQrOeIzkI8XwMxEGYxQbOqY5zX/qu3E=; b=mIkiL5GDXx80qjIY7OEY1tCxH1DIy+12AcVPuDjGxSLg/A8Kk3QjTqgtixBwzKrtKKagQoAvVGOAjvzNKG9mcVN5uz7hho38IjVc0r1mHI6CxBMabedPwtlSloAC118gha1fk7yJFqMFBq4QBsMq/sX3E7VgrpFfTLz4rvrfBmE= 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 1780053604498579.004092677869; Fri, 29 May 2026 04:20:04 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wSvFi-0007Wl-RW; Fri, 29 May 2026 07:19:46 -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 1wSvFE-0005kZ-0z for qemu-devel@nongnu.org; Fri, 29 May 2026 07: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 1wSvFC-00008e-EC for qemu-devel@nongnu.org; Fri, 29 May 2026 07:19:15 -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-380-mCtGLnbXM3KIU718ehGerA-1; Fri, 29 May 2026 07:19:12 -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-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 485AB195608F; Fri, 29 May 2026 11:19:11 +0000 (UTC) Received: from localhost (unknown [10.44.22.6]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id C2E7430001BB; Fri, 29 May 2026 11:19:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780053553; 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=P24QCtBOPZAeXQrOeIzkI8XwMxEGYxQbOqY5zX/qu3E=; b=R7S5OLSf942I92NpWkiew+PNQF3QsK1yRUOs1KXaJfUYfs74kAqz5ogyaFR+QGKCrwqmwk w+aVup1UGGhnGPYZj+ItvrSqPTt2poW89NPeIWDpFmsflrieO55QwHFoWxY5n9PUB81tMT SZP9WSJkm+2XSwhLgnTVZkvSHVfv+Ho= X-MC-Unique: mCtGLnbXM3KIU718ehGerA-1 X-Mimecast-MFC-AGG-ID: mCtGLnbXM3KIU718ehGerA_1780053551 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Fri, 29 May 2026 15:16:46 +0400 Subject: [PATCH 25/32] 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: <20260529-b4-ui-v1-25-8db3068421ef@redhat.com> References: <20260529-b4-ui-v1-0-8db3068421ef@redhat.com> In-Reply-To: <20260529-b4-ui-v1-0-8db3068421ef@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=oLtNKsYquzH+c0KmFeoUQjI9K4WgPxTZf34uK0eOhmk=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqGXWQ0PYqNtxwLiCeGTcdkRi5qBQqD5GvoSFdR X0MeWN6BRaJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCahl1kAAKCRDa6OEJdZac 5Q1iD/99Pkc88COzYZxAegOJMhjkdur+MvXyScL1ZgBC3Jxeb3pH9jeN9O6NOlRuW63uGlYkwbe T7sXXAALv9wT1EOiPmUF/kEUM4Mf+iLCJnQST1ZtqCaA16UAaQugtFCSX3BjEnIzU+p2xUD6pXN QdpXRuSxuc6BF6nzDBum0sWpTObvaLIAat52IR4FHVg4U4vuC/2jF7TH316VH4drNLsKw1m0XkI 010aJ1s3NTJud4J2doBUymMi+eXL1vcDmy6rd/lLssM/6UVLEN3hKMr2PXg4vMgImf+cDBUq9Uu qZU3Q5ZZNgN/bCN1Som+BOuxYuLhg6jzi9PF6T8s57U3l0358T7ZKk5S9lYJGS6U4KrVjqN+uOS fZqlm0GCYVw0BbBhmzZ80nV5UTYcVmPcxzIWrWZKLsh6FQMRy3FkQLhiEQOpz98RTfEvKqscrkN Dw8O5CBygNbFXlJYnTjcthbaC/9dVca1GvDZrQcDCn8hvx7W+SNgjbiGMwgPtIfO8iLvb2yBGM+ TdXDYbkdkEb4VnT75tz4IqDlH7IvplrWqz36Y+y37ENevmrdnBtVfx7dYx79/7lF5yWBQ6Ut1MT qrUHPY44P3bx6Wii1o0IV2trfhpoYkgaEdicBMuwt1+6Y4L38FF7dNnpE3LJZ4jcOoUmZ1sJoDX Kbx5Hn5DgIf+KAA== 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: 1780053606184154100 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 141cb69d494..1b9523739f6 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 Sat May 30 17:44:14 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=1780053614; cv=none; d=zohomail.com; s=zohoarc; b=V9rfTv6emFylrZ9FYdIihod9iFqOzndG/eHeEXWtFEOjb1Pk8+ledL4dA1eEU9fXg3P77sVBxrHLt9s+6LzuuYrz/KLe2IWBvzYxqSEOpCJW+p4Cqg00SSK8/+IYx/4EvoYOfCsQRvHydbzw7QxX9AHhshmeFyY6yVrR+YZ7esM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780053614; 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=fFLQic1odOEJS7jxxkDIvznt7a1JZqAICE40xDmHx0Y=; b=VrA5WhpF6j3z2K0I40ExQJRIZ+aooSMKFPLm5+QUs/LPZkoLZ6rDYicp//0F3D97NNNjBOhea3sJg0GZU/NZXQ+v+d7H0ft8aF/vo4rJKGv/HU34u56B4T6+AknTf+joE3ykyW8bvY+w9B8RiM8OGh/TnnvZ5aiqPVjqYmRV0bQ= 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 178005361466046.05437039887988; Fri, 29 May 2026 04:20:14 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wSvFf-0006tg-5N; Fri, 29 May 2026 07:19:43 -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 1wSvFX-0006GC-Ev for qemu-devel@nongnu.org; Fri, 29 May 2026 07:19:35 -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 1wSvFU-00009Q-Bm for qemu-devel@nongnu.org; Fri, 29 May 2026 07:19: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-131-OkiouUlAMAGQ2ecXLdx9NQ-1; Fri, 29 May 2026 07:19:18 -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-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 781B41800367; Fri, 29 May 2026 11:19:17 +0000 (UTC) Received: from localhost (unknown [10.44.22.6]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id F3180180034E; Fri, 29 May 2026 11:19:15 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780053562; 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=fFLQic1odOEJS7jxxkDIvznt7a1JZqAICE40xDmHx0Y=; b=S+OB2x7L5IAkRiNekFaOUklcLnaOO/PmYSWPzeF3DUYDIpgSm/6x8HVlUzBWWMvVL0yAFR KXaeiEbwtdFDT5xZTZ26MYbijryZ/UpdsbLexYIv1M1TjU4SZGRuhb0nORh80FfPEe3Mse 01HTg12E/VrIcAnxw81XNi8p0rrWsAA= X-MC-Unique: OkiouUlAMAGQ2ecXLdx9NQ-1 X-Mimecast-MFC-AGG-ID: OkiouUlAMAGQ2ecXLdx9NQ_1780053557 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Fri, 29 May 2026 15:16:47 +0400 Subject: [PATCH 26/32] 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: <20260529-b4-ui-v1-26-8db3068421ef@redhat.com> References: <20260529-b4-ui-v1-0-8db3068421ef@redhat.com> In-Reply-To: <20260529-b4-ui-v1-0-8db3068421ef@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=KvnVhLJN6mddD7fzqPwpeGKA7KloxgOqh/fGh8tpBws=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqGXWQswSKBfnedUlS8e+L8BSQ2b6+JY9r32sm6 P5EZ2HmW1+JAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCahl1kAAKCRDa6OEJdZac 5X+jD/91sHWZyKn02vNDc+/wn8ZcML7JqYzd68qCeUXwEPbBFOD8z56qT2hUyhQirotmtipE7Pl uw56Sk0gaNyhLfdVc0JPmCpwG/RH3/YWjRQGBc1XlM2YMqsf7vFG5ugxbW2FUdt1kCw2q3pXlnh 2aJCXZg4jAArk32tT88F/KR1Ttaa6hMg+KFiZGsYTTJdyBUIUIPcIyzOulxqDR5jYgwcW/TXfZV TwPijEV/SEoxBsHTzQRGZLLlaSQJGo7FtBB/U5CFyyBIFnVioc111nP0PfZ9duC3qJq425xcNKs kPYoAhqYUY6VoCAhzmH8/Zy1yP6BFZ/DKYOaPttOE2MAd0L2zQ87aHi9nOLHjpFSmQbBh9KCWov vSU2iuylxFEz4S9kToAfDFLU6mbCaZNKYV5VVGpww20tbhCKL+RkmwxB2Qhnk268sjF1rQ1ep/W QLifVbTfg/x1Gv8RLKQRVF7+i1ZlpoMoZ4OnQfdewS8Vz8gtSvBsXOWR6Zt/HerhEtU5y9A/3nD eVU9YNPisOqkbn983ZcHqxmPH9DfzWlZU4IQj9FTOY/8F7AHSFfi5SruxY5sUmWV5kF6OOu9Eb3 DNfhmCF3YcjJExWSyUgKBK3NrWSMuiytHw9pcSgChAqsVW1FsJqVCU9zakInbqCELQEEpqY5tQN 8AwtbpRPc9nJqDA== 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: -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: 1780053616290154100 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 1b9523739f6..c4d05757c75 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 Sat May 30 17:44:14 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=1780053635; cv=none; d=zohomail.com; s=zohoarc; b=f9p5W+fXdXF+yDeRqfK+p9D6UfcOmFYhEGM0WvmXdeb8FZFqz0buPAkUXYKyPF2SRh11eleAE/2+FmhdexvMvtMuQ+Nu1Flx3iRtoTAG7+O3B/ZuuSzxBDd6VyQBYnkM/RF3+y4mVnUXMyMgV8ehXCUbK+v1J//QjeHVcSp4BU4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780053635; 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=xhAw3rvivOcBtY3wquknb2OTIx5eFaUNuS8q94yaeoM=; b=JPHAjeIWlmq/6RnLVLhybU3al5fmfQ2LWDmfICMfW9XlO9+AnSxji73b7BZQ82I2bKd3WPfh5cdSJQrjH8VPIPHc7GQZmuIXgE/mpgzM3CVcd1r3BnFYX5UX1j8A20zAS0WLhnHnl/ku6riNCBxWel4zZuCduosDAgbOnWeSQiY= 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 1780053635763280.2520742680215; Fri, 29 May 2026 04:20:35 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wSvFh-0007Le-Jy; Fri, 29 May 2026 07:19:45 -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 1wSvFY-0006KE-6y for qemu-devel@nongnu.org; Fri, 29 May 2026 07:19:37 -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 1wSvFU-00009p-KP for qemu-devel@nongnu.org; Fri, 29 May 2026 07:19:35 -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-642-tOX6hJFhPP2Zcmm8jqbnAw-1; Fri, 29 May 2026 07:19:24 -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 115D7195609D; Fri, 29 May 2026 11:19:23 +0000 (UTC) Received: from localhost (unknown [10.44.22.6]) by mx-prod-int-10.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 966A91686; Fri, 29 May 2026 11:19:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780053565; 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=xhAw3rvivOcBtY3wquknb2OTIx5eFaUNuS8q94yaeoM=; b=IoarkbU3jfJ02yL1+U0RS60XgsYOyGODQAecFEUj3fWQvzkDpzIf332N5GpjzK5Hbq2ExK H1a9XErHpF53SHlIipCJjTQzu/YGCRa7IvWlj+ZHTdmTPAeGoTQHKMmdBx7JMSyVincdbf 95VKySaPPBGu6zJbaXemqLt8xwrzEsk= X-MC-Unique: tOX6hJFhPP2Zcmm8jqbnAw-1 X-Mimecast-MFC-AGG-ID: tOX6hJFhPP2Zcmm8jqbnAw_1780053563 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Fri, 29 May 2026 15:16:48 +0400 Subject: [PATCH 27/32] 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: <20260529-b4-ui-v1-27-8db3068421ef@redhat.com> References: <20260529-b4-ui-v1-0-8db3068421ef@redhat.com> In-Reply-To: <20260529-b4-ui-v1-0-8db3068421ef@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=jKW1Y4illMP2TEKP73n7st4DLDWnIz6r32DQkYbBroU=; b=owEBbAKT/ZANAwAKAdro4Ql1lpzlAcsmYgBqGXWQbj6FZaYTyeW7WhDhHMlcwpzE9AXjjPJvi FJz6e7SDjqJAjIEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCahl1kAAKCRDa6OEJdZac 5RYHD/dt8nC3xk/Sl1Spd2v5CsHj60gmX12ACsuVrnyMtVLIAy99dW8LyQhLZe6LyY2+ar0FDTS 1O7ItbVTn6cszE6QjxSu595/7xSBVurb6NqKZbd6kR2sKBiPHCZn9gbQLgqRkQQgp1Fa5G7cwcA kQZmB7ZkMcLjyqnU/MvXWHRdqD4uSnnO76+CcTCWPkcd6FrK8lIVlNxGrq8Mq3CO+x3HYfSJUir U049B3iVVEMjiJMDNrm7OKzUg+Hiw9DTZwlTdrP+xtlz7Xbo6kHwkc5oXrEJRJ4ITHAUm8LUR+W H6OS3oAnaq0dRc0I65J3lLwFmUdxpcyDPd+KpM2mispIvhGnJ0Uw3aMfDgtMcJKyi2hjCk+Oemg doIHZwaJh2l7W9UV+1vIKBtaqexI9+7lyJuNINt5x9aW8GNVvXuOieLDvZS9B3Pf6JHpIpQwV7k WMpN6k29Fsdjzy/K+V82/Yoen9z//SKv9IxFVuvC4VcTGeYOuzf2aVd9djIGRUXMFJKBjk4efZy +mPKnAFYPmKsBRHXtVBOhLSzm/mSmNcilTHpehPgV7uXmsVQP9XSJ9N5nsfYjDjxMLNIkJPDh3P v3lQL3i2dkjh30WGCgMHXutdlsJCq4DW6kxMC5B8AL+7wLGEIku01i1gCEFhk7IaUr63ZgwGKgc iGJiO2DJj1sF2 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: 1780053637743158500 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 c4d05757c75..621bd269b3a 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 Sat May 30 17:44:14 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=1780053610; cv=none; d=zohomail.com; s=zohoarc; b=me714OIP4HzeMPdG2i6d3mtOHNDfuTPuJ8ato/5D6KYaZsUw9shrGhLDYiDax4jc4hqh3fa4n07azEImsSB4shYJruVb9zNClSeA19/iHhQRzSIZ49tW6boBuSU+V2Ov7sHO0BSVla3QiHmn/dFszTQL5q0UiDhVVe8AV1OfBUc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780053610; 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=CHOkvGWufjp/y099x56FTlR/PeGGvWsdoJQUNIOsnLM=; b=abvLVRcvjH1qzGTfNb6eXcPevfI+sVkcRHfSTRZwjWGgGvqN975Up51+ALBT+pqbqyf2ZbgO+mmZfetKkBOqydt3cSxjVMXtqTwpr9TCgCC1BjnirSxI+w1KPC+Rp4gZH8vMEr1ozVOYTneudl0NyXnW+wkFqlgA5BOv+i7+sqc= 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 1780053610248527.9605972041091; Fri, 29 May 2026 04:20:10 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wSvFf-00070o-SQ; Fri, 29 May 2026 07:19:43 -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 1wSvFZ-0006Tu-TG for qemu-devel@nongnu.org; Fri, 29 May 2026 07:19:38 -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 1wSvFW-0000C0-8F for qemu-devel@nongnu.org; Fri, 29 May 2026 07:19:36 -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-590-hgRJm8o1P9yHLFSSYqHq3g-1; Fri, 29 May 2026 07:19:30 -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 D8501195609F; Fri, 29 May 2026 11:19:28 +0000 (UTC) Received: from localhost (unknown [10.44.22.6]) by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 82B7C1955D86; Fri, 29 May 2026 11:19:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780053573; 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=CHOkvGWufjp/y099x56FTlR/PeGGvWsdoJQUNIOsnLM=; b=LjuUSJdbul7ua2IxTZA3VA7xkZxbVf0xNQVE5i97EyjlJDEHfjvajLghKsLX3O4iPhkxWa YK8dqP+1+AyNlZzyX5NneXJmLwEM8hPnLlqkmTFRV9e93WSZ7ZBhlw5aFVPDU54gSMhz5z Rb1uNV8hAUhquY0B1q0sRB/W+5/kmMc= X-MC-Unique: hgRJm8o1P9yHLFSSYqHq3g-1 X-Mimecast-MFC-AGG-ID: hgRJm8o1P9yHLFSSYqHq3g_1780053569 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Fri, 29 May 2026 15:16:49 +0400 Subject: [PATCH 28/32] 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: <20260529-b4-ui-v1-28-8db3068421ef@redhat.com> References: <20260529-b4-ui-v1-0-8db3068421ef@redhat.com> In-Reply-To: <20260529-b4-ui-v1-0-8db3068421ef@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=GbainaUhJrfWlWtuOMb6jyKWhk+MosM9wh23qdWFcGI=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqGXWQ4w8jfcvCbVYySo0SJaVc04p4T9QjJAbLk WAcq2bToiKJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCahl1kAAKCRDa6OEJdZac 5YDED/9G4ZExyzTbGBkqe4qXooN1wWqfd4fh/cgsBJxNk2qDLhilXe8PaTNLtP9/+PNqF9wHMqT NFKapPkVdilNwb44IttxqgYmRgS5Zi2gvG2vagkHKb7x1l4VZ26+StJVl6L+/+s85doJGSR2mak GMpbJNXkJxV7Hs7gc7DtHCWGA2jRq1FON5+5TRDbsQjbxTuOq5W6JjCSDaSZzotUWRTJIDts/9L O7fdJfRyP0BlfzmreeYLPACG6NXqfU6KcxEOoIv6dKCC7xf3VjVUpNspVR/ZqesNaFMUb/+EuCB XODAEOlbWCP0jJA4ycphb4zBc5Li12K3m7h/4Z2txYVlLjFqx9gzwhfbusuIpUJPRgBAnloIUnF NLn0ZERJ62j1F+tIJnwtPSCnLwnFI+edvmF9E9jeaVCR0AgQwpejdxmVIYOvuXMorDLYliLaXJ7 XTpVUpXmNNdNgy6jwOEKlpEr6GKhiKywzNAPWBQGP6z9L9Qtt/hdQfBw1kxRQvKYMRL1vw/czdN FYl18MjQfPo9rksj/wNdL+ej7foHSTcEhQyr66w/Jqzj2/+RYPb6dMMvSkk2mLGIqI+w7l7A2yK i4dt/E3fvyrdN4F4ShmCMTHrR1OoHerrp6FlVHbVAhBH2KeLXp2tL82HqvbBoJ6ChiX6919jeZK xG3rm7eM626P5uw== 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: 1780053611524158500 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 621bd269b3a..484dd9159c2 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 Sat May 30 17:44:14 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=1780053652; cv=none; d=zohomail.com; s=zohoarc; b=RnH7EK91g/JerMy0wbzFwQulujZefsDl+MLQLDlQRT+fgB3hLqaW6nTOU5YAIHyLzh1m8OlDBB3N27NdqlzyXAfo37XMuE1lK+QPtEQI7BDWGi9Xpeyn0yBUDiKeX7rn2JgKt2+sHrQrf8zqhUt+1Y0MoePR2zk0EY2WbfsRETI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780053652; 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=NjXdupGJxZlfZxvUpPDnjCrjuXW/5jXU4yZ2wZuXrCyzM1lL1o0Sn4YXb9gLwN514KjffsUFu49RuNXEvQaqq+XwwSFVy9z8v9UOHLmlNaNpJBWO98yCrztB7V7juqyfoErhF/++EEQAdnXID6e7Q09/iZPnqagqe/tjuVUbc+I= 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 1780053652057449.2067117600882; Fri, 29 May 2026 04: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 1wSvFi-0007Nq-0K; Fri, 29 May 2026 07:19:46 -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 1wSvFe-0006ue-TN for qemu-devel@nongnu.org; Fri, 29 May 2026 07:19:42 -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 1wSvFd-0000Dd-7H for qemu-devel@nongnu.org; Fri, 29 May 2026 07:19:42 -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-672-q-UsIZ3YOseU2FhNMuMfUw-1; Fri, 29 May 2026 07:19:36 -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 CFF3B180060D; Fri, 29 May 2026 11:19:34 +0000 (UTC) Received: from localhost (unknown [10.44.22.6]) by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id B917F1955D86; Fri, 29 May 2026 11:19:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780053580; 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=Bf0YwOeL4XltxPs4hQ89ty1bOpcvZekMwhk2GKFSiI0cTgRVdCbHiNnDPXr97a3WLQk+Jr wbabyoTD/9Nqme6kg2kyuwq539PE4bVG5TXBPSMLLSRyoqoH8r+gE6MOGCV4zNDRHHq821 JJhgBnTGTiOpLanOC/TyNbUlMAJV5lQ= X-MC-Unique: q-UsIZ3YOseU2FhNMuMfUw-1 X-Mimecast-MFC-AGG-ID: q-UsIZ3YOseU2FhNMuMfUw_1780053574 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Fri, 29 May 2026 15:16:50 +0400 Subject: [PATCH 29/32] 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: <20260529-b4-ui-v1-29-8db3068421ef@redhat.com> References: <20260529-b4-ui-v1-0-8db3068421ef@redhat.com> In-Reply-To: <20260529-b4-ui-v1-0-8db3068421ef@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/ZANAwAKAdro4Ql1lpzlAcsmYgBqGXWQy/b9MKcRmFpSaHxkJD898mWb2alxN1VNg 20ICO7eFvWJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCahl1kAAKCRDa6OEJdZac 5ZFsD/9jRC4FxM9B5YFaanyNkWIz0YAl0Qih/AL0GyYec77ibO1jlMMRdXpsRBcZq5SQYQ6TGge 0ej3MtXY/HzeaORt8KAjWN17DwlHsfAcS+2r1HBSB6h+0qgmHLgBbSo+d6ka6cfS53ZT74ML7y9 wvXckKdpS4IjFA3Bs6h3jz1q0QweRnRkIu3W88QCb7lz75HSEsivrZAjV+JKMaRXtEVsZkg+oIf IISS2ndyy5lHAgtKhjPL4H+5rkUwxpbrWFt5fe//7mNtRAuUjHRqQ489KiwSDr69WTxO9pFPBTF Rj/b7GjJRSH0RyIZGszOrHh979RC1yLbZ5A4i10y9vk/M8XeTnFr17Cc+JvdXdPd+Gl5AeIjdpl 27ArrL6QnsXrPLlwLbhjDq2DXJfuP6iknJKkLc1Dx9+kSYDmWXawaAnqGZJGs1FZe4shetSkIc3 Z0LoiFQi1dmfpdfAaTrDjdR9tqO6mT//dlZ1HUj82Je1xJRTNp3bOeTuR/Z6qtB2H6BMFwjUMgu 8p8JjZE50N36+HhoEQ5nPVb15945lIhwzrOBG28puo5QlpVus12UR+KHXg9wwXcAR8oSJ6jd6um NFVjy1fgEtsKMHHfoavmWcaMm8rt6gLMugCKWSjTApLbsNx3pm42RoT9tJTwrRjfWhHfYIMW/J7 e+U24MqEr8HeDkw== 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: -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: 1780053654914154100 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 Sat May 30 17:44:14 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=1780053609; cv=none; d=zohomail.com; s=zohoarc; b=aVNKz8uMHUvpUL8pNseGQBiMdyF+Ik7Tb2P0MkOCd7ZNAJQw3OpTpdNEUGPS7tX38bL/7AP4zhi1CDReZ4GMMjygIh1OclMG+yx6OpsFIwL+XRwm68Mwsm4ZeIpibhFl97Q9xTzLQFx1hdznO4WR7fEh9xvKxUxf/qhWMn6r2R8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780053609; 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=XMAh+uIhJNopYphE5GnXgrEpISba2tRyyL4MAhmycXi8TbyChYScpUwvzbB9Mr93mfpdSgLlnMyscwHvBczIOYJO8L5Z1yrsOest9OShfTt0cgBwQWYwWtH2Vh5S8AZF52rZ8vo33320pn22j5qE+U1u1MEuJhGglCWmDjdgC0U= 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 1780053609332502.90958621543734; Fri, 29 May 2026 04:20:09 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wSvFo-00005n-Py; Fri, 29 May 2026 07:19:52 -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 1wSvFm-0008BB-0t for qemu-devel@nongnu.org; Fri, 29 May 2026 07:19:50 -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 1wSvFk-0000GR-9B for qemu-devel@nongnu.org; Fri, 29 May 2026 07:19:49 -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-48-9Rje3joMOs2Td9KHjTn3GA-1; Fri, 29 May 2026 07:19:42 -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-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id EAFED19560A7; Fri, 29 May 2026 11:19:40 +0000 (UTC) Received: from localhost (unknown [10.44.22.6]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 17AB83002D30; Fri, 29 May 2026 11:19:38 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780053587; 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=ElfM8JUmQLmnWYl/mfRubRPRMkaoKrOXICnKv23/KBXoRHOPsypSmD9XB8SBFH5SXm3VnV w8kYYLLMdB0GjA22OZOzejwqzagJcqQdqACzqrU9qNKQ0Qn+++DpbPuCRsaSqgoSu3IT6L FoKXgekFjR8mcV2IikbdJd6AB5CCwTA= X-MC-Unique: 9Rje3joMOs2Td9KHjTn3GA-1 X-Mimecast-MFC-AGG-ID: 9Rje3joMOs2Td9KHjTn3GA_1780053581 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Fri, 29 May 2026 15:16:51 +0400 Subject: [PATCH 30/32] 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: <20260529-b4-ui-v1-30-8db3068421ef@redhat.com> References: <20260529-b4-ui-v1-0-8db3068421ef@redhat.com> In-Reply-To: <20260529-b4-ui-v1-0-8db3068421ef@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/ZANAwAKAdro4Ql1lpzlAcsmYgBqGXWQJ4ZUDvNDDtY17l7xa4LINjoo6bb7czrm6 2Xy5mmmaGqJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCahl1kAAKCRDa6OEJdZac 5WXJEACbLG7Qy9pebk1Ghx2Avez76l4u6c2FsGBdzFY1iJ0fq59G0p/D53+1awqZFcrG49mIZ7I nm3mpMt48Cc+VKjYX2/hqJFzWNJUUYbaKDA23ng5fan2VQxgJSTCeysRHrXY0OaMIeI7HLxv3TI 2kkdsbYAZQdbpiUIKdCJV27WD/XaRFpZbnvkV3kC/vz0AI3oC+Aa8kDQD+ByBGH56cHW5uNrOdu Nxx7PRMuiO+c4G0sOOw7iQW8OZTkhWmDVuihyLCH/wOeL0l7WYKX1FTcP7dz5RlF4qc/RYiKQDR 3wSXEsxiANClXeREsAyvlSROKRfaGeODpD8/1GJfekQ1UU+9+T3DKgc8fFbGFLhdpVC9G9lCBzE g8Njo3N1cFo0vGy7PyFogs7Oljqg1IfSYXz8SXI7hyN9CbLO7xfpxU/IzF9lbiHTK4t7AhA6+z8 fGO4yUKJmh6wy6/ZocCh3op0WRC9hMUM44c+RYk7VOiJ5dg46W6gTshf96U8ExiIkDkyD89/5+P fa01v3K/HsrhLfX9bW3pNTbKKV5ZXjXWoAwFu4qvCuRYM/0su8YNk116ZKTk9WmfFWgQ2JZyHJg YJ5GVZJLCHEYAMK+O78iYdXHoQzGs1/pruk6ZrmwAhq+hy5AMu4cxgTS6jYrdfw1mmRp/tbFAGl Gn8eyWUi2ngAiTQ== 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: 1780053609478158500 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 Sat May 30 17:44:14 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=1780053604; cv=none; d=zohomail.com; s=zohoarc; b=Rhh9jjZ7NhO0GRLjz5YgEBfDr0xxX2gIkP+j7onaZe4YVwFXt6GCMsDz90rmO7sf5ksvZkSyiHVHVR8vuW34MVB3dIg8MVhbJOPLhb/QZSEl7c/L90zhnk77Hr+ESfafTWbPC+teS23TulXra2M9ht8QWgkaIqUB/qOGFgdkhqI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780053604; 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=9Lf+lV7wA99D272f4ktkEQzX6sQbXEx5sph6D3pXdN4=; b=hz2TLrirJ7idrO6rI/kr4A/RngynERZa9TWQYOstgy1QZ4ZF0lvipstC9tyc64pkIfOpGONkINXPyB4gUYNlLHJrsYQmXjLZxenVTniHiinRZ/Wj8UsmKrVuj5tmsfwOyMGF7Ub9q56BQIJ6CCz7TlQcLFAlF7xSN4ocGZ0cFMQ= 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 1780053604210123.80758257060563; Fri, 29 May 2026 04:20:04 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wSvFt-0000SQ-Iz; Fri, 29 May 2026 07: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 1wSvFq-0000Fq-7U for qemu-devel@nongnu.org; Fri, 29 May 2026 07:19: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 1wSvFo-0000IW-EK for qemu-devel@nongnu.org; Fri, 29 May 2026 07:19:53 -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-673-ARvwI3mtNm2858f9ZVfT6g-1; Fri, 29 May 2026 07:19:48 -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-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id BFC8B19560B8; Fri, 29 May 2026 11:19:46 +0000 (UTC) Received: from localhost (unknown [10.44.22.6]) by mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 4FF9418004A3; Fri, 29 May 2026 11:19:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780053591; 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=9Lf+lV7wA99D272f4ktkEQzX6sQbXEx5sph6D3pXdN4=; b=i0Ugxe4z/XNgqvjv+ziIFuvTAusIysd2wk+OS1FvJRX7O1TdVyOq8eO0741fB71gwGFmq6 oOYgXBOE5EB0g34sNMhYVFmltDq/VYhVLmN65bNRxUNV5mLXSaOhNZE4hl5q7IVOzM3er4 lvsb0SNiKx88PcnlPfVxsxsZN0VX+ic= X-MC-Unique: ARvwI3mtNm2858f9ZVfT6g-1 X-Mimecast-MFC-AGG-ID: ARvwI3mtNm2858f9ZVfT6g_1780053586 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Fri, 29 May 2026 15:16:52 +0400 Subject: [PATCH 31/32] 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: <20260529-b4-ui-v1-31-8db3068421ef@redhat.com> References: <20260529-b4-ui-v1-0-8db3068421ef@redhat.com> In-Reply-To: <20260529-b4-ui-v1-0-8db3068421ef@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=xtlW5zQJr12JrzZrwGVqT4yOQ6lA2QBns/ITM0E2nrE=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqGXWQt4hfAIAZOSV1qow/MjAWhNnpMElC0Ns4E qkfi2OHC2WJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCahl1kAAKCRDa6OEJdZac 5USkD/4yyvN+UlO0HKccJgHZ3Cer5jijZRvoVGLE/acRhl+Pl3wenkYBNfnjKbAKt614lQbq739 EYM2iZZKbQE+wCPCtEhVyx41u/DZODAQ0bb3ow5Ib1LS4Fp0l/dUHKSw2mT0T4L8zeozYCO6xri zkpMPWgeKNkHE8rvzj/VtIj6Mth1FB9yU/NvK3pV+JJjJEoxCyXVFom+1DpANpPAIBHfID+HBjy xTDny0JRk96ad+XrazfsD0ZvxGz3WhCOn0zEgtjy5cX8CBHMaUnwOudW29X9qCJRZy3Ag09LwIb B239LjvuIm+CsZIys/52oGd/yGonTRZMGPXmj0if0kpe7GQ8M84kA2L1FbqQsixu4DIdEgb3/2Y g79r+rGVSkkFdfpU4FUH5EMnKPxQTYvvLNhsXBpiCgWhYL7UJuW63GPnRlOfWWQ/ZV8IEKex+ig uEQXs1HglffdmX9tMT7mmOP/wmJ0BlrM+qSt9Cem7F9FtOe2dpqdRnXSXdX5+kHNdfbZgJqmOBv /PqssNgDO0oOe68baWqAX4rN3jKa+oU2X3mo/oGvZqd27AxAIulSzYV33Fa14HqE3ZBSs0O6rWY oJ2ObPdSgwHAV4QwCSSREJhcp/KnWz3vmz10OacHUvAYVOsEVKo+UHBhVvI7tmUQgGkG7SWP9Qh LtLhd0dQmoLmPoA== 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: 1780053606144154100 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 0048951a7ab..dd1a18c7460 100644 --- a/ui/dbus-console.c +++ b/ui/dbus-console.c @@ -531,6 +531,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 Sat May 30 17:44:14 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=1780053647; cv=none; d=zohomail.com; s=zohoarc; b=hTWGWGOlDUmxnC1hHKcOpy4Rp0FOaWKyIS8/j9Y0PSBf7H3hl1huumL/sDUYgYbiRrLv9YjmY2/qpWPVb2sc6Fs4fANI5eVmiKH4377J/awMIHFPF4HJ698cHscq6C1BnUSKVUSJpPyvnOdyu6jk/ibyCGjlpGWWbbu5HFArqDY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1780053647; 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=E922ofr2eMtWbLnZYUHGpDbm343TRA8VMGFF6/aUIn8=; b=Cg2+BBhXOGDI2zU89Ivmh6zk43Ipi4g9IfUn6KFZU1uNax3xFnIijp99KR4ChFIWu52mSpGiYYVsne3ZMu5Gn+QY+SVTI//v0QfsoWBQkPSDNmcNbC0FpgQNG8unmYj4gXxIHfT9mtfAilp/GoKiC/QLLMDfwXilra+3MBCWEvE= 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 1780053647808750.7789715782247; Fri, 29 May 2026 04:20:47 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wSvG7-0000uk-El; Fri, 29 May 2026 07: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 1wSvFx-0000d8-G5 for qemu-devel@nongnu.org; Fri, 29 May 2026 07:20:03 -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 1wSvFv-0000JB-Ak for qemu-devel@nongnu.org; Fri, 29 May 2026 07:20:00 -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-445-ziUvXPNUNYGI0Pji2tBCiw-1; Fri, 29 May 2026 07:19:54 -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-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id A21A11956095; Fri, 29 May 2026 11:19:52 +0000 (UTC) Received: from localhost (unknown [10.44.22.6]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 08341180058F; Fri, 29 May 2026 11:19:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1780053598; 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=E922ofr2eMtWbLnZYUHGpDbm343TRA8VMGFF6/aUIn8=; b=bidm3mVSv/mxnGbWwr5PGLVxUrmZoyXtNFF5N5MJ9hUwhtK+slq9N7VhFp0AN3D/Ke8w5t SrZhb94xunMzd4tols3tOoP8iGoK4tQ/oTsPqYtkHmcdcKqatwBoGAd8trL89b4LLwvfQd uDiuFXTtjPend5tv5ZtYWUqMtcPtS4E= X-MC-Unique: ziUvXPNUNYGI0Pji2tBCiw-1 X-Mimecast-MFC-AGG-ID: ziUvXPNUNYGI0Pji2tBCiw_1780053592 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Fri, 29 May 2026 15:16:53 +0400 Subject: [PATCH 32/32] 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: <20260529-b4-ui-v1-32-8db3068421ef@redhat.com> References: <20260529-b4-ui-v1-0-8db3068421ef@redhat.com> In-Reply-To: <20260529-b4-ui-v1-0-8db3068421ef@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=4940; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=Ree6+4fkFHcTON60qkjJnXeThLfwd2vDQH14fByhUV0=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqGXWQI/IfWGo88u3c1TKx7TStvSFM3DCMOI41g YseGa8JTvOJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCahl1kAAKCRDa6OEJdZac 5Z0mD/91wEl7ZEDetPL2cUIQLcsnyxncTIjG923EqoPMC7fsKIdPx7aBXjflrGIEK9bA6DOQ4e6 GYyCKZ3dOCEdFlxp39u0t2wFEpXFp0Em8VJUxeZGvk3h/uX+QClXiNfgIdxPJSJV31XaosO9yKM qp+CdupGYHNyaczJXSlQAOvzugN9xbHmvRq2IahLf0mrlqRzgkQjS0A3uEG1ZcJlv499f2uHFiW jVYb6ngDlRl3VOmuQvJ8MUhvSTe369YSNv8V4Iul7KGztJNn1u+5BXZ9+N6NBlcExKUrAzq4/Xg t/s7JjUJfcDuaHsClYdrK7ArHeeR+QrfPJ5EpmeNFvAsR4HaVN2JOotT0UBFqbuiq1942hmlI6t C8GKIzFaBz7BWTTTiWAy6dnGJVhl8ZAar3+G+0MzG+7qfkZEkuJ6DPH0DjbBlVx3iWO6ALRx73p CfqTtW+8rtGy8NHYXzGyIJlQVmTFxtu2KhErfIE3RVgBrDiIwZpD0D1mBTlGz5IiaAzQ1UJVQMW Yf1ThsM58fG6FS71t7raclpWJVoyaBhQ8jnYDRIXpYUPzht51Nc1zO5V6Pk08KqoXUkbkgdVat3 rzJtzU9Lw8ZGMOwN3JK/Qav9NsJya7pxJT01szRaieE/6PyZfc+1eoumSozSKYc+D4Gk9fZVpMJ SsEzwTjPysnewTg== 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: 1780053649669158500 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. Signed-off-by: Marc-Andr=C3=A9 Lureau Reviewed-by: Fabiano Rosas --- 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