From nobody Thu Jun 25 05:53:06 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=1782200739; cv=none; d=zohomail.com; s=zohoarc; b=GxzotjAzStjrb8Ps07o0Cjf5ngx7BHgoXnSeFuNYFQs8961bjI8nJNpJeQgsdDqHbSABwk9s0pvaWQPnNR1RbZFKlmXMxneo6srugZqMaDRqeFDdfvBJVivgESoIlw4z3mcX+Vc/gPPnUa4yFctRMwgqGUEG/SW6EOjlvYEIR9E= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782200739; 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=9dqc3xN1aXUIUrHWS9ggdBtgBTtuuRl396MsYkRuz4Q=; b=FPFbycjn+OkQPMcf219JC02pj9z6nM9OFz0qLaS2ZKYZxqoSZ+SCCCdR5ICJYCxiCB3N8yAUZD+wwidl/+x6whc2EIOEZuzvHYbB0So1fiuJ+/ws0zH4/qtIuVOvqHvZC0KldLvmdKL6fkUa34lTsRtz+678fXwvKJPrxA0X2DM= 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 1782200739581500.24486799115243; Tue, 23 Jun 2026 00:45:39 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wbvoV-0002Lk-Lu; Tue, 23 Jun 2026 03:44:55 -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 1wbvoT-0002LS-UO for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:44:53 -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 1wbvoS-0007fo-IE for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:44:53 -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-98-CZwsT0LnN56Ios4cXD_KAQ-1; Tue, 23 Jun 2026 03:44: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-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 4B0591956044; Tue, 23 Jun 2026 07:44:43 +0000 (UTC) Received: from localhost (unknown [10.44.22.10]) by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 76BEC195608E; Tue, 23 Jun 2026 07:44:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782200691; 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=9dqc3xN1aXUIUrHWS9ggdBtgBTtuuRl396MsYkRuz4Q=; b=RfIYde8tVicbIFQOKlvhQ8FM+EsjY5KUHDK2K8dJAmqUQEy3yBItiSh3x3QDsi1OSIWc5F UjlYBqGlTJVNg5L/u3gk4/lqr8IguQ3J2WrnOuputZvx5Px8bhPfcYrQpqrD9NrnsCs2DZ zwKK1Pj+1VfsgDd2qsCNqi9NaNXNbS4= X-MC-Unique: CZwsT0LnN56Ios4cXD_KAQ-1 X-Mimecast-MFC-AGG-ID: CZwsT0LnN56Ios4cXD_KAQ_1782200683 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Tue, 23 Jun 2026 11:44:16 +0400 Subject: [PATCH v4 01/34] 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: <20260623-b4-ui-v4-1-4656aec3398d@redhat.com> References: <20260623-b4-ui-v4-0-4656aec3398d@redhat.com> In-Reply-To: <20260623-b4-ui-v4-0-4656aec3398d@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=847; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=yZPCBoGjIn899rr3uGbGHNkKHH9rsNhzwmZ5Ol69PMI=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqOjldqQfokWPwG5E4mQ6SVBECwQq3qHAAZmEl6 r8QiVj2lJ6JAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajo5XQAKCRDa6OEJdZac 5cubD/9r0VaQ20pRT2B1bwKZcFwIMh0hq1URpiv9VN3vGnk4oYZLYgt5TjWFYwjciYVK/MzITht uUfbS2D0WlXH6F+UxHCB7bcDEQyGwBMZnO5FPlhWXMTiA0GGrIkznTS2JNK4WfZ/NSOZbL15Ho6 5weESBYM/ei5jgU6mWjqRSvsy7LcRW7Cm0203aQJ6tS02i0cj82HkICeZ4ibrRTOTGdTkeqLM9B vck1cnFP4X/O6hbDWXYHDgHG6/+1f014rxA63tyVGCCHT0DRnnMOGbogwX9rD51EDJCeRUDxRzD rQb4fgYX1LEkWC5UbdM+c+OpL97bWdX0iBfIMc/BssFz0aKJ7n8NJ9/wbWTc9KjCi+3mBsuFTrI G1/zyzJ7342/ZjsiyTbphCsj0muLp1/JyWwqkkq41q3qdzqAmpDhhYmiVMlzVOxdTCmIqlhdbw2 Dnca78EJAn8Un+9lxFu4O1RSjkPWMx1KH7BTZP0S81X6diGqF5o+FNaFJ30MaJjupwuFMw8pUw4 8p7BOjoDJJGraxhYfFvLyn4BidOBRudtk4sJnQVMJ2tR6jkdPOeNflrd2zsO4VFhDPzOykUJxl5 IEYPQMSeBgLzhSdII+nxCBa9kGumsCmtL7SqqJ7tv/cIfxRyAP7y/dnVImuge9UcRfQskqaboSL 9gay08vZKWYEsRA== 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: 1782200742563158500 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") Reviewed-by: Daniel P. Berrang=C3=A9 Signed-off-by: Marc-Andr=C3=A9 Lureau Reviewed-by: Akihiko Odaki --- 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 Thu Jun 25 05:53:06 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=1782200770; cv=none; d=zohomail.com; s=zohoarc; b=Ch3Xrd+seGDfs80WiRprG60GzaHiwrL7a5my+/G7zVQ/CFwe8IOF/sOKJ+XAdWzF8tdvFuMLnS2tjc1aTVJamlO0iZNQCikEfNj63Q5er3uDHcRIMW+SS3kSXrYFs/Ykftjxc03LXzCUntLKleKXY06gupS4DiwMzbKtYp0HmyE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782200770; 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=uUzXrAPMHVvzD+oeqhkPex9ckI+tMZJ424iTr2LXjZE=; b=KCqf4jBNW/WewfkeQC/0wWzbN3QOx7oCIGvqyhVKCBzkTvh0/QAHLUrp6A4txQOI/UOxCLYHTX3Yp3u9kCT3pmRG1NGDL+3oPCFAg5yBI/tvqthhrzBs7lEIKQ0B7mYILrk0+cKCA5BVz+JLUsinkrryrLIp5m4vnnwhDN9U9d8= 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 178220077015370.95877796206605; Tue, 23 Jun 2026 00:46:10 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wbvoY-0002ME-2f; Tue, 23 Jun 2026 03:44:58 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wbvoX-0002M5-1Q for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:44:57 -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 1wbvoV-0007g7-JV for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:44:56 -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-286-JefB-1bgNFW_LIvKQZ3rtw-1; Tue, 23 Jun 2026 03:44:51 -0400 Received: from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.17]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 72332195604C; Tue, 23 Jun 2026 07:44:49 +0000 (UTC) Received: from localhost (unknown [10.44.22.10]) by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id AFF5F1956040; Tue, 23 Jun 2026 07:44:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782200694; 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=uUzXrAPMHVvzD+oeqhkPex9ckI+tMZJ424iTr2LXjZE=; b=ZE7FAesKrr+JPEcUbJJay+V97dXs/yT7iOAtpC8RXqoetOhK81blXvDl6uR8vntqKI9KzI 1AsBfC+b5MyzYN3sTTD+EUHDQWFESnD5VyfFt7rSasWYXoUaUVXxw9KIqxN522mB6f6Ip2 f85iXxB0N27yynUZXeI8Crd2DOatZZ4= X-MC-Unique: JefB-1bgNFW_LIvKQZ3rtw-1 X-Mimecast-MFC-AGG-ID: JefB-1bgNFW_LIvKQZ3rtw_1782200690 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Tue, 23 Jun 2026 11:44:17 +0400 Subject: [PATCH v4 02/34] 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: <20260623-b4-ui-v4-2-4656aec3398d@redhat.com> References: <20260623-b4-ui-v4-0-4656aec3398d@redhat.com> In-Reply-To: <20260623-b4-ui-v4-0-4656aec3398d@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=836; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=jujKEWqUwtrd6lFdi2u42Ft8tJxQte8AB+Dwe9NS6L4=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqOjldQs3OlWcyJlnyzdks+cwqBQgHetBkshYh7 Y1A11pcSXuJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajo5XQAKCRDa6OEJdZac 5SGTEACsCMKwXNtx+1cqXivEWEnm3L/O6TYKL0STPC3vhem9WdLnlst5bGNuWlQmo4Ct1aFbCs1 5B+b15NsA0srjKnCX3NgCkX0TnlV+oxk4P1mE+rYJ1AJPzlCl9fBcmu5K4qs18oT4eDVB93BHiJ J/vJOIPvJi9yWWGxdBgV6VRrGXshYwTdKUxJEMdFpBQiHml5Jb6B34iFskdD6RJ6+54HSeaeau4 dfOSEJ//ZF9ovreems2nkA5+tiRcWIJNka6xZREvh9Eq9nf/9Sa9dlfUXXhqikjYYl3Awlmbixa IUpPIUmS3nb/guvJhmkJ7L4JaaqSteDQySBMndAmggqFjWiNVBwDhXP/szKz4Xl5bpaT5R7WbW/ KM3CYe8suKoLeiWqSyS218xHIbt4485HjsC3iDFgTNvltXkC69GEQ9ltrEmtRKgqwdWLd7Qs9ED U0jaaAMsQ5bjOwtoB0w4sF4iMSO/GrVnGDmX0Z8JT8+FycBRNZ3u3STR+jMXwVD3rIs9T3eiA7Y c/Z3EI0cnPFlDz3FTOU5+rtV4dLXz/3In1bMcn5wLzOX8KsD58Z2wsc7YH09ARKWURKg1zJ0CBE Wc1LDvpILM6raEoYJbKRH5NgeAYOoNQNnhctrFyLGvd32Fb1J8ajrAYNImz+j23Rw3oTRmmV09D zBsBQhZyIoYN+Mw== 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: 1782200771677158500 On fc44, LSan fails to suppress leak:qemu_irq_intercept_in, because the backtrace isn't deep enough. Reviewed-by: Daniel P. Berrang=C3=A9 Signed-off-by: Marc-Andr=C3=A9 Lureau Reviewed-by: Akihiko Odaki --- meson.build | 2 ++ 1 file changed, 2 insertions(+) diff --git a/meson.build b/meson.build index e026851309e..0d1df06ccc8 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 Thu Jun 25 05:53:06 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=1782200739; cv=none; d=zohomail.com; s=zohoarc; b=e0W6hCdwWUBDoXvY6DwHxVTn0y8k1Kg5z3Yth/NKvevkIpTDv7pnHdilW/n7DEfkslec3zl6qctiRbGf+6QsVazT5RD5DDwWU4Z581rwA46uPkBDHTRsDTNzVImEqmj3g7ZM3iRROLYGWG5TNQRCBlB2QVe03G15tv0uSeAqN70= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782200739; 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=F1liHmn9hQQvbclLv4vnegdVtLVU23DjbyaN7f8CMXU=; b=U/Q2ikDLa01Iv7FLi94jV3XGcv4F1m6/9L4rJ+oVUx7yw1cKBNo7CT0GIjAbpOd+/4kGM+e6l37kMCzW8FRC0yt3HYbiYMjgVbbrfqYMVETmKHScoI/kOjQoZmTsUYoXPrEgdwz4T4N6/EN6/6UiyCuV9xiqmykijV8+ZT/Vtwg= 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 1782200739429360.3796819984467; Tue, 23 Jun 2026 00:45:39 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wbvof-0002NK-Ra; Tue, 23 Jun 2026 03:45:05 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wbvod-0002Mx-Hk for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:45: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 1wbvob-0007gj-SW for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:45:03 -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-451-AWm6D9dYMI2NsOML4l89ew-1; Tue, 23 Jun 2026 03:44:58 -0400 Received: from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.17]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 53B6119560BC; Tue, 23 Jun 2026 07:44:56 +0000 (UTC) Received: from localhost (unknown [10.44.22.10]) by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 7F978195608E; Tue, 23 Jun 2026 07:44:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782200701; 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=F1liHmn9hQQvbclLv4vnegdVtLVU23DjbyaN7f8CMXU=; b=d2BkjxT1FEz1QDoER7PvzVSL/rOrx2XDhLrBSxy9Mi2Uxx3mVEbykTOGaHwNKl+Divv06w aeLfZz0Vv5HMRU/z8lIRgyi0y60Fu26KRSYZcdA+Z3CrKP74OohyVNKM2Nk5s1T/xk8g4E 0/zMGSPbtecPcVqNc8Xf1WTxYrEIN6E= X-MC-Unique: AWm6D9dYMI2NsOML4l89ew-1 X-Mimecast-MFC-AGG-ID: AWm6D9dYMI2NsOML4l89ew_1782200696 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Tue, 23 Jun 2026 11:44:18 +0400 Subject: [PATCH v4 03/34] 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: <20260623-b4-ui-v4-3-4656aec3398d@redhat.com> References: <20260623-b4-ui-v4-0-4656aec3398d@redhat.com> In-Reply-To: <20260623-b4-ui-v4-0-4656aec3398d@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?= , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= X-Developer-Signature: v=1; a=openpgp-sha256; l=4822; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=hdi6A/jXCFYTb2sgzsbRLX7zJEGJ25IBPPh+ev1VEvg=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqOjldv0kNxS7+d3LFQQEo7sv5v3jv3xEsK2fPP MN8wBMONb+JAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajo5XQAKCRDa6OEJdZac 5Q84D/0a0kLU5O9vVnMF4GVJSma5hQdh9GEyndNySc9nCayntHHXkLShMl30HM6yHMm9cjRuGY1 UIi5/mSyVy07oTAer95WomF8nk+SBgWCXT6u47IyarjrLMKvtbNTBSYrzkgisPCLAmeoJpnKKLk rud97BFO3CpSydZlVkXGnG+6teAw6BHJk1jSdnw8C5+1t3vTQUxKHNqKVppNzre8w0Jxp8MrXJQ U45EShD7MptTuEmBzA8Tg/8pCwwVEPD4CzzlJpch0casLmDLuDvEwwtmdipJxvWCkwn1C1Ponsy 4sCiWyDhdSvdWKRTiOgOql5tkdKjD8rZIw5EzP6cT5wdPL64Ka0/CYN/aTvIYOdgDt7tiHy8JV9 jGMGY/E0Xy8DkOG1/iVeP4FZBpqAA26v9VV9BKLfArR0FBZ4xFevxfERPijKU7WW8MCfnr184qa r4xHI/7reeEjAnLOoxqFUZq4Qf6Ah0A+4EVjj4YtNTW3qKnaoLZqMUR6e2hqeqGUr14kjDRiBFe pRIAsUo4iap/MDUCLrZytRF4XNbMXtH3F9rMYJ9tPU8bh9nHbrm19yJ7yx4i36s8pkjmYxEWuMr hvKIaetIELiUbmOjqeW7VwzQ/KlliJRvCw2FiF7yFOhEdTRuT+f+1+j9ErxMPGfSSMPmRh3twGS E1vr6pTK0orhuKA== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.17 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 8 X-Spam_score: 0.8 X-Spam_bar: / X-Spam_report: (0.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1782200742614158500 qemu_irq_intercept_in() saves original IRQ handlers by allocating new QOM objects, which are never freed. On a PC machine, this leaks IRQ objects (one per IOAPIC pin) on every qtest run. Rather than tracking allocations to free later, avoid them: add an "observer" field to IRQState, called by qemu_set_irq() after the real handler. Interception sets the observer instead of rewriting handlers, so there's nothing to save and nothing to leak. Fix qemu_notirq() to route through qemu_set_irq() so inverted IRQs trigger observers too. Drop the LSan suppression. Reviewed-by: Fabiano Rosas Reviewed-by: Philippe Mathieu-Daud=C3=A9 Signed-off-by: Marc-Andr=C3=A9 Lureau Reviewed-by: Akihiko Odaki --- include/hw/core/irq.h | 6 +++--- hw/core/irq.c | 12 ++++++------ system/qtest.c | 5 +---- scripts/lsan_suppressions.txt | 8 -------- 4 files changed, 10 insertions(+), 21 deletions(-) diff --git a/include/hw/core/irq.h b/include/hw/core/irq.h index 291fdd67df4..299a4a9a8ce 100644 --- a/include/hw/core/irq.h +++ b/include/hw/core/irq.h @@ -14,6 +14,7 @@ struct IRQState { qemu_irq_handler handler; void *opaque; int n; + qemu_irq_handler observer; }; =20 void qemu_set_irq(qemu_irq irq, int level); @@ -96,9 +97,8 @@ void qemu_free_irq(qemu_irq irq); /* Returns a new IRQ with opposite polarity. */ qemu_irq qemu_irq_invert(qemu_irq irq); =20 -/* For internal use in qtest. Similar to qemu_irq_split, but operating - on an existing vector of qemu_irq. */ -void qemu_irq_intercept_in(qemu_irq *gpio_in, qemu_irq_handler handler, in= t n); +/* For internal use in qtest. */ +void qemu_irq_set_observer(qemu_irq *gpio_in, qemu_irq_handler handler, in= t n); =20 /** * qemu_irq_is_connected: Return true if IRQ line is wired up diff --git a/hw/core/irq.c b/hw/core/irq.c index 106805e2417..1b610e75e15 100644 --- a/hw/core/irq.c +++ b/hw/core/irq.c @@ -32,6 +32,9 @@ void qemu_set_irq(qemu_irq irq, int level) return; =20 irq->handler(irq->opaque, irq->n, level); + if (unlikely(irq->observer)) { + irq->observer(irq->opaque, irq->n, level); + } } =20 static void init_irq_fields(IRQState *irq, qemu_irq_handler handler, @@ -111,7 +114,7 @@ static void qemu_notirq(void *opaque, int line, int lev= el) { IRQState *irq =3D opaque; =20 - irq->handler(irq->opaque, irq->n, !level); + qemu_set_irq(irq, !level); } =20 qemu_irq qemu_irq_invert(qemu_irq irq) @@ -121,14 +124,11 @@ qemu_irq qemu_irq_invert(qemu_irq irq) return qemu_allocate_irq(qemu_notirq, irq, 0); } =20 -void qemu_irq_intercept_in(qemu_irq *gpio_in, qemu_irq_handler handler, in= t n) +void qemu_irq_set_observer(qemu_irq *gpio_in, qemu_irq_handler handler, in= t n) { int i; - qemu_irq *old_irqs =3D qemu_allocate_irqs(NULL, NULL, n); for (i =3D 0; i < n; i++) { - *old_irqs[i] =3D *gpio_in[i]; - gpio_in[i]->handler =3D handler; - gpio_in[i]->opaque =3D &old_irqs[i]; + gpio_in[i]->observer =3D handler; } } =20 diff --git a/system/qtest.c b/system/qtest.c index fd37bcbfaab..cf301239177 100644 --- a/system/qtest.c +++ b/system/qtest.c @@ -326,9 +326,6 @@ void qtest_sendf(CharFrontend *chr, const char *fmt, ..= .) =20 static void qtest_irq_handler(void *opaque, int n, int level) { - qemu_irq old_irq =3D *(qemu_irq *)opaque; - qemu_set_irq(old_irq, level); - if (irq_levels[n] !=3D level) { CharFrontend *chr =3D &qtest->qtest_chr; irq_levels[n] =3D level; @@ -421,7 +418,7 @@ static void qtest_process_command(CharFrontend *chr, gc= har **words) interception_succeeded =3D true; } } else { - qemu_irq_intercept_in(ngl->in, qtest_irq_handler, + qemu_irq_set_observer(ngl->in, qtest_irq_handler, ngl->num_in); interception_succeeded =3D true; } diff --git a/scripts/lsan_suppressions.txt b/scripts/lsan_suppressions.txt index f88bbab18b8..30256bc6d01 100644 --- a/scripts/lsan_suppressions.txt +++ b/scripts/lsan_suppressions.txt @@ -16,11 +16,3 @@ leak:/lib64/libxkbcommon.so.0 # https://github.com/GNOME/glib/blob/main/tools/glib.supp # This avoids false positive leak reports for the qga-ssh-test. leak:g_set_user_dirs - -# qemu_irq_intercept_in is only used by the qtest harness, and -# its API inherently involves a leak. -# While we could keep track of the old IRQ data structure -# in order to free it, it doesn't seem very important to fix -# since it is only used by the qtest test harness. -# Just ignore the leak, at least for the moment. -leak:qemu_irq_intercept_in --=20 2.54.0 From nobody Thu Jun 25 05:53:06 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=1782200777; cv=none; d=zohomail.com; s=zohoarc; b=nyqmdyUvZkkVc6nxtFbd7SG6FRBEBgctCKYWw6vEn0WwUijpvtX0unm2/Zd/NqeI2J4MZlGyI9vSLoII3AIINhnWi0T17ugqop38nCj/xfQakw/DvRNvmqUFKsWc9UqXRh7xYnI+Maku9cvNoM4hYMn3gC2boY4SRRAsSduWgz8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782200777; 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=L+HZdqqrd0luKP2zM9aSu8MqpsVYDB3E/9BW4+J/ZDE=; b=goGNR+MLqoFK33Ve7EWhRJ2JXM/Iw804I6+5blYo189xbnp0lVt6AXC1GhRd2GGQZSRmELB4C7LakwqtvMujdhKB/7kRlJARfe0ePgt+DcW0jr8yN3+2Vb/TEOL+INTY7ewT5m++xGGpfAvsfErxnc+TDC9Q12AMxS4Nke7wHv8= 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 1782200777599106.01052321789041; Tue, 23 Jun 2026 00:46:17 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wbvol-0002Nd-KL; Tue, 23 Jun 2026 03:45: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 1wbvok-0002NR-46 for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:45:10 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wbvoi-0007su-H6 for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:45:09 -0400 Received: from mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-7-qxnKdC2CM2idnVtqmpoKXw-1; Tue, 23 Jun 2026 03:45:03 -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 09F451800598; Tue, 23 Jun 2026 07:45:02 +0000 (UTC) Received: from localhost (unknown [10.44.22.10]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 66E7618005B6; Tue, 23 Jun 2026 07:44:59 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782200707; 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=L+HZdqqrd0luKP2zM9aSu8MqpsVYDB3E/9BW4+J/ZDE=; b=GhT4dJdPzeIWxTDfMraCD6ggsmY38+KP3ulqk3AAOIFy7j3cl3NuqrHL9NRuyuLt2aU6Wi 4xvEljxvUV2mETwEX7c4/XwtQJaP6Qu7dNMMoaj3NWMbpToJ0q4/GDJeSRGXZSdfWTNZjE dadY6leGRvbbxaFqqXDgfgSx5cPRk2I= X-MC-Unique: qxnKdC2CM2idnVtqmpoKXw-1 X-Mimecast-MFC-AGG-ID: qxnKdC2CM2idnVtqmpoKXw_1782200702 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Tue, 23 Jun 2026 11:44:19 +0400 Subject: [PATCH v4 04/34] scripts/lsan_suppressions: suppress fontconfig leaks MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260623-b4-ui-v4-4-4656aec3398d@redhat.com> References: <20260623-b4-ui-v4-0-4656aec3398d@redhat.com> In-Reply-To: <20260623-b4-ui-v4-0-4656aec3398d@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=898; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=wrh0d0W1JMMRcWG4uHoQU8DwdCsMZB8Ib76jiTAFaYU=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqOjldLBAacgkr5eJY+xctiJsshyMZy58oZRETf tORIRCs1KSJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajo5XQAKCRDa6OEJdZac 5YrGD/4+LXrgMxeN/sgbaHBTsjXMwKNsIolikeox8fmo3hidI7H5cS//ulvliZjcXkSr9pHm3aq CY+LmcdQlTfzvuQ3Bw9OhAIoRpE0uGxvEXPLLRNCpjHAD4QpNblDUpu2y+22GidR8QXw/GEM4s/ 4J7Uvb7DuK+sK13v/hDuHQkdrDD2AZcfaYR27oCcD3+MLLtKqSwfj3SSKfzB7DSPfQCtJdcVFpe 2ofPnglI7nU/bkOr/L5Rjfcf+YgxdLTGZUhVfs6lGlrJI7KTLnhQOtkTBL3HcddXYqJealEvr3S u4dKf5Sfk7pEYTthKGOl5enxPIXIqGg0x2BMCRWqpB+iYmAKenlIMirIvaufQKynPytLkTaxSiW 83Bc0JVKOnzzSWCVGVuL//F2/YneXekUNSosksbrqKb9WMKjhwpCY2MFETjV2quC9cn2U6rXBYx Jy5CzWR03HVOt6mxg/nlI05z527vOObHpKOQztHTSGJQ0nSLTXSSXxun5c3/7E9uiuW5Zr/Dwtr grGpju2V+qZOAalEBGRiJajKZXRxU4UXRFGMURZFjrchF1KRT42XSXM/LYgQHTz9kU9+ZEJKWkK vk00KNvs2OWgyRZrzkNUdo78fWEr2H2KrUph6XWGH4tUMoloeR12+Qsv25k+CS888b89j/jkO2f n0oje9ujfzcVV4g== 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: 1782200779733158500 Those are annoying reports for gtk/sdl etc. Reviewed-by: Daniel P. Berrang=C3=A9 Signed-off-by: Marc-Andr=C3=A9 Lureau Reviewed-by: Akihiko Odaki --- 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 Thu Jun 25 05:53:06 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=1782200758; cv=none; d=zohomail.com; s=zohoarc; b=FlmTQYfZuZyEQ1Mt2ypurEshJclOpcTJefCReOxhVtu6+r2yqitaZL7qAhM4vL2veqyxDNtCR+iUVRc+D/NGpaikZcRTo5gTM38mtwf5FPjcSv3XIS8zPNjbNUvRb3/Q2XAHkggwA0/35dOhrR7A8oxHrtX74vjzHp3zanBm9I0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782200758; 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=8jO7NTyqZIFny9BsTp3wlzPTLQv3yKAF2eQx+6+opB8=; b=BRU9psOrZ4Qgt9YJUcPeUAvVi+ookNLA4xFGyN+9an8KJVMY0nv9I8wInHaKSAIB8HrBpP/RZBmuwoD3ig2chohCYfYfA7SnrAjG6N7lrG0xwLEQCcsP1x4afVqXzuRA++C1fpa+c7khsE7tGZTxZaREjPK/smo9xXVxnsg40cE= 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 1782200758727588.8513755872837; Tue, 23 Jun 2026 00:45:58 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wbvou-0002Ol-8I; Tue, 23 Jun 2026 03:45:20 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wbvor-0002OT-0D for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:45: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 1wbvop-0007x0-7q for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:45:16 -0400 Received: from mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-86-DGbrG7StNFuiwpy8OJwcLw-1; Tue, 23 Jun 2026 03:45:09 -0400 Received: from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id B13FD19560B4; Tue, 23 Jun 2026 07:45:07 +0000 (UTC) Received: from localhost (unknown [10.44.22.10]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 4B897195608C; Tue, 23 Jun 2026 07:45:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782200714; 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=8jO7NTyqZIFny9BsTp3wlzPTLQv3yKAF2eQx+6+opB8=; b=I0yKHk3LQ8y1FP3uvLkuV+DscoySsPhf2TixnlQQEakB8jQbR8UZ8Fmd/Ydi8dHmdI0Xke 1SAP955te0FQFxU9XMkxgRT+iuNC8ipw+mpgfmB/LWt5S3FYyztZMVy1zaCAVkn5FStViv gAmzzRqnTUQNN2XkvRf95kEbjdZaLg4= X-MC-Unique: DGbrG7StNFuiwpy8OJwcLw-1 X-Mimecast-MFC-AGG-ID: DGbrG7StNFuiwpy8OJwcLw_1782200707 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Tue, 23 Jun 2026 11:44:20 +0400 Subject: [PATCH v4 05/34] 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: <20260623-b4-ui-v4-5-4656aec3398d@redhat.com> References: <20260623-b4-ui-v4-0-4656aec3398d@redhat.com> In-Reply-To: <20260623-b4-ui-v4-0-4656aec3398d@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=4252; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=pLWa+XVHn/Q+NSKVadtf3ObvQXqUqMOfKYU3sjRlxaw=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqOjldIhogQ7Vsz36nKrlBOChPi/o59aRGxuq6u ic0atsFlfyJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajo5XQAKCRDa6OEJdZac 5YcjD/9DLsJrn+5I+suI6qG9TpWX58Y0pzw+2qi1GQy0zfNpT28U6dQy/6CwxIQb8WsSJ1g/iZV tAFmjAPAoZKfBnqXCJtAR0z1PBo2Kyus4ITx+Ce78C9bDEb9fCLvJ2LK+w5Vr4P3KkFk9tEAwq6 4gRgEZlrKHKZ/hmPFlZAQ4VSdLL4HbUyCvl4jLojeLDKjpBr8A6LVwzfyPObpD9qYz33x+Wr1wy FYtsG2DYUWx44HPMg9k9vec7KseFD0naXOhCyGt33JiE3GSjlchL5J2aDuWQZjZrKAfxIL+9ME1 dS2fHmxwm+KkE5zZ1TaWnBEKlCtTYz9VCzRTh4AZs0XXnfEirFbnPuf3Q3CgXFwfGfL13oCFrMP sfbgSJWu9PWHHDOUYyfe9l1fv7oljYwFknPW4NY5BjzkuQxpIrnisjoO1kcrWTDhnAqdm3Lejp4 7xXLWAQUt7XBUbIDdqOP6MyuFgFqmGyFgOcLaK/rxzxMuKavvpSrrLrl2T3AjiremNUr4BoDhZK C+MzmFUEvQ4dL5D1HNCuKBYQ2y0HHwC3ddZ7svraocD6Z5pNHC0RKgP/TXd3W9vYuekZypaFKxJ uAaiSpqufS7J5bl6q8GttS/Y2qEBEwjIiBlZi5QWTXNtRCLhCFotvTGps0liQJCJTTTPoabOhS9 w/oo+M3F+TMlxmw== 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: 1782200762200158500 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. Acked-by: C=C3=A9dric Le Goater Signed-off-by: Marc-Andr=C3=A9 Lureau Reviewed-by: Akihiko Odaki --- MAINTAINERS | 1 + hw/vfio/pci.h | 1 + hw/vfio/display.c | 29 +++++++++++++++++------------ hw/vfio/pci.c | 2 ++ 4 files changed, 21 insertions(+), 12 deletions(-) diff --git a/MAINTAINERS b/MAINTAINERS index 93df53d87f6..35f87b7c9a3 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -2347,6 +2347,7 @@ S: Supported F: hw/vfio/* F: util/vfio-helpers.c F: include/hw/vfio/ +F: docs/devel/vfio-mdpy.rst F: docs/devel/migration/vfio.rst F: qapi/vfio.json F: migration/vfio-stub.c 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..cb83d98e9af 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,31 @@ 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 - qemu_graphic_console_close(vdev->dpy->con); vfio_display_dmabuf_exit(vdev->dpy); - vfio_display_region_exit(vdev->dpy); + 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; + } + + 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..7d57eb4f478 100644 --- a/hw/vfio/pci.c +++ b/hw/vfio/pci.c @@ -3591,6 +3591,7 @@ static void vfio_pci_realize(PCIDevice *pdev, Error *= *errp) return; =20 out_deregister: + vfio_display_exit(vdev); if (vdev->interrupt =3D=3D VFIO_INT_INTx) { vfio_intx_disable(vdev); } @@ -3624,6 +3625,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 Thu Jun 25 05:53:06 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=1782200759; cv=none; d=zohomail.com; s=zohoarc; b=ZaKtdje+bOXTgmBxq8u/urBbAIZjajuCdsCWL41y0ipR9fiOjiEAs2mTH3qkgp51ziZpRfPUERLZ5+YN/WJXC9HKmPxU+k/u8xBbakDMWhZ3b9gU6I/733MYOXKDSo2YkeTZf/ePAQ/hPyzEIX1gzWuSENGnjWLqsgmQpUqOD6M= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782200759; 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=2dlnWvp/uCv+XaxwfGHLQeztxW57sEQxRI5reUU98Sw=; b=BeJgI6I+TFYAfnARWZpgzNjILE9AXphVXh1L8UEU+ca2aOTz9ke+kdDxMsd6eTcekrz8GZA9QBmUyNtFuviYjgDohUFf7ZBiJ9byFjROJ3skqVdm3kmDUQpvxs/VwJYPapaxoUDng9zDTQtYLVIs2mHcuL4JMA2hNANbpoIZFUQ= 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 1782200759384314.45421062536616; Tue, 23 Jun 2026 00:45:59 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wbvpB-0002Xh-72; Tue, 23 Jun 2026 03:45:39 -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 1wbvow-0002P9-5O for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:45:24 -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 1wbvot-000804-9d for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:45:21 -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-27-2aNj3dGPMr-v7x6Cyo5SPw-1; Tue, 23 Jun 2026 03:45: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-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 06E781955F29; Tue, 23 Jun 2026 07:45:13 +0000 (UTC) Received: from localhost (unknown [10.44.22.10]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id A078D30001BE; Tue, 23 Jun 2026 07:45:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782200718; 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=2dlnWvp/uCv+XaxwfGHLQeztxW57sEQxRI5reUU98Sw=; b=fi2dm29UPHibo+J1pw5/NJF2KL6CtRamfM7nYxHbKaZG/8vcwRd8wg5tSzHBMKQ55pDhnD pgMyad0Ee0NPfx9chSezUrdQTKIEzOvpJEI8Zi0zz68crc2zlWCIrfZfVlj7Ol//kkyQNf ICHZ0LQD/xwSphoqAos74+m3/4O1Fb8= X-MC-Unique: 2aNj3dGPMr-v7x6Cyo5SPw-1 X-Mimecast-MFC-AGG-ID: 2aNj3dGPMr-v7x6Cyo5SPw_1782200713 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Tue, 23 Jun 2026 11:44:21 +0400 Subject: [PATCH v4 06/34] docs: add mdpy mdev vfio display testing guide MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260623-b4-ui-v4-6-4656aec3398d@redhat.com> References: <20260623-b4-ui-v4-0-4656aec3398d@redhat.com> In-Reply-To: <20260623-b4-ui-v4-0-4656aec3398d@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=3288; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=rXOvhoLrcrsbxgHDq3Fn9v1wo1nSjJecvLCkxFeD940=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqOjld3CkSHmwTR5B17AsXOsRKzT0npj+MrgWHS jtQV/cxTnmJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajo5XQAKCRDa6OEJdZac 5X56D/98Y0bC4Mcm3kH5R+UgDRR0ps0LFb0iKGSMd5R8CRdWIyBC+jXVio28HcHwtx4I34k/126 xpJ0K9xUBzmOtvv5qqKLrslQdsDRkdqNAI4dsfVs8fb2fpxZnCGA75pZHlAvyHqYlbgXsHvrMqK ZMQOs+oCjwANNllQCjPWXWG6KIDn8tVvF50ndHv9c22bwTnRBw+y3actLFy7OuGcHA9wZH3vGuH 7txlMJJzPE8jucqabXz6vfnytpYJeOSXlZn6CDshq2jIzufYCpxXOvYojFlHUnp9F1aiBlRGEYP h8BBq/HsvjST5HjahU0k7Nmtx3zhsPnIjSiIzZNAF3dESXPfIZgqDFmaOXzpYZ7ZZ6XeCqL0OYL 9BTCWXnVvnI6PSvnEAe+QPQ5jNMDTOE9cBaRGDZCVGoTxeiGJKFN4vHPMSrlOrvS4D4Fr+j/B72 3vyRSkQjxM0a+eICrSkxCCLP0SqnJkkSGaKccqu3bFFHOiD5XlLJs+OTcs8fnvQuxy187Nokg5y 4iMBFSg4h4mgWBuXFVIhZQjuoPDbI15OphYJIzO35ddpVV5UdIzj62EpDtOvueQEy9hUSyLAuoL 9F4Dni6troYaoHvFgIwWHUhphzYLFK5hHtVnUGZwWRFlC+kyN51sFqtmD32z5Xyt/LKPlX3a0IQ 3JtVmJNopA8vRSQ== 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: 1782200762178158500 Document how to test VFIO display hotplug using the kernel mdpy mdev sample. Signed-off-by: Marc-Andr=C3=A9 Lureau Reviewed-by: Akihiko Odaki Reviewed-by: C=C3=A9dric Le Goater --- docs/devel/index-internals.rst | 1 + docs/devel/vfio-mdpy.rst | 90 ++++++++++++++++++++++++++++++++++++++= ++++ 2 files changed, 91 insertions(+) diff --git a/docs/devel/index-internals.rst b/docs/devel/index-internals.rst index 7a0678cbdd3..198f155247a 100644 --- a/docs/devel/index-internals.rst +++ b/docs/devel/index-internals.rst @@ -22,6 +22,7 @@ Details about QEMU's various subsystems including how to = add features to them. tracing uefi-vars vfio-iommufd + vfio-mdpy writing-monitor-commands virtio-backends crypto diff --git a/docs/devel/vfio-mdpy.rst b/docs/devel/vfio-mdpy.rst new file mode 100644 index 00000000000..7875d00d1e0 --- /dev/null +++ b/docs/devel/vfio-mdpy.rst @@ -0,0 +1,90 @@ +.. SPDX-License-Identifier: GPL-2.0-or-later + +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D +Testing VFIO display with mdev mdpy +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D + +.. contents:: Table of Contents + +The kernel provides a sample mediated device driver, ``mdpy`` +(``samples/vfio-mdev/mdpy.c``), that exposes a fake framebuffer through th= e VFIO +display region interface. It can be used to test VFIO display support, inc= luding +hotplug, without any real GPU hardware. + +The kernel modules +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D + +The ``mdpy`` driver depends on the ``mdev`` subsystem. Enable, build and l= oad +the modules. + +The minimal set is:: + + CONFIG_SAMPLE_VFIO_MDEV_MDPY=3Dm + CONFIG_SAMPLE_VFIO_MDEV_MDPY_FB=3Dm # guest framebuffer driver + +CONFIG_VFIO_MDEV is selected automatically. + +Verify that the driver registered successfully: + +.. code-block:: bash + + ls /sys/devices/virtual/mdpy/mdpy/mdev_supported_types/ + +Creating an mdev instance +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D + +Available types correspond to different resolutions (e.g. ``mdpy-vga`` +for 640x480, ``mdpy-xga`` for 1024x768, ``mdpy-hd`` for 1920x1080). + +Each mdev instance is identified by a UUID: + +.. code-block:: bash + + uuid=3D$(uuidgen) + echo "$uuid" > /sys/devices/virtual/mdpy/mdpy/mdev_supported_types/mdp= y-xga/create + +To remove the instance later: + +.. code-block:: bash + + echo 1 > /sys/bus/mdev/devices/$uuid/remove + +Make sure your user has the necessary permissions to access the vfio group. +(ex: chmod 666 /dev/vfio/16) + +Starting QEMU +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D + +Boot-time attachment +-------------------- + +.. code-block:: bash + + qemu-system-x86_64 -machine q35 -m 1G \ + -device vfio-pci,sysfsdev=3D/sys/bus/mdev/devices/$uuid,display=3D= on \ + -display gtk,gl=3Don + +Hotplug via HMP +--------------- + +Start QEMU with a PCIe root port (required for PCIe hotplug) and a +monitor: + +.. code-block:: bash + + qemu-system-x86_64 -machine q35 -m 1G \ + -device pcie-root-port,id=3Drp0,slot=3D1 \ + -display gtk,gl=3Don \ + -monitor stdio + +Then at the ``(qemu)`` prompt: + +.. code-block:: none + + device_add vfio-pci,sysfsdev=3D/sys/bus/mdev/devices/,display=3D= on,bus=3Drp0,id=3Dmdpy0 + +To hot-unplug: + +.. code-block:: none + + device_del mdpy0 --=20 2.54.0 From nobody Thu Jun 25 05:53:06 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=1782200818; cv=none; d=zohomail.com; s=zohoarc; b=kgUBEMJky+MgAF/VSpnzU9AAluMZ5HnnXgN3GhM25e01VjMKPDaK52iassvsFBreRd4aIXAm/l/uWHHMMU3LEjGseiMVBk22EMzw4zvHiUWgBuZdly5RqyILsEsqBXQgGWNjj59GQZeMR1JRiZZYZvlmz54OzrhpD4didpRKjTY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782200818; 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=9Uq/YOD4Tyc0jQlm9DPacra4GuZK8eNHou9efZzgg2Y=; b=I6IeRoTjv0DGkaA2IzArcKQzvQRxsZOuWvOKBe9zYPRqiOTulX7n29s1Sj64JJTr72/DebtF6eek6oiZndIdXt7yDfTHtlCotlJwYLUvf6sNGL26k4zr6SP6L1BhvFvYNe17AKthEgOFiP2VztU6PFsb827gzxvPoO7Dneb/QT4= 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 1782200818938318.01834964079205; Tue, 23 Jun 2026 00:46:58 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wbvpH-0002fN-AM; Tue, 23 Jun 2026 03:45: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 1wbvp2-0002Tr-1P for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:45: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 1wbvox-00080S-TB for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:45:25 -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-96-QBeQpi2DNdy8oA_-MMJjYQ-1; Tue, 23 Jun 2026 03:45:19 -0400 Received: from mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.93]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 2F5A01955D96; Tue, 23 Jun 2026 07:45:18 +0000 (UTC) Received: from localhost (unknown [10.44.22.10]) by mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id EBDF41800480; Tue, 23 Jun 2026 07:45:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782200723; 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=9Uq/YOD4Tyc0jQlm9DPacra4GuZK8eNHou9efZzgg2Y=; b=WJ0LtNg1XkopHUo2/U8FbkdrcLeyIBrKluqK8BOoZAzivm9Zsf0pqC4w+daR/dpuQtVDGj +sGU3WFktCffHh5VD61MoEQ/S3qFil5Gxq/F5iHxxVIfQODb+bZY0dDS0gCV2evR51kcgK 3W8RC2AuouHMP/zqIYBOWuH5eaghLcs= X-MC-Unique: QBeQpi2DNdy8oA_-MMJjYQ-1 X-Mimecast-MFC-AGG-ID: QBeQpi2DNdy8oA_-MMJjYQ_1782200718 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Tue, 23 Jun 2026 11:44:22 +0400 Subject: [PATCH v4 07/34] 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: <20260623-b4-ui-v4-7-4656aec3398d@redhat.com> References: <20260623-b4-ui-v4-0-4656aec3398d@redhat.com> In-Reply-To: <20260623-b4-ui-v4-0-4656aec3398d@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=1464; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=Oc6bYtbmoQuSGvRLMjbnGE3Qy+VIBvYlZ2fSX7bu/zw=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqOjldpptmIJyG0B78/PQZM4WHhy3VdfxfRDSQh cRiYIC10KmJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajo5XQAKCRDa6OEJdZac 5dKHD/9hkF9XJzFk4j2L2r/AEsR5hOdvoJ8chWOduilIzjPEMYxcCZAd9Qd8UrA0Mz9sUR/93ES +dTDz6bLe0DsKWv4JFP9cTWtz7GAOogjCjtwLG/aXZgzatLc0bJCT/xGin8iAkYNaqszmjSWdcD RPxV8OokhakaCFgC5tP/x8rAsCbq/fdIm3k1HhlLuneA6S9G8nc1zeAb/M9UJsk3SBmAQH1n60O 9UFe2XVFUapsIcD4eqYg9l/ShcxSy67noHNxNjv2S4KiUErWFAUKftldRunvjuvELFGqois1bAo vujGLObiL4xM6y5Jdgcj1RR9mfGVleRpPa2pGAWwqAHEW3MFEFpyM81LyW7GlEuhOqNBrN5FmGj GEMlE3YFgrV7f9W2ZypMqBZtLulF3VBVJTxP4M2HbnXDc/52OeSpet4c/zchNq0ZYGVeN6e64Hh K6u9Y3Ud4DYMoOyTJYMX2tYhXJhQNabHahMTgn7F2WV0pZaUT42H/9RnK9hLJ47HrLIC8wwwHuW qV6o4h3kamlqVCuMW17fi2N8kJQwW+kVwIqfNd0Eh3t4tOYbeChOZbNLIqEb+4GusGjtNlNI2oR PXjibmPgZ0qPzdfZTwNe2L+KWEnAawJ3Qs/at1YuXU5wTitcbKBxCZzANZjdA+JzO2v/Zrasjyw qNx3vYyHfMpFHmQ== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.93 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 8 X-Spam_score: 0.8 X-Spam_bar: / X-Spam_report: (0.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1782200819944158500 Those helpers were added in glib 2.76. Reviewed-by: Daniel P. Berrang=C3=A9 Signed-off-by: Marc-Andr=C3=A9 Lureau Reviewed-by: Akihiko Odaki --- 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 Thu Jun 25 05:53:06 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=1782200804; cv=none; d=zohomail.com; s=zohoarc; b=dx94WUi5ActrRaEgy5XX5hL5PDWYH6K62FKojjj8POoarReLMHvrH+H28g31y356jRBk6++3cqbdu4BibwaEZSHeOe+tO7aWHeOYjHInVXJ6YKSKXcdoeI1QbRNsOGkifQOyrN1SZ43VP09sjv1wpsHD1IW8CVMvASob7YnW5mU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782200804; 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=w+Oi233XiBxp+rpO5j9u0aVn45NZSh3AuQTspxE9xl8=; b=I2V6rvTjKmLa1fM0VxZoWZO8iIEg+fDB75T/U2TckVRWezkCJIu1rRBR3d7z9kh9RldxbXIHLivpcz8s3sYK4MOLTZMbQQpbWM1NQJdKJamUiYLV507DXbteNnYY+PUCheAjlXTs50Aa/BMldSWScWqHi/RB/OpSy68lWjz5YC8= 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 1782200804479767.8593369659037; Tue, 23 Jun 2026 00:46:44 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wbvpI-0002nA-M1; Tue, 23 Jun 2026 03:45:44 -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 1wbvp8-0002Y2-4h for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:45:39 -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 1wbvp3-00082V-EM for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:45:30 -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-274-6ea64Rp0O6C9vxr2gkD27g-1; Tue, 23 Jun 2026 03:45:25 -0400 Received: from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.17]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id BD2AA180266F; Tue, 23 Jun 2026 07:45:23 +0000 (UTC) Received: from localhost (unknown [10.44.22.10]) by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 2CB37195608E; Tue, 23 Jun 2026 07:45:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782200728; 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=w+Oi233XiBxp+rpO5j9u0aVn45NZSh3AuQTspxE9xl8=; b=Erx6E+chSzk1K89vCWcyEnGeAEiE/qX+opUNEji+Z/icC8ApXiF8Owgv+VhV3jvJM/mClo 47JyC2S5AbUGz2x7ReAm0SkfaxrZ3S/YkfL/Wa0K1Tfhhf9JVymhKAVCykqIF8iSxJtN+k UjNGJoeNM7qypU+ba6jjPv3RbGRBsdU= X-MC-Unique: 6ea64Rp0O6C9vxr2gkD27g-1 X-Mimecast-MFC-AGG-ID: 6ea64Rp0O6C9vxr2gkD27g_1782200723 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Tue, 23 Jun 2026 11:44:23 +0400 Subject: [PATCH v4 08/34] util: make notifer_remove() safer MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260623-b4-ui-v4-8-4656aec3398d@redhat.com> References: <20260623-b4-ui-v4-0-4656aec3398d@redhat.com> In-Reply-To: <20260623-b4-ui-v4-0-4656aec3398d@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=675; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=UOpL3VWQfoL9NOG90tt8t0YDaaO8SV+WZheSRGL3tSg=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqOjldnUDfhay5qYVxTKoID4KfQVnAC9Qf6MizD zblU2u0WzOJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajo5XQAKCRDa6OEJdZac 5RCeD/9XJgqvpJBbwo7HcLEujafVO1Zyftq0VAoTD787cYpjYgob2ZdqYKfkY7l+VCphMrSY3bO sPszJx2nfLmNoqgFtPMw1Xtzr73//fE+D2gHbAyOiKnebYkL2QbJxjuAnZEnzkffbYjP2bc4cxk /D1SY76WCCPxYeUOf4Sil7SRGiD1ysGUZraNnoZ6QtBZmNc/eRS84gyXkotrINLu8dqvYuwNOa9 xkryqnqAtUsUmtL8LaDTs6H/zHVNBV3Iy18Xjfe4Z13aOAFK/lJFFYNf1w1pm9FGRthNDqBO3Iw etqXuqbQvujjYCozkPYpj05aP4qAV3/8u+9FuGvQmEsfXoRMqoMtkbVphgRPJPIAF+s3fczdATd oAQzPx/LhSijr05X+sS/EP+o/Y690bkOLyE3euLr3CAZ0Ewo1kJ0k5W/8vmuK3mssOrzIYI9gGd PiokNVSSH5jtEsr9CgIQbXw+tHRcx6+U/XufLANi06rtxEBDZeBLmMhQH9lXJWQJrh/PGyhqhbZ KMWhaDRhriMw3iUnCEK3W75bUe7zKyYcha0DaUkm8CAcnrdaHKnHKVeNsZaMicKK824V0H7v1Ue JBUpdAliN2O6KIOV/HMx20FR+m1pWDklNwOeVchJfl3hO9oR2fm8UnNNZKmBzzr20AKyb0PwoWc 9sQ+u5n7ijTq/Kw== 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: 1782200806167158500 Allow to call multiple time notifier_remove() safely. This shoudn't impact performance in any measurable way... Signed-off-by: Marc-Andr=C3=A9 Lureau Reviewed-by: Akihiko Odaki --- util/notify.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/util/notify.c b/util/notify.c index c6e158ffb33..24420a7288e 100644 --- a/util/notify.c +++ b/util/notify.c @@ -28,7 +28,7 @@ void notifier_list_add(NotifierList *list, Notifier *noti= fier) =20 void notifier_remove(Notifier *notifier) { - QLIST_REMOVE(notifier, node); + QLIST_SAFE_REMOVE(notifier, node); } =20 void notifier_list_notify(NotifierList *list, void *data) --=20 2.54.0 From nobody Thu Jun 25 05:53:06 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=1782200809; cv=none; d=zohomail.com; s=zohoarc; b=G1Lvz6jwYF09ef6UsU0Mo3TsIPVQQoQJ2mHdk0WOGBZ6wylpPds95/SdpyTyw0ytgzu8XK5naMp03PcpxfnqFgDfRON10QM85ZBc37q+/lMOeymMct72IlNE2tHrdIhHUtj/0dEovmw0dtvS1Q7QJDbT4TU6apdA4NMImsLX9cI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782200809; 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=1A9+CKU0AZSLNHR3do0Pygirm8t9vL61hlU5smuwJmg=; b=AlldmEH+5Nm8hEWYlPqB7OjAUl1WsNDM/1S83FVyYEjbYEP9B7LceWACzsSDLf6+9soDv+wmTBrI77tEDnqReIkyvMwu1uTR3S27OpxqBcopIgDN99emGMxbseBuWlauW0z0kh2KwC7X3UK0MvfhIcjMIegd0iZXr8lNz0Ek+dY= 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 17822008097181011.326882929851; Tue, 23 Jun 2026 00:46:49 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wbvpL-0002rD-1w; Tue, 23 Jun 2026 03:45:47 -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 1wbvpB-0002YB-Dt for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:45: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 1wbvp8-00086o-3C for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:45: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-19-eEXCnLe6NxeoYdLck-fNYQ-1; Tue, 23 Jun 2026 03:45:30 -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 BBA551955F73; Tue, 23 Jun 2026 07:45:28 +0000 (UTC) Received: from localhost (unknown [10.44.22.10]) by mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id C89BC1800480; Tue, 23 Jun 2026 07:45:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782200733; 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=1A9+CKU0AZSLNHR3do0Pygirm8t9vL61hlU5smuwJmg=; b=GXtc5YXcZxukKJZxoaLqO9ji8w2xGxQSsIYVlmjTexL/aJCBkYSE4s92QjAoVZo/kSszNa Wk0FBRYV8AjZ79BMGB1G7NK4n301O31ktMiJPPx/SljHOR0da7On/aTE0NhEqIVN7oKqjG fM0MsI3E4UrcvWdWtffmmdQAY2nnK6I= X-MC-Unique: eEXCnLe6NxeoYdLck-fNYQ-1 X-Mimecast-MFC-AGG-ID: eEXCnLe6NxeoYdLck-fNYQ_1782200728 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Tue, 23 Jun 2026 11:44:24 +0400 Subject: [PATCH v4 09/34] 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: <20260623-b4-ui-v4-9-4656aec3398d@redhat.com> References: <20260623-b4-ui-v4-0-4656aec3398d@redhat.com> In-Reply-To: <20260623-b4-ui-v4-0-4656aec3398d@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=771; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=4oL70KcFscssrRE7m/CwYJUFuGDvYgk3CIEeaK3VhYU=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqOjldKfv70UWfv6OtvDjieeR6/1uM2OzFZejrd Oa0oTsyg8iJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajo5XQAKCRDa6OEJdZac 5b5uD/9ERs6ZmgkiNmfqxZG7nJHxD8IeBdzq58RhQP4cds8nvqyRFub/wGH0dSIRZ6LlAByqoBJ AeTx+Ehb2asPo4pvBXZMiZh7CUhg+G0Z0Yhwyuhw6m87sH64sfn8TT9iZkJl7Ew/WdSBaFqK8H7 UTvWPo3Byeaf8ewhrINUgtmf+rWN4qRNo2Yhg9nhNEl5QbKnpZ3cS4FRNHXxUV2LHsQelASrLm/ RpnPDrM0BVxvAnSPICVkV5y3lVxtzbVXJOSHp1PkFfQXrUXqzWE3ontS53EzbjSeCsQpCvU86rD fg6popIwZNZxg/usGmWrIOILc5CNA3rdpg1GrtgjVvPpKwdEll1yKwQPMhl5t8N+el2DAwoMBpM n8uTwYtU/uRIYqQJXS+2pi/UsCnEbGVBzuT75m5z3hFj4ghRENbcmMqq9Nzgevuo9T7JjHjFUD8 11GGKcdX/IGTpFRrm8VGOkuBc3eE1s4hebIuuBvd0ySrOcXpW1QCwtarjs1lizJLwz2JhK43UIC 10OcigVu1vPegZ8cAIMMsk5obROJ9QFlYEsEylW7xFyrJWcgDWXPGy/QYSdotxxhk7x8+qba0lz UUv0Apdnoe5Vdue9MQg/1OswF/nzsHd3DLiBRlm3f0iN/0yC5IAAA4+zVQz0WhsCNjxL61bE7F2 5OXVLRjGjOQL+jw== 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: 1782200811638158500 Fixes: 142ca628a7 ("ui: add a D-Bus display backend") Reviewed-by: Daniel P. Berrang=C3=A9 Signed-off-by: Marc-Andr=C3=A9 Lureau Reviewed-by: Akihiko Odaki --- ui/dbus-console.c | 1 + 1 file changed, 1 insertion(+) diff --git a/ui/dbus-console.c b/ui/dbus-console.c index 9e154da1eca..bdbc208cf01 100644 --- a/ui/dbus-console.c +++ b/ui/dbus-console.c @@ -154,6 +154,7 @@ dbus_display_console_dispose(GObject *object) =20 qemu_input_led_notifier_remove(&ddc->led_notifier); 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 Thu Jun 25 05:53:06 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=1782200798; cv=none; d=zohomail.com; s=zohoarc; b=iD44ZgGtRHeB9BrRkXWtq+IDkkt5Ht4F2eIiYvCYs/OsznCxZHzOB9jktZ2fEguqryEtkMeD3WaxJzYfueuiK/r5mxlLIp5Ed5hQQxSGuuwXu7E1WpNMBRnDxPkx/BApfoaWGNBVZ8LhmtRp6n7mK+A3Uj+RAJRQIdiWtrgCsP8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782200798; 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=fy9FDnBBuQA6XOva2yHkr/+J1a7o999MtLZIJzCYeGU=; b=IWUcUD3nqemfGuRIKHNOUZJSyopF2u5wJPZtTJDn6wzvJVWTMIOhFlTTxG/+VCrCS9kHKqe7r3IDaueolFQw0HtrywMZwZKAIvA6I5fG0gEmy82Mr1Dl2tmDw/st6eqW40Ugb8uUjV5ERxnmEkE9k05HtIxMr56n4xsCIJOnRzI= 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 1782200798103852.28545348741; Tue, 23 Jun 2026 00:46:38 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wbvpL-0002rg-Gz; Tue, 23 Jun 2026 03:45:47 -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 1wbvpF-0002bt-0o for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:45: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 1wbvpD-0008Aa-KZ for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:45:40 -0400 Received: from mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-488-gOnD82rtMlOWcb05YFZJCg-1; Tue, 23 Jun 2026 03:45:35 -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 DBAE4195605B; Tue, 23 Jun 2026 07:45:33 +0000 (UTC) Received: from localhost (unknown [10.44.22.10]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 8C03A195608C; Tue, 23 Jun 2026 07:45:32 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782200739; 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=fy9FDnBBuQA6XOva2yHkr/+J1a7o999MtLZIJzCYeGU=; b=W8Ra/2zus8I6/xEvf2Kx5h9/Y3+PnkLKFLBKLMrQjM1I6zYA6ZpeKZT+o0OemgQhSE0kh2 p12EUKxp95BtKfS3K4NeqKAPUh72ZS6qBgjRsZrrEqDyX3YlVix59EBBEJWuZtLY3UEzOY BgJEV56VPo/bECGOtKFgRR6Eoa69CIg= X-MC-Unique: gOnD82rtMlOWcb05YFZJCg-1 X-Mimecast-MFC-AGG-ID: gOnD82rtMlOWcb05YFZJCg_1782200734 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Tue, 23 Jun 2026 11:44:25 +0400 Subject: [PATCH v4 10/34] 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: <20260623-b4-ui-v4-10-4656aec3398d@redhat.com> References: <20260623-b4-ui-v4-0-4656aec3398d@redhat.com> In-Reply-To: <20260623-b4-ui-v4-0-4656aec3398d@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=1035; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=nFUMF9aw2NB5tNGhWCH8b3CLuYQw1GaCHR49bKZmaWs=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqOjldRqqv1je+E1MNVmKJ97owRmE80A6m1+RZu Q93aWrj2N2JAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajo5XQAKCRDa6OEJdZac 5T8CD/9GlXxtFbe6pzVRch2CArMWIax+6H1pqL43T6NNlRbrahDHJtMtm54OP3gLQvP07BLTaIo zWm4GJ5egANjua0Bd0tW54wmdo/tH5SuMg/ExpNz4tL8K7pCPpURl3Rllzv0NqmwkA0J5QN2GHY 123VJiA7pgyW99mGIKsHq9X9j6lcZnFBTwcBFN2hrik+/hDe4XSyJ4z1q/P8mzShpxestExU7e1 8rXqLWqzlVEVMMjZuxWp6aHxRoAEsOKanmHk3faF5eCcXPNnymDTRqkO+Z8jsIrPNG0OHGINjS9 XXe8VFrdrSLULyYekVyuRki5cDv3Am7X/IN7mvJEVmHNGitRss2xi2WCrHgsyTLVLBYxpwMZmYX 0w8L/hwv2psgYWs8EacAxDa+0xs37Cj6fFKTf1tQDAa8xcG1wAL8yMiEZBEBdwihJi4HKYDA8Wr 8IViVLXJxRT3Y1ietZzFp4U9/8j6RlNDiUI9JUiKo8bGvaPAoPvHoxv5V6bqSRnuBBeeLOG9dgn y1Bo5Z/pG2e7nka6Od93GHYMYXFUPNITWYkOzUkzlCwLx9vB/bCnsy+fB6eqifo85ymk8d9wtOA UzGqUPYJqtjwnpIB6oX+PzKOiImHpBHAmc4b9m+twy4b2Enf+1RzIjfNo2W3We1jhgMqcxkzk1t YFCC5hFmQ6QP2XA== 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: 1782200799859158500 While the coroutine is waiting, the console could be finalized. Keep a reference to prevent this. Reviewed-by: Daniel P. Berrang=C3=A9 Signed-off-by: Marc-Andr=C3=A9 Lureau Reviewed-by: Akihiko Odaki --- 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 Thu Jun 25 05:53:06 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=1782200782; cv=none; d=zohomail.com; s=zohoarc; b=XpllpVvR4xQk5L0CyIq1CWhbZn73iYq+pb6BH4ZsGi0fZtDjjAcMH4u0JXkgk/0clAxFXFmErsY/q/vRAeWf7iVILSuVOlxxQ4uqGlsRbNsc8AGB61zgZDN+SGemlRdkW+K/4wfKUbwkpaDUxe7To02D4MfC3C+ijMggz1KU5HM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782200782; 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=NtnkDg33MYu/ghaopwN30hvH/Rt4UQH+q1oST+NTnl8=; b=KkY03FC5iL9XnpLuGD92Lkdn2FiDaocJdXGvnijmuwlkDuqaqMF2YVuydU3BGOnbgZo4qmC+1FrwQmHXRjqfByz67Dsv0Q1gjKYp2b3pgc6FvELdoj6CGPFq1xAId9lN4/K+XXKgShgghCPlaAugZUUdHA0JK3LjlPOGCY0yP1k= 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 1782200782436136.9652531819272; Tue, 23 Jun 2026 00:46:22 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wbvpN-0002w1-R5; Tue, 23 Jun 2026 03:45:49 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wbvpK-0002r4-R1 for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:45:46 -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 1wbvpJ-0008Bq-HR for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:45:46 -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-222-3qVESBI3OpuFd0iHwmvAcw-1; Tue, 23 Jun 2026 03:45:40 -0400 Received: from mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.111]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 8B33E19560BB; Tue, 23 Jun 2026 07:45:39 +0000 (UTC) Received: from localhost (unknown [10.44.22.10]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 0DDF41800591; Tue, 23 Jun 2026 07:45:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782200744; 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=NtnkDg33MYu/ghaopwN30hvH/Rt4UQH+q1oST+NTnl8=; b=aYhgFAlIdzXPvYUrpFi9Q9JMwaV6o/kISmBSAIp7i7cpSJCWHm9ZplOa8N0/Vi/yKaQlQZ DEtEJbodZJV80dZ/PeieImaoz/8eVdyndBDxLSHeajQe/oBQwKgOzPvjlVDj+dt36E+Wjy uv9MdEtgz/Vz1b8KU413W/SdbyBpbV0= X-MC-Unique: 3qVESBI3OpuFd0iHwmvAcw-1 X-Mimecast-MFC-AGG-ID: 3qVESBI3OpuFd0iHwmvAcw_1782200739 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Tue, 23 Jun 2026 11:44:26 +0400 Subject: [PATCH v4 11/34] ui: stop ui timer when closing MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260623-b4-ui-v4-11-4656aec3398d@redhat.com> References: <20260623-b4-ui-v4-0-4656aec3398d@redhat.com> In-Reply-To: <20260623-b4-ui-v4-0-4656aec3398d@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=794; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=1hj0l337W3NJOgj2iQ5HiEquhGCiA0qJG1NmyVMnuVU=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqOjldw4I4ykcPvw7ZvVoGqHPQvXA2cIxwJJC8X 5HSVf3pC/iJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajo5XQAKCRDa6OEJdZac 5RybEACTs3yctlIY1dp+e781ZIyiu7TD5FzvmkAJD3udlODyT/yXwMdijHp881dAPVLe1oM7A+4 IYhdoCg3m5va9f/3BCz6Ng34qGCziV8sj5c+Vs+DBOAswEhbi8FfjA3CNsN45b7xU4sg1T6GDIC O72V64QEA1UIPu4KLmzZBJd0npn7ddF7gaamyyDKdz3UWdzML187Ohf/qeS3170JjCZSeenS33T 4Zs/N44mfHC/M7H10rnoVduDpwL7pbflnt0/Gpglye4UoSgYV4x3m4YKTh20y5fnptqIw2XxSvF XbvsJh5uo3jvItovt229ACM5jByt/aZjlg4fw4VhyY9gFWaEPvupBvvaLe7Basq0Z6flFDR2SLV kOeu46ax6ArF60Gqz1bjHORdRhAcZtwb9e+yd8b6xB/Mgoe18ITnIkmqmTEOoDX8bSYaGiIWNsX blAL/ap1rRPIotOhb6t1Ouxq6rJjKxhKk34eYdy1gJM/YAI8QpvsH4eLCnva08TbIIOICdqXviU VHIuo+FzHgy0dCTY+WMVXcI1O5+T0FDlm0Tc6H11ETndVqqouZFvTkb4qqDzzbUg0Zow1Fu/Lqo sGH4KlrMTeoX7EdZsHNv5VaT07Fq+3/wjhmf9faQ+P917ar85ZNvkzxdiGh6pL8Cy179Xsjaz9H YxwmkWUewvJNEtg== 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: 1782200783516158500 hwops is reset, so if the UI timer is pending it will crash. Fixes: 9588d67e72 ("console: minimal hotplug suport") Reviewed-by: Daniel P. Berrang=C3=A9 Signed-off-by: Marc-Andr=C3=A9 Lureau Reviewed-by: Akihiko Odaki --- 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 Thu Jun 25 05:53:06 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=1782200826; cv=none; d=zohomail.com; s=zohoarc; b=bawDa8/XI+RcAdAAVILmZyyFg6xT8E5d8np+7sdZXYuprhli+ya8JV6gN9KUjk3nispqpT1iqwnIXZYhHTSFoBAeYXKFThTf3hEf2f71EMain8z85qyVJ/ifYm/OKZwhmy0BlPUIqWbG+vbnG17ePnR4n7Ck9ZMb3h14Bk5ITR0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782200826; 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=InEIGu5JTrAOABwltf0bG4+QBVo09YgqKmwUUPjE9PM=; b=Xu0unIK0uK+NmBfwEuGo74TOX+OlxfH3DeBOWdxV2ICud2r2C5FQLAoouaU3w8yXMeMTIbucavQRdl/NK93VKnbP9sBbM6ALvPScEQCgjK/gJbKrfErZEewpw7GgmIh+daQyAHuPAWGFDGwsdov2PBh7dnhjcoTaKOv9tYB0TQk= 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 1782200826749481.81799748448157; Tue, 23 Jun 2026 00:47:06 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wbvpQ-0002zT-3S; Tue, 23 Jun 2026 03:45: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 1wbvpP-0002xC-D1 for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:45:51 -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 1wbvpO-0008CL-1c for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:45:51 -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-362-ub33XMKvM-CE3r7acsUjyQ-1; Tue, 23 Jun 2026 03:45:45 -0400 Received: from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 85984180025A; Tue, 23 Jun 2026 07:45:44 +0000 (UTC) Received: from localhost (unknown [10.44.22.10]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 94CF3195608C; Tue, 23 Jun 2026 07:45:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782200749; 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=InEIGu5JTrAOABwltf0bG4+QBVo09YgqKmwUUPjE9PM=; b=fSz0537HreaHxUZ/0KF1iHJ8uKQdrMpEhWbhiGlKlMYlxmWS2yPQ+eqAaSw2HeW3xrsj+f dQbO4Qy+TmsePrH3OwWAvmwwa0dK5S9tWQl6SRqRui/KSlbX64pH6W6RvqI6xM9XQQGFAB sebPKOBPkFSiy7kdbEQshSyNZAmJFAo= X-MC-Unique: ub33XMKvM-CE3r7acsUjyQ-1 X-Mimecast-MFC-AGG-ID: ub33XMKvM-CE3r7acsUjyQ_1782200744 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Tue, 23 Jun 2026 11:44:27 +0400 Subject: [PATCH v4 12/34] 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: <20260623-b4-ui-v4-12-4656aec3398d@redhat.com> References: <20260623-b4-ui-v4-0-4656aec3398d@redhat.com> In-Reply-To: <20260623-b4-ui-v4-0-4656aec3398d@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=1375; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=75m6XwEI/jEsuPHQxTKVuXwY/0BtApgtkgSd0IkJ6dk=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqOjldXVSrwagWVGQFp7z1xNMpbvr36yLDEwxmt Rgk1uh34AuJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajo5XQAKCRDa6OEJdZac 5R40D/9HKRs+79LLrD93fReqqhLNkMQgtP5pp94IHeXZffpt6jh8+dEUf3RqP2vhMTiPY+GsH1o 1klycaUI+F0WXnw7CALEp9nTEocbhz2rVZJ/FWeI6GgGaY5xcomeWSgpkrYCaAKzlA8/lu0hADU QG86aC+5Ieuje9P5OVjYD9NB83A6gAgAfnO9rC1jCRiB+YTuZnnDP6Ysamo3OeMVKti0COM5yxk 0nHVB41YdsuwFMkMbzwfmKGqNInwYsQ0199YFChh1RXBvw+BUjK6dawpdSZOQhDG0iht10FjTk7 JDvokJdPseSiGgPHrFxHJcIyHtnc+avAE33cHQ/uEy/NY0T6E20Vdqj0JGGwke4bN7nFMHIbI8B gOZuP2yO1JJrteJWwpRNpf3ZJtWsnGW54dw+T8JD28L0QWQp2OkggX1mFT1hjFKUqlu3WoModwt +SCF3FOgKEMexcvaiGrU7HGRmpLGQ5yvjodvh13dGVEub3U2ecV7TVwBcTdZMOuEiFtNtuo9/Qb 0oRxGf07MNECxhQC6QcsgHKt7lDFrwCP/90yFKGJptk5aWRpyrHkhujSJsP/FuvwfaPVXewqnw1 dzxEg1COb0e6UTg1fdeTpFRDRBhMcf2pUGi8/8Wqx5lFgpZfv0AJ1Ouh4ZZb1DMs1fIOIabUSsY sSTYU98s/UNrjFw== 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: 1782200827876158500 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") Reviewed-by: Daniel P. Berrang=C3=A9 Signed-off-by: Marc-Andr=C3=A9 Lureau Reviewed-by: Akihiko Odaki --- 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 Thu Jun 25 05:53:06 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=1782200794; cv=none; d=zohomail.com; s=zohoarc; b=euWkiyeLN3yIVw4hVf5btFAY9FiTo9WsZxrPuezawyF3tuVWrUM2os0yvCyOmnQVtyfcZsFmAC9eG8iS0JOfmiqhA46M5LnuRyqZYLb0fTv21bTuwPcUO/ss+blvnF4vx7Uz2WMeP6QP6Hhux3hnvySZbOimv6NY5nJUgq7Ffac= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782200794; 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=XkqraKUc6uDUOWv6dsveBCmO1J/oGh5rlye3uFwFBek=; b=NGUwnFC3rugqs6JEqQvnmNlLG6p1WTr4s5aQfFCuZSSd0IQH/AdKKN/BP45G60rCj8fzNxwuw1Gq+zk0vgnr09ymYpXNO51X22EFCfD0C/4P31Rv1en7lnIJesejXOipEHvWCj4yj+LjzoxvqWeumt5QawWITSNKgTpXti1i2Y8= 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 1782200794231907.6647497771868; Tue, 23 Jun 2026 00:46:34 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wbvpY-0003BN-5I; Tue, 23 Jun 2026 03:46: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 1wbvpW-00038d-Kc for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:45:58 -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 1wbvpV-0008Ck-4T for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:45:58 -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-574-QFOKc7F7PFCSXFfBfI0Tog-1; Tue, 23 Jun 2026 03:45:51 -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 E673918052DF; Tue, 23 Jun 2026 07:45:49 +0000 (UTC) Received: from localhost (unknown [10.44.22.10]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 98D9D195608C; Tue, 23 Jun 2026 07:45:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782200755; 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=XkqraKUc6uDUOWv6dsveBCmO1J/oGh5rlye3uFwFBek=; b=db5dTdcBwuT8UE4oTl9U+Qy7KpWSmo6jBbJCXjN920Nq6m+kFW+dXLm1EdaKwkUxLpCPW+ XHAlSEW+5ZCPW/KS/GGX6SqMwlIZjlIkpaQKtbjOhwBCkAhoybRwg7ws7Lk0bUPgjY0NaT THtA+RLiUVExku/ZTgFYyiHA3Blkq6Y= X-MC-Unique: QFOKc7F7PFCSXFfBfI0Tog-1 X-Mimecast-MFC-AGG-ID: QFOKc7F7PFCSXFfBfI0Tog_1782200750 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Tue, 23 Jun 2026 11:44:28 +0400 Subject: [PATCH v4 13/34] ui/spice: remove dead spice_displays MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260623-b4-ui-v4-13-4656aec3398d@redhat.com> References: <20260623-b4-ui-v4-0-4656aec3398d@redhat.com> In-Reply-To: <20260623-b4-ui-v4-0-4656aec3398d@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=924; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=nHts4H7Pj0xNu20cVIrWwmkK5/oJi1JsNd5AGFPzVAM=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqOjld4rRXdnCqBIwHVqMczr9PEI6vn54mmLXJ4 Xu2LGkI0IGJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajo5XQAKCRDa6OEJdZac 5fjfEACcW07lkCTSp/rMK7QkmlGekN2Dz8gvwXr7EewER1OPGmbnDVvM7td/xN4iw7DspvQUKcl 2kaJQ7wesZHQ6GM199PCutsD5wDWe9AhyphN6fYleiR5PG2i8wW2gJv4w0SoXfhX6ifhKajpuQ4 42i1bd+AoBGNpZ5lldSR8qvSUqmBj9Vj6FE8sAxa/lG+KugEG23wNPq2gD1avONYVB1Jz5NkWP/ 1lk2ijFegg7P1TfpgCARbf88PdDjVGjCZKiOepTBdr1LUhfOMx09SufbaOAo5VvShLdohvv7fdz MsCh32dc2wdsY9xWpBPk4hg+ElLqacdX3yTWlyYHrltVRpPMXXpoEKH059AZKVqJyiNWntt1QlS 0ClAOfoP0a6vKJ8KFej8tgN84wyyVI56PJa0RAXzxarbdc5JHcULL+2fZ20uYah6WmTlRQDwOBY lyIKxVScDRocUP5GJQgtsh49rh67MGTPCDk+edVeGmamKeHJILlEJdnbUoAJyVOTWJ/S4hlDTEd 5cGYo+nMWIVBe5j/4HEEqTDZ8cMR3jRkpbZpKxJM8rW5SeXjnYklN212j/CVuGG6K/vBV8d6WUw Zu4sanqNuZYpfMJRqfaSYJrEqhRIcpOW5d9pUslIoAxrFq+RBS/C1GEwsPuL5C3Zs5muhKrliR3 QkUo35FbahBCW1g== 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: 1782200796131158500 This is left-over from commit 9fa032866da ("spice: fix multihead support") Reviewed-by: Daniel P. Berrang=C3=A9 Signed-off-by: Marc-Andr=C3=A9 Lureau Reviewed-by: Akihiko Odaki --- 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 Thu Jun 25 05:53:06 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=1782200799; cv=none; d=zohomail.com; s=zohoarc; b=CNKpBuhvUv+MDRQ1tU4RgYxyVCsxW6dQEn0A4WYEbWTNoDjLFKPH+ETDhKKmOh5LwOwg1kHEVrIxJvdPTINeQtqQJra7om35VfIkFYOKjq3PpNT9x+3AUNZSOeyMrHIvm8klfv4LlsjVLBlGETqtcj2f6RPlYVLMuL21XAnw7tY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782200799; 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=IgiVINjO+SBnSx12V4O/1IXHYaQk3WzC++ycq6fwaAM=; b=mXuALvcH9H9mbQCPkGOtsruG2tO6uS7PZyT29yC7qDsGDLfiAPknNniINfDttKD2s+Ze7Nh5vxQsNONAtQpY8Lfr+ULEAgXks/S6tqDHQAGkmCbyBlf6C5sVeKmWEjWHReNaanckC04FZDSuFLaZEpwohJAhzsImvOChU4YlC0o= 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 178220079945541.41692629526142; Tue, 23 Jun 2026 00:46:39 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wbvpf-0003Wa-Lw; Tue, 23 Jun 2026 03:46:07 -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 1wbvpa-0003DI-2Y for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:46:02 -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 1wbvpX-0008D5-Ue for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:46:01 -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-578-xLLfxrecNXqUzE0UQikDzw-1; Tue, 23 Jun 2026 03:45: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-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id B7FDB180025A; Tue, 23 Jun 2026 07:45:54 +0000 (UTC) Received: from localhost (unknown [10.44.22.10]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id CA4F91800347; Tue, 23 Jun 2026 07:45:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782200758; 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=IgiVINjO+SBnSx12V4O/1IXHYaQk3WzC++ycq6fwaAM=; b=WNzYQclK36Id19pT4IymJ89iTDw8Uzq/0JEQzmtYhY8ubMVXXRQSAYzkpirflEY4Gqko8S GSyvBehKz87v9HKmqfVGcDRchx+VDZPRaiKtHblID8qDXxc9cAegVXBwgnjDm05rIkGo7Z MAh/cBQmMTMfNUz00XlHCmDpWyCv7rM= X-MC-Unique: xLLfxrecNXqUzE0UQikDzw-1 X-Mimecast-MFC-AGG-ID: xLLfxrecNXqUzE0UQikDzw_1782200754 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Tue, 23 Jun 2026 11:44:29 +0400 Subject: [PATCH v4 14/34] ui/spice: add cleanup on shutdown MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260623-b4-ui-v4-14-4656aec3398d@redhat.com> References: <20260623-b4-ui-v4-0-4656aec3398d@redhat.com> In-Reply-To: <20260623-b4-ui-v4-0-4656aec3398d@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=11954; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=H9T5X4sM6x2Xaxp5+1W1fA0jdDinEIf99/LDY8KiM5c=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqOjldZtxw74ChkRcKrkdx0pqNdn8HeAXylonKF qRWWULbAhqJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajo5XQAKCRDa6OEJdZac 5fBOEACWDfXWAkCzqcOaD4Mx9lCEizIKpV6sG4iQImUUszgzogWlMNObC3vl7nKmDd490yRFGSW 1f5XuqzG5VMl7LEd80h0vZokBIJzZX451/5/tLbND11T0YG3/LImMj/t0KPxDooeV1q4r7c8UsW yyoxZ5g3o65ijyRMyh9eO5QqsMEUBqDCgLdDUSUx41OEK6aJk0sc2mrb+MxSPaS4rmXhwRHvr4i 2lcInm0T0BXqjJUU7TUHZxL7Zn+2B40J2/ZQscHdgITsGs97C90s6DMAdr3gEYHXlAOuFNtwjx3 lNdPS6/uL8pmx7HgPlhg93qTctG404ukXKC0MYhWtnyp9Y/9SAdfmPV2tqmIuiu/Ed1ZlqTXZGw N7wkBy96yxiQCNUS3d4h6U67CSsVr4Am70kxJtRgEq4U7RsIpCDqnux4aXogXfxAt8nrDWZF7Ex IIzA0TetZTjS5Abcp+sXizlUdyE+Khab6A2ZRnlh9puxvSK4tsoiK81/TIWgLx112wlo5/YcN1h 5QZ7WFNK1zAupL2pGUi7Ail9Bmj/vAFFVbF7czgnk6I4wlPQwaRrw2S0/0I3RvLLCkYlrpjp5nt 5E7ShlnJc1KE92YvPnAhf7B3D80NI3OiJBbZ/vkj9BcCqc6giYmNTWv8P8cP5AU9oB6fxg5gVpW YHDNRTZCIO5FYTw== 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: 1782200801827158500 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. Reviewed-by: Daniel P. Berrang=C3=A9 Signed-off-by: Marc-Andr=C3=A9 Lureau Reviewed-by: Akihiko Odaki --- 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 | 53 ++++++++++++++++++++++++++++----------= ---- ui/spice-module.c | 5 ++++ scripts/lsan_suppressions.txt | 5 ++++ ui/meson.build | 4 ++-- 9 files changed, 129 insertions(+), 22 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 845abc7387f..34f1b03867c 100644 --- a/ui/spice-input.c +++ b/ui/spice-input.c @@ -242,24 +242,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; + 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); - kbd->led_notifier.notify =3D kbd_leds; - qemu_input_led_notifier_add(&kbd->led_notifier); - - 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_kbd->led_notifier.notify =3D kbd_leds; + qemu_input_led_notifier_add(&spice_kbd->led_notifier); + + 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) +{ + 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) { + qemu_input_led_notifier_remove(&spice_kbd->led_notifier); + 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 0c6a432948c..d345f6c70d6 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) @@ -64,7 +65,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 Thu Jun 25 05:53:06 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=1782200787; cv=none; d=zohomail.com; s=zohoarc; b=M2eBKznxdwQw5kNb/IMr8fH9ARwlU8U7akgxZnqLy4OSV2FZVgyxCzQgivRQChHG2vDRHQXoS8nyafhvyAMG6kBpZbuI5goPEzaw/7NE1WdIzG4rupjha9ZT8+kkLXj07KxAPOc8wkJLqBLcGOuzVsiQO7fSOm5mxNV1VJ6+UGs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782200787; 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=Zx5wIEUZve5OD0OICC6YI6MtmJD+gD6PTyfWL3fJpFg=; b=Bva83Y/f/IgQrONwLri7yHF65sU5yvxhjuQ20ABVuvsdJgRMJlsykeCsiaivH490dKxpD6d7/obCyIeU/8O9MFJv+WoO+qwyiYLGkIWPDkgcxh+mnMN67AcxW/D2Cn3dFDpQ3BZ7jBxnEVrtcq5zBXEcrYLYfWD150097G9u+1s= 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 1782200787769541.4542632397655; Tue, 23 Jun 2026 00:46:27 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wbvpo-00042u-7t; Tue, 23 Jun 2026 03:46: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 1wbvpe-0003WH-Ok for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:46:07 -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 1wbvpd-0008Dm-8b for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:46:06 -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-541-TULX3XD2PUmVoqBBpqxI5A-1; Tue, 23 Jun 2026 03:46:01 -0400 Received: from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.17]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 106DC1956064; Tue, 23 Jun 2026 07:46:00 +0000 (UTC) Received: from localhost (unknown [10.44.22.10]) by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id ACCF2195608E; Tue, 23 Jun 2026 07:45:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782200764; 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=Zx5wIEUZve5OD0OICC6YI6MtmJD+gD6PTyfWL3fJpFg=; b=J7S33y/WSae9KMtHxKPOeDotDX/rUdVRYdnNcE8Q7uqoHrqvDS8W3KGcJdsEZ+IFfzUWbD DYeb6uM60RSkZM/zbioYvCRvZEXCWgPBX8129LQ/UDRLk82AajvVIs8uqyIZdaIHBrovtm rt9i91BQ2F5lzy9dD1phAZGiEYZKn8o= X-MC-Unique: TULX3XD2PUmVoqBBpqxI5A-1 X-Mimecast-MFC-AGG-ID: TULX3XD2PUmVoqBBpqxI5A_1782200760 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Tue, 23 Jun 2026 11:44:30 +0400 Subject: [PATCH v4 15/34] ui: add display cleanup infrastructure MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260623-b4-ui-v4-15-4656aec3398d@redhat.com> References: <20260623-b4-ui-v4-0-4656aec3398d@redhat.com> In-Reply-To: <20260623-b4-ui-v4-0-4656aec3398d@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=NQdRPiTLjDY76SFhRRmFgVn9Zy6VrMKXAIUjevOm0yk=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqOjldy6PB0Y3WNOuHfplr1nHMr7AVeVb0fqa+p W1YADC/ZFuJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajo5XQAKCRDa6OEJdZac 5ZmhEAC2TnAxJm98kTMNfVEVSkV4wQKdjxwcMqcwGNHDpHmRtnjwTTc1RYFUSrv+WsmdnI5GSGr bLjBEwSNxMOvmKD9m0XARYjs/f0MySglgkCNRvEw8ZeKEl6k8clk4F3+bpTvtyCTvgKSTyrUhdZ RpNFFt9plm8HjtDftHd+hvMtZpJRbIgIbYmOT7Vb+44O9y9K4xhW/gHa6KJW8ki52aZVu1wT6DU 7Dis7Ni2a0DA9041rKKQeIJjWKWhKX6rVNRed2rXVGMR/UDq2Mheqh6AV1ehch31CKPYnP0K67o hiWVU9HrB2/znc+0NuodJW3BK7ucSv6ZPyvsOZJpJGpA/iiqKT1KWtlYfnZbnDGfZjHIQS/wYas rdGTF+qc05OBP88HMF+1nU1FbUyH0WmHIPTnMn0JZUWJFVpwoKnQ2LbHhm6zh6aFV/NL4BuhHdC ilxOGhbqwUTqMmWoVddyuNsdFWqb9gOu3FMpYENgt/hPEZHXwVorYv9yDsQoG0w5xm/oWMfrShu XbiK3B2cP4hE4l7JAv+3UuuEQQ+5aBpZstv9urv+ipbNUes9mFWff8DiLLfA+mrVdEXeRZREvot RTXap0NRW0WrjOej9V0NY6NZtYq7Qb8xfTpFRQokPc67Ba9/lD6/BpwOqVnmuXycSXF0hG9dOmJ m8EIZGreiASMF9g== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.17 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 8 X-Spam_score: 0.8 X-Spam_bar: / X-Spam_report: (0.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1782200789482158500 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 Reviewed-by: Akihiko Odaki --- 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 b7bfecb6ee9..5322c56009d 100644 --- a/include/ui/console.h +++ b/include/ui/console.h @@ -403,6 +403,7 @@ struct QemuDisplay { DisplayType type; void (*early_init)(DisplayOptions *opts); void (*init)(DisplayState *ds, DisplayOptions *opts); + void (*cleanup)(void); const char *vc; }; =20 @@ -411,6 +412,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 Thu Jun 25 05:53:06 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=1782200784; cv=none; d=zohomail.com; s=zohoarc; b=cNWslOfi00jrJ8l7PnigNhPI40SGX0Xo5QrchMHvK+DfVG0CqDT0+ftS15+oltGrMqxXZKZn50SV3c4C9s/n04HRLsILpjmADFI47c2bT5Vdpd4IYt0w5rVZEuUPdQeZ6FUWHavrwPpRfGHZ1F5gmTBcqn6SfVTxCZP8pyY22hM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782200784; 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=e4f6lWR1JtmFVwOpxeWxzjhf00JNkHnmriyB4Zr+1z2ekigm7YHrm854KbjNO6Zx90zrSKG/9Ol6JoGo4EuXLOAMKh54dUK+D2IQpQFfTP6BuJiomXQGl9uwsiLsBdR/jeLL3v7Vcu7Ul6u7u6LnysMGLFaEXBAYdpSt0VXBD+4= 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 17822007845101002.9531163370816; Tue, 23 Jun 2026 00:46:24 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wbvpp-0004Ef-BU; Tue, 23 Jun 2026 03:46: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 1wbvpk-0003r7-CZ for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:46: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 1wbvpi-0008EC-V2 for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:46:12 -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-563-8tlS0cU4OXS_BOXxQi30Og-1; Tue, 23 Jun 2026 03:46:06 -0400 Received: from mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.17]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 43437195604D; Tue, 23 Jun 2026 07:46:05 +0000 (UTC) Received: from localhost (unknown [10.44.22.10]) by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 0FC9F195608E; Tue, 23 Jun 2026 07:46:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782200770; 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=XcFDKoWdLYSNJ/6BRhiY0isltaLGKhXl8zLgAOCSUq4Z/MeOq4mqD0eQrOqtdROhM+/b3f aHq7OCtW9M4rSgv2fPc1/WH+RV3ui26V8s8UklHg0ltvD2f8MVOQyGtPOiqzqjnaNnHl29 QnBvxXt0PonxJeimXddS4P+e0o2zd6I= X-MC-Unique: 8tlS0cU4OXS_BOXxQi30Og-1 X-Mimecast-MFC-AGG-ID: 8tlS0cU4OXS_BOXxQi30Og_1782200765 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Tue, 23 Jun 2026 11:44:31 +0400 Subject: [PATCH v4 16/34] ui/curses: implement display cleanup MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260623-b4-ui-v4-16-4656aec3398d@redhat.com> References: <20260623-b4-ui-v4-0-4656aec3398d@redhat.com> In-Reply-To: <20260623-b4-ui-v4-0-4656aec3398d@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/ZANAwAKAdro4Ql1lpzlAcsmYgBqOjldOZTO5bwISFLx8qLBvzAKpIAFc5GVHczEX 7gBvUNwezSJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajo5XQAKCRDa6OEJdZac 5XWwD/92m/1WUY+sW3BNkWJCZ6XCeKFqyt9YFcCcmV3S/601ajNdMg81xfoHlDOxMUnTvoNxfk1 KATtDJoNTe7gFVHFqlmKgbT2qYUfIB3ZNvfsaxlXD5bansWEHSozsgXpu5a37mT8d5AV+MgJttn Nahc913l4QrrnvSRCR+Hqo+0D7nmKi2c9OGHKtkf6UJYLgwvPF46M/03FLhUNggjqQpauGG3AQe JU45MZ5FSweZL6YN5fU6Qtuf1H0t+dyE6xOYhBqxPs10Ey5dSwTq1Oyst0mhoutyhCVw55PTNga MnE4dk5qKHYveQ/O3/cDz5AXu2xVXZNNr8lb0K3lzi2AjRqOVErJAcrZFEoXF016G57w2SdvUzP jZaNFJjYIy9+Ym8BbJiDCw6iNVKBe+Fef7XuC08PRSN3r+09kzA94ljR8aITF7eKiLxZ9KOb1ZZ 7mYhFVnArE3c2ss2dxcxIeAZVG074qa/hmB83SoqkNpLluPXPprXTprs7EuK9Sz26/1DmoEpsff KGSc1W+AXo7L7EME0JwSMDGMApplWT7P1sb+OTExQVGyqTnG8sYTsAkAkmeSzGk02G/rDnr2Stb KDqcvPTym5+eGFZbTJlpIut129Q40Rc0driUsy3wbV/xcmU10V8laaud6sixRC2VMa/VlLjdmYK tw6FCLvnqEAxNcg== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.17 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 8 X-Spam_score: 0.8 X-Spam_bar: / X-Spam_report: (0.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1782200785486158500 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 Reviewed-by: Akihiko Odaki --- 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 Thu Jun 25 05:53:06 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=1782200785; cv=none; d=zohomail.com; s=zohoarc; b=RsKtEsUfcGvlVHBnvLtFH6V5lsa+7iwfmBW8YpBAy1Ik2mMcPovL0s7WD8l6pgUmqrVBTN92ENkbxuXF9w0U7N074OgeIKV+nOTqFwF7xF/dHpvhq7ajb8vwqs4qCM9atrAj+Orw57eIrp9/uUZ4DggMJz/ig07z7LA7O1FwUFM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782200785; 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=YU1H8GerhQVJe1FDeVzbXbc36iomtcVm20kGBrbfSSI=; b=lNHOjxj82+ZlWQMzYortA9pG2UDre0hNIefYi8hTK0rbjLVVd8IEidHU49JlVJBt/JUz5dd0lCOxM6HcTi3XoVbC1ttYtHNqn3IbkUQ7iPDPo7aMQZDe+OOEg3yY8hSsEwcN/sEEMyw3DJWQAvVWQQZEG6W+tVeGZ0Jl9aOz7jo= 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 1782200785601551.9369734184272; Tue, 23 Jun 2026 00:46:25 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wbvpr-0004bP-Tx; Tue, 23 Jun 2026 03:46:19 -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 1wbvpq-0004SH-JB for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:46:18 -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 1wbvpo-0008F1-W9 for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:46:18 -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-107-wAvyjjaNPfWYptHhLcX6IA-1; Tue, 23 Jun 2026 03:46:11 -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 52E8B1800598; Tue, 23 Jun 2026 07:46:10 +0000 (UTC) Received: from localhost (unknown [10.44.22.10]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 18BAB1800347; Tue, 23 Jun 2026 07:46:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782200776; 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=YU1H8GerhQVJe1FDeVzbXbc36iomtcVm20kGBrbfSSI=; b=XzHmuuzuRZufudBKEr3CmOK4UO9VnXGW+3ViLlqh7S7ZBDXWnrBu8b+mkcJCoh7bSQ9c+x uwuhAkwCXKt4AUxMVlH/WmBDB9a+T2HEOZEqPyw+4TxHtEXvxHEEUMQkIpCa9E2DqXdYrt Fj44sYtzR7EqtJbsGbE4b8ZXbyxcn98= X-MC-Unique: wAvyjjaNPfWYptHhLcX6IA-1 X-Mimecast-MFC-AGG-ID: wAvyjjaNPfWYptHhLcX6IA_1782200770 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Tue, 23 Jun 2026 11:44:32 +0400 Subject: [PATCH v4 17/34] ui/sdl2: implement display cleanup MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260623-b4-ui-v4-17-4656aec3398d@redhat.com> References: <20260623-b4-ui-v4-0-4656aec3398d@redhat.com> In-Reply-To: <20260623-b4-ui-v4-0-4656aec3398d@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=7LHDaJJk+7ITAySyDwrMeiayBnDzHyMzfjsfmWGNmHE=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqOjld3NaOpBx8B7MTqtmfMZFYt2uH0QFIxkW9l WuF3O1Y4SqJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajo5XQAKCRDa6OEJdZac 5ZWqEACV6EEHDBdOl/efp0hsNUwMKmf1iz35c6bKlxv1Fwb6YddcrTkZXitdzIIXmg4yPjP3bfF Jacrg5bYS8lNzfHpiMGUSjoc6zMLir6ln6Dh1uTGXYblTpMCGajlb08ivVClelJ0AGUJzBzuNqH Wc1RvwpV5zPdihwjvL15nEH1lr9mwSYs20iOfWhTrSwXYXqgq3O5FZqNzevOgtU+WLwfQ2WWv9I AiTqzP9VTtdWibUONwGfAAIicA9lm5pQcQTpQQfV52Bnx0K6iOq3caZCPUDVrdonBH87/ADs+cK dAxa4FATmjc+acFp0xxI/4mHx904U3GSyOr4L7Ol+z9NYLR7f/yNsL4tNH4epaYja/En/mslCI6 yTW/pcDd4GdZXzPlpz10E61AL0thTSyNgrrTlfPdCAWpiBH9Nyb5nQ+BHyyakZ334D9BzIqscj8 xbP4XB2bLXRUYlSsozLgBjDNRQzuCPHuFir+UUnt+kYGd5AiX83BOKiaOi+ahTpzakasSEGqhv+ whRr5fTfQh6HSo0jXHrY8zMVsB6Bf/p+VXJ509Rua1uWtzvj2rD7pTeTAK4VRR8LGIYjMqfuPB/ StvaEZWnY+xpdB2sSwx0di468fD3QVsi5c0+AH8+aNnBhH/a0GmgPGr61uv/5o7xb6K9f2W4/Bd ggfH62yAViZoFIA== 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: 1782200788007158500 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 Reviewed-by: Akihiko Odaki --- ui/sdl2.c | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/ui/sdl2.c b/ui/sdl2.c index c75f750e00e..1c97d23a47c 100644 --- a/ui/sdl2.c +++ b/ui/sdl2.c @@ -790,9 +790,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 @@ -998,8 +1014,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; } @@ -1008,6 +1022,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 Thu Jun 25 05:53:06 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=1782200807; cv=none; d=zohomail.com; s=zohoarc; b=bCe2oE4xAbmkDPPuCQiFjLyaO3VStbqwnXHeUhuHvO+wiP56ChBaSnccu+onw5iPPnuSSKDwpadIyGTMcHWSL/kJPbjT920WOmQdPsjNoIu4sYdZiK2ly3fsr7N7NBiQuNzmNujHoV9wbhx+2iG2XzMXs501+gBDAL6Dd0USwNU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782200807; 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=gmr19yfWXNHlVjVALjsjF7hogQWb6eFhEvcYJcT/qMXj7IUysD4lBfC2G6wH3aVfye6e4MxcJpVcKPADpbIMvhQTrqLaUpdeZF5LnN5dE2xiHbhC3aKQLDnFagjaEYwkbDUHfIBl0gD54zSbg9TJYXCHGk00JFEW+P7SwSSeJHU= 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 178220080742034.756391243135; Tue, 23 Jun 2026 00:46:47 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wbvpx-0005eC-Co; Tue, 23 Jun 2026 03:46: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 1wbvpv-0005GB-D7 for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:46:23 -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 1wbvpt-0008Fa-TM for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:46:23 -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-346-8RY-Nv8gOUO-n5jeuo2n_Q-1; Tue, 23 Jun 2026 03:46:17 -0400 Received: from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id BA9D1195606C; Tue, 23 Jun 2026 07:46:15 +0000 (UTC) Received: from localhost (unknown [10.44.22.10]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 62D82195608C; Tue, 23 Jun 2026 07:46:13 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782200781; 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=bYPj+OhvtYtoIDK/v0gPtkUvLYpZAYR0L2SZ+GnkxeFRu/SzqMyEgVyYSAODZn78or80Y1 XucVFpe+e7CeODkcjLnmipwCqOv5fBUDtS2HtAHBZDk1gf64CgifkGbz7HfsWTjGWgNQ5W oe7o3Bw37F5KmH8iWYDNYeQLrjlzXY4= X-MC-Unique: 8RY-Nv8gOUO-n5jeuo2n_Q-1 X-Mimecast-MFC-AGG-ID: 8RY-Nv8gOUO-n5jeuo2n_Q_1782200775 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Tue, 23 Jun 2026 11:44:33 +0400 Subject: [PATCH v4 18/34] ui/spice-app: implement display cleanup MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260623-b4-ui-v4-18-4656aec3398d@redhat.com> References: <20260623-b4-ui-v4-0-4656aec3398d@redhat.com> In-Reply-To: <20260623-b4-ui-v4-0-4656aec3398d@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/ZANAwAKAdro4Ql1lpzlAcsmYgBqOjleFjwaE2XfYpKISdmRZdwteXH3VchhFFMJ4 3PbiSrtFeeJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajo5XgAKCRDa6OEJdZac 5fpNEAChawlUPR6B1TS7R27ux+yT38IeVUPV9lDDC1UwiQBxnYtKVpTaZjap0fXc3bwOAeXYdCM iULd4tKmA4rW6IOZuqVQj84DxSJMFGCDdDiwaUdEmqeh8YaeL+QUAhjPxtlqr8pqXUuI5gkQSER QMdFw1nsT2C/OW4WUg619Xb2KJjgp3BMCrwfoiq0XMnKRZEypxRSSoMx86xUMnMocHpFwhzjs3x OJzsPfbT2JsHl21+uq5A0QqL/5TcgVWV6ML5dbE5atKDPwSKD2gFLRMZy6szWpzRBS1FoJEAg15 7vhE+/dYL2x65Ee06hwrxuIGqwzfIyhcQjGiDmWwjsXOuKGxxeqJbqgIjRLFxiuA3sG4g9h++10 bIiWbZeFDBqMWvP/jSwmEdCKfrOeJaLfCZNO0LAYONs9st6OnC7FLhCH5iW5p27czgGRvi3BNZI ze3lq92NgoqnURaxi73eU/D50h5THEKaqOtKNVl0ymgLPv3G9LJLQZmvgSmDTbsiFVcvbSYNwgn 7Fp3dRsFQwfdrFVgv1eWyq6dpICBO5/jJ/UZmgAJoxBFTDyCet8NyRuAKvnXq+ahsp2Vdmv2I7O YRmEN4ihSqIdclML3qhbdIyYzIjrmzPR60qpv8Ud4Kl3sR9wNxJntrMUeVcAbDt/uB/J72O/ACf wN6CF8UzTCsiTEA== 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: 1782200807608158500 Replace the atexit() handler with the display cleanup callback, reusing the existing spice_app_atexit() function. Signed-off-by: Marc-Andr=C3=A9 Lureau Reviewed-by: Akihiko Odaki --- 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 Thu Jun 25 05:53:06 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=1782200814; cv=none; d=zohomail.com; s=zohoarc; b=lyazy0Jt3zFlOy3jMtTLC7xDngaxYIEFawFB9evWnz4IroP12ldL2cTlTVU2qDxPwBpEYJXuqKHblbM89eD23rhgZeXW2LPxXNhoYPi49VOVJbRK8I7BJzD1haxMpFsaiDy6tT8nuT76k+6+pycJbsb59MnOcP1eNlp8zniCDbQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782200814; 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=MtC3xg7PVkuJ9kMfcFi2QNSzFkAExWECStM6IcLwEMQ=; b=XPkhZ1kxTsGwUWCLP2ujQsZGp2rcor589PxRMELsF+taVOi/tOxx5U44ONAj+M2Ydj9qU02rAc1zC9nAJ2kpoYRpDu66WQ08xPuKsfIlAdu3FGMWhc8bggbKVF7IG3/aRuW5Qez4BY6QHsmnzN4aU8LwQ+hWHdwvJe8zZniOKNE= 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 1782200814682136.29754358140633; Tue, 23 Jun 2026 00:46:54 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wbvq3-00060h-7V; Tue, 23 Jun 2026 03:46: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 1wbvq0-0005ze-RI for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:46:29 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wbvpz-0008GA-8n for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:46:28 -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-326-RBqkFLp7NuWKpr0rD5SKPg-1; Tue, 23 Jun 2026 03:46:22 -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 DAE3018052E3; Tue, 23 Jun 2026 07:46:20 +0000 (UTC) Received: from localhost (unknown [10.44.22.10]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id CDEC11800661; Tue, 23 Jun 2026 07:46:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782200786; 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=MtC3xg7PVkuJ9kMfcFi2QNSzFkAExWECStM6IcLwEMQ=; b=dO6JRuKdVytn3PI1uBObT1Wnci0gQ1T8jDBeyqrZesKyvPC2oSZ56tKrdJFkaEQTAFkd+9 S0oVtNFRi0fl+IqkihipvlVowDuUyoQcOL3tpE/pW483wOvkMzcdn+lXx4PfIM2wm5UXcN RyAoDDA6buCRUcPZndDxsIymv4TyGcg= X-MC-Unique: RBqkFLp7NuWKpr0rD5SKPg-1 X-Mimecast-MFC-AGG-ID: RBqkFLp7NuWKpr0rD5SKPg_1782200781 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Tue, 23 Jun 2026 11:44:34 +0400 Subject: [PATCH v4 19/34] 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: <20260623-b4-ui-v4-19-4656aec3398d@redhat.com> References: <20260623-b4-ui-v4-0-4656aec3398d@redhat.com> In-Reply-To: <20260623-b4-ui-v4-0-4656aec3398d@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=eSnDIegkQtFbOfF34T/asUHw2L2glVvdSLZyaku+jY0=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqOjle1ro2ikgTjN151e7WUPQb1z6TuLQZjc8jd VVAOzdsSqaJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajo5XgAKCRDa6OEJdZac 5UVKD/9zkllIzyzEs0Jx2Wo8GBcdY83ZDEmfoAI3Zo+GZR+nlXtV8AAaG4GpQ9z0iswBhlt0ZH3 YMAZYzIDaOiSqppbSh+VVBfynM+SoEum51QjyVeCZl4PwwdbljMm0DjSgAFJRh5RiDcL012xkXN c3mIUvnJpnrty+S+/o8VgP8VgSQDWwn/1Li6mXuTxnQi7qMbWJFjyXZhzyBZre8gu+2rmdEkYhV PskTLPbm6qkVNUlbct2nvG1SFPdEJyq5fSaEc4KOI824tic0ydfZqTCd8dosUvV3+23CgaaWv75 9bERXlq26bX8qIaEcphu1BG20b+CGVKjzsdVBignulXStzxW3VcP8yqdO3dAHUZWGd71KsdRrhm 9uDChXHcFeXu5TyZre6hOHk0DWKnViqvwQzitB8Uq3DWltqaEDqa1CJFTCniikTTakj+fBnVMiS FduXueULoT2V+BJiMYagG+XSESQBBE0N2JLFxONFXIShTRw8+Dmb8ZcE7+QunJBOETS/btOpFne VwaZ5u8lIqi14t9MpcJXAZR9QuCYbqMZ9oa6QRjilGpnH72EjVIJW2uuXYyXj8oLWCYdd8K48e1 Tj61bjqLIA5JDtYqyJlH/EJAENZ4NNG8CkXS0hzapnABocDLntPRPEV1I4qSGb61hz4OgRbeZcU PZyM6QPyRsFsCqw== 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: 1782200815836158501 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 Reviewed-by: Akihiko Odaki --- 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 c97a0d5c248..405ddd91259 100644 --- a/include/ui/egl-helpers.h +++ b/include/ui/egl-helpers.h @@ -81,6 +81,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 069a5249554..d689f187c4e 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 Thu Jun 25 05:53:06 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=1782200880; cv=none; d=zohomail.com; s=zohoarc; b=K1IxJhrL6EaFoMB9SvxJXucKW6609EvhSKZRw6mWDPcuCnacjQlt3SPQ6FUHg6KMV10dXijTs6hRkn6QxkBEKju0sZmGlTlBrVrMpPGSdGNrVFk2tOUxpfC+wtoYCw8G7ZAhBD+rugoqxHc9b/6S0yji+UDNfWh6QbPX/EptJpU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782200880; 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=gAZq6fm90RH8+U0CFVr2YIwSu9l8OeLSPfjmA/gp7DY=; b=bo4ip7RHSBA4Oy2AGKZ3SSc6wvGjxqDw5p6DG8dotxhLXaIksP42AGXlWu0v4DVjIaEcBDwwGp3FoGlqJiKPAmQu4qFI9cJvVOASBmayecylbh01IPS0CcX164iwTzolrYpdnZgSlG5kt9hKoe3xo3X8/fsatXgGcFg7Vwbfh08= 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 1782200880372609.1366704473967; Tue, 23 Jun 2026 00:48:00 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wbvqC-00069I-KN; Tue, 23 Jun 2026 03:46: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 1wbvq6-000639-Bt for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:46: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 1wbvq3-0008Gl-Bm for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:46:32 -0400 Received: from mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-407-czEWwAc0M-unqmWY3d-ARw-1; Tue, 23 Jun 2026 03:46:27 -0400 Received: from mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.111]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 1E1A41955E9F; Tue, 23 Jun 2026 07:46:26 +0000 (UTC) Received: from localhost (unknown [10.44.22.10]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id D285A1800347; Tue, 23 Jun 2026 07:46:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782200790; 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=gAZq6fm90RH8+U0CFVr2YIwSu9l8OeLSPfjmA/gp7DY=; b=XP74ZAwJHzj8mh+LpymbF3RCEIiF12gE1nDmNHRey5D3tqvZM36nEoHjkBkQ1ljrpI8WgH 3Ren5dxNvuKMlqj5JGrsqVhZKwGNc0dcEiwugULXBz0BMVvlqKbkPpMsTej9LVZU3rbfqp g4pCAVKb0WZmrwSXZXoKBByHVZw1/KU= X-MC-Unique: czEWwAc0M-unqmWY3d-ARw-1 X-Mimecast-MFC-AGG-ID: czEWwAc0M-unqmWY3d-ARw_1782200786 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Tue, 23 Jun 2026 11:44:35 +0400 Subject: [PATCH v4 20/34] ui/cocoa: implement display cleanup MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260623-b4-ui-v4-20-4656aec3398d@redhat.com> References: <20260623-b4-ui-v4-0-4656aec3398d@redhat.com> In-Reply-To: <20260623-b4-ui-v4-0-4656aec3398d@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=HykoT1JvYFnZV/NmtGmkJ57XBE/a/Ecau6SBb5B8jB8=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqOjleM5UCU9JOBXu5efjrJAIRD2e0RYKR1bXFf 8d/7dnEhHOJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajo5XgAKCRDa6OEJdZac 5Y7iEACLTA24iJwEuWKv9Zcivcg76lOSGwaBiUoUxG1ooCVz4Qr7+HoIUxt7ffzD3Hcq90LJUcn sAnSqru2VXDK8nJRB30Qn372bpNtOXlyx7sCTyfwAS5aFzojX7ZV+qvfM9FOn3Z+JUNXMHf1Otv u6Ptj5ribw79PAOp9TVIOjL+PX0VsopoLHwmTgQHYzL/NgSqAEixggBXtfbzf4taMxiYdRVHWo/ s+Wxhajw+7LQRXg8t17oGeJBfho05QVh/m7GK61Xdu6s+V4/w6fHW4RE2LULYbPQcSIk7KYhRRe xz6CXaU2+JtzNaW2x8rF1MQIaIA/+fIXr+WpxPbTdkdhAqyOaSCG7LmJ9PyVfbrWV0kEPbxEijo 9p9mudvUnTjmr5ppMSXI5Dbhpzg6yK0liOErDJ7kNhCse7KhrW2pzZ5CMRzhHlql8/DrLitQju6 3X7q/zrIMbDfT0tHDUo68j2QOxdksUq1Y1IIxljehBtOL7TCCBtas6we/kttzVNsQ/Sxu/BNfAp sAiOWQI0ngiG/CO7K5PfozlJyV1xm7lTA6cb3qMEm2h4tmmo5ukOCJA7uthuvcIfD+u/NmnWuw3 MSwgXRbKdMWsB6YU8WluYZDixiW8lhS87uBVTNsNc5Z2jNDSMVS98jV+TzksFYtWdJaRK82d+5R 4stPLxhXDz1SGgQ== 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: 1782200882082158500 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 Reviewed-by: Akihiko Odaki Tested-by: Akihiko Odaki --- ui/cocoa.m | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/ui/cocoa.m b/ui/cocoa.m index e157ad01d85..3751be37922 100644 --- a/ui/cocoa.m +++ b/ui/cocoa.m @@ -1206,8 +1206,6 @@ - (void) dealloc COCOA_DEBUG("QemuCocoaAppController: dealloc\n"); =20 [cocoaView release]; - [cbowner release]; - cbowner =3D nil; =20 [super dealloc]; } @@ -2038,9 +2036,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 Thu Jun 25 05:53:06 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=1782200957; cv=none; d=zohomail.com; s=zohoarc; b=mGfM+53ZAMA5BFPeT2vCMFgTYzfz14I5SHK6nziCeWqlPfBjxuBfpd98T4a2CL0fW2bzZghJkA2qeesrBoBH2xk4CP4w4ZRFYxcfbAcXRbIeaKWtsub3qScqf8SuDBUed/kXvugbTncyd3qGoF4Wj4DdRKdOPvBtdWl6txP/gTQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782200957; 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=Zj3tUMqTxLKcBTU+emlXvGnLHK5NtbPWY7r4XNLmt4c=; b=N/TsYMaiNMq80ywJUne9UKnWZmuwX4Br4SmMa+bXpxRBbPXwP/DqnKgERlELsTwHY8MEmHqZMsvDdbOPHfoYR6JWj3Vyt9D2KhpgFKVPSAdmqk90yJU/OyOlOdSqBb4ksHAIC0n16OSGxw+nybbMDowcVZL3qa85yeRUxiEkZTU= 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 1782200956995174.61058429495608; Tue, 23 Jun 2026 00:49:16 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wbvqI-0006RK-Nc; Tue, 23 Jun 2026 03:46: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 1wbvqD-0006FJ-Qk for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:46:41 -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 1wbvqC-0008HR-Af for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:46:41 -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-62-RceEqgzBPQGJzqD25f8yjQ-1; Tue, 23 Jun 2026 03:46:34 -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 D57FA18052E9; Tue, 23 Jun 2026 07:46:32 +0000 (UTC) Received: from localhost (unknown [10.44.22.10]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 18236195608C; Tue, 23 Jun 2026 07:46:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782200798; 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=Zj3tUMqTxLKcBTU+emlXvGnLHK5NtbPWY7r4XNLmt4c=; b=iGjVrHRCszjCo4xU6yz13L5CnrzXr8KHdl615GGj9/QyBBdCmGj/kotXaQb+ky9kBJ702C 3X4EXEFf9EUdFlegK/yGZP6j87eYJ2Jx1CEou/cGRJggAWushtA7MQuSue2EIKTA9No/// Bhg39jsZqUCdFbb/jpw2I1/WL0m/g3E= X-MC-Unique: RceEqgzBPQGJzqD25f8yjQ-1 X-Mimecast-MFC-AGG-ID: RceEqgzBPQGJzqD25f8yjQ_1782200793 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Tue, 23 Jun 2026 11:44:36 +0400 Subject: [PATCH v4 21/34] ui/dbus: implement display cleanup MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260623-b4-ui-v4-21-4656aec3398d@redhat.com> References: <20260623-b4-ui-v4-0-4656aec3398d@redhat.com> In-Reply-To: <20260623-b4-ui-v4-0-4656aec3398d@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=930; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=qOj6edOyjhZsl79Z/n7afG0S5OErckUOFe7CpEAKPtc=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqOjleKLywcXBiUCcCxCo0p8jx0WwdEsvPUhi6p 8SoaraucruJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajo5XgAKCRDa6OEJdZac 5X0DEACHJCK2w5OIm7V6QyXDV0skaBcH3ljRd+Zjv8TOaUfjo+irzktPE9D67yqO/JIvNmpIXiW af/ZAy3cfQFAxfEiVObSBmbFm3F8HaXVyqdYDvQ4uIP1akg95dItOHdGgDcJuL/AStWRp3bbRxr gqxHJChJwP0wsxMEwWEud7NzMwt+1YkjR+0O9z+J2rhdZHYKH/dAlBmQv3OdjUUx9axJONzldn3 6uZ3xD/PpF6zDD9QdX7xIL4IdLR+QWQcNNSWPsa2iCFCUavB4ohob6PDypaDXteMAV/6vfCjI5E azFcmr9KRWU+mSojbv9Ol8urQMBPcevunypLzrTTYxpfitkxn38xkHsvYx3g3xfvqryCZkWGCK6 HfuITe8QaMMycNtuCsmuISkZkvZf9/zoUU+f/hFF6luyRzICvYyW4Z5G+2g4FA3I1n4Mxw93wfd UvU0HY1vBNfGGPOy577zuGfsNfQjuqvQqtAfHt3kC+e3V10g0YEyf573xIFULJeY+TIl95ckCZF rHj4WRs9mTZPvGUAHXzqHkLvA9scloBks9YYoNZ1EsF+w3gAU5I1y8cXWsX2gtLSAu/eihq10xq lB/tE+a/QDV6WVs/xuFWhlIQth141AnVSnHaTt7NxV4xNdC9kcTP4gpVxE0DGcQMoboHnv7U7z5 S2RjBKnGT5UjIqQ== 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: 1782200958504158501 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 Reviewed-by: Akihiko Odaki --- ui/dbus.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) 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 Thu Jun 25 05:53:06 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=1782200867; cv=none; d=zohomail.com; s=zohoarc; b=Ab/vtWi47RcRsyaRIibno8Ozs8ZUvHjPaKoAO7BNBIX0LrIrUsEQ4oQVy00bvDVU1rMS4ybk4nCkCetql/zV5UlxbXsJPN/cBME1cuW6uTdWFu0kCV1lONeL95/GT75kHbQzulcsFw5igX5bNo1li2XgWRDg8A6P2AUy528nQxY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782200867; 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=tKlxCGNKs0kk4ALX1vXp/DYEb4dpEwlOWrBgQleDG7c=; b=DMj/fLYkK+VdVVLD6Ltofd6vBGPKtkVYUncnH7vxPgayJccqSvw7DGpy6MoPJNbe79YrDQ8fYSyBQ2H5jVssXnDZbesL768t8lOJrC4CpDVjofnPV1VjHwY586z/yitTI9eiVlkb1k8ELTeDuJoohwEfOWlNKlgKnFTtf9xhZtk= 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 1782200866982133.63625231939523; Tue, 23 Jun 2026 00:47:46 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wbvqL-0006fS-NB; Tue, 23 Jun 2026 03:46:50 -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 1wbvqF-0006IM-0R for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:46:43 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wbvqD-0008Hm-Ag for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:46:42 -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-219-iqZAkvdpOqK54doRrfLz5g-1; Tue, 23 Jun 2026 03:46:39 -0400 Received: from mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.111]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 0A7111955F45; Tue, 23 Jun 2026 07:46:38 +0000 (UTC) Received: from localhost (unknown [10.44.22.10]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id A754518005B3; Tue, 23 Jun 2026 07:46:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782200800; 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=tKlxCGNKs0kk4ALX1vXp/DYEb4dpEwlOWrBgQleDG7c=; b=GhJg/jFR7KMarvQex8yvwfZOnGR70zuTLL8h0nwlyW+1eNuMkpGZ/uQneyuFLx2f+f/tmy UR/HPWrDypRrO8wVoM3KWOf73q1Os9G+QMS+9sKYXbvlATncBrXJF4Q5lD5XPndPT8uDBw oQuEAk8Ik+lIim5Y68IujZdj+2gubsg= X-MC-Unique: iqZAkvdpOqK54doRrfLz5g-1 X-Mimecast-MFC-AGG-ID: iqZAkvdpOqK54doRrfLz5g_1782200798 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Tue, 23 Jun 2026 11:44:37 +0400 Subject: [PATCH v4 22/34] ui/gtk: implement display cleanup MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260623-b4-ui-v4-22-4656aec3398d@redhat.com> References: <20260623-b4-ui-v4-0-4656aec3398d@redhat.com> In-Reply-To: <20260623-b4-ui-v4-0-4656aec3398d@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=3764; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=+DG8xB4KJmLQS3EpZUbBQpkZhWCN+8ypFWbdujyuWPI=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqOjlecuR7X2WqRJ8iwPyrQbt1nMxTVH+zYN7o1 QgnNmS25QyJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajo5XgAKCRDa6OEJdZac 5d/uD/98p5dabwIpQ/3+eb+6pexgkonAqVHrnXURe78dXVnlwHmNzospipWbOT73piPPS5yTHjU QuA8PL59ADvAFeGw268FJMPCAVTu5ke04eTSu/Ai4LQ3CohR54YDRc/ruABo8a8o2TxxiwUWgbZ EcYCRF5eoDilhNlQkDbSgM68kPPiXdwjx+h+HE0f2mpIoHKbShwPtMzurP4aYrUpeEXQGhrseze fD/SHnln4E1OPs5yIDXsoouhl8un80Pag9xqI4qg0f+nc35nNMtYkykFRYt+C0GtrMCMf6ATuKR 9PvXmzXveBLHquHDWDDKwH248vhK6S65jW7kPVX2lA/HzeyG/GhflNntdxDsOvhH5+lZIz2mnMH W+Xb+Qxj3/K/6fyqiUX2uEeATpXhvmEQhjqRj5+d0MxsIvuoTQjLGP9lWZJEugymZ//q3IjNnZB mR0KVCWYqN8xe9zrd2LYplzuhkG4bZhBniV8zNNB9UMij3r5XxJOJbyYLToIy7XSzKwVuVeEmLZ eOzbvmycctEEBNuQ4sUqHW49Y3hlUJg1V1t3dn4ATDI3GzsjPAjlonzr6A8cZdwBBD32HnhiUaQ qDFbsdAOuQNVu+t4/9iShdRDwf3qLOrS7nTUKyYI0qucE9NaVSig4wqi6jZh93aAoqln2DFNjMu acu7dNV9i/60Dmw== 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: 1782200867982158500 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 Reviewed-by: Akihiko Odaki --- include/ui/gtk.h | 2 ++ ui/gtk-clipboard.c | 15 +++++++++++++++ ui/gtk.c | 20 +++++++++++++++++++- 3 files changed, 36 insertions(+), 1 deletion(-) diff --git a/include/ui/gtk.h b/include/ui/gtk.h index 3e6ce3cb48c..f4c8e6a9f00 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; + VMChangeStateEntry *vmse; gboolean free_scale; gboolean keep_aspect_ratio; =20 @@ -225,6 +226,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..dfef1b10fe3 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(); @@ -2560,7 +2562,7 @@ static void gtk_display_init(DisplayState *ds, Displa= yOptions *opts) =20 s->mouse_mode_notifier.notify =3D gd_mouse_mode_change; qemu_add_mouse_mode_change_notifier(&s->mouse_mode_notifier); - qemu_add_vm_change_state_handler(gd_change_runstate, s); + s->vmse =3D qemu_add_vm_change_state_handler(gd_change_runstate, s); =20 gtk_window_set_icon_name(GTK_WINDOW(s->window), "qemu"); =20 @@ -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_del_vm_change_state_handler(s->vmse); + 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 Thu Jun 25 05:53:06 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=1782200873; cv=none; d=zohomail.com; s=zohoarc; b=GbeiPuv6u0ixF4zvEDW8GKBXE9He/+HZUC7SFIQ8qANltFNTtqEXrjtjN8YPq3Izl+QO71A6y2wSUu+/D52B99uAhPUa/vIFpLjBDMKW3uzyyeyUD3uqA7gCuv8EFxcdC36Gsg52QipkftRSw222pP+ZKJN/WkwIpS7VCJLCEeo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782200873; 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=vE9pwrVCF8aM0xWfTmklyEyT4IZO6+MxpFsjg7EbdaY=; b=eEHdij/wyUDSSZTVIGXD8qhr5+HgyZTWNXYuWobll/613X3xR38kfaXPZTn7YQ9174w/5GURF6Zst8t/15od7UQrhpCZitwA7PUmjpUBQ7P0KQhMv8NeSNIrINkmLpCbak/Az1z3scY1J03KZt6xPXR/GfH4EfWyWsilXYVJ2RI= 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 1782200873547700.6415395558791; Tue, 23 Jun 2026 00:47:53 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wbvqP-0006ti-28; Tue, 23 Jun 2026 03:46:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wbvqM-0006le-Rx for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:46: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 1wbvqL-0008Ij-A3 for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:46:50 -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-582-APPKOgnFOSO0TIUBThpvXA-1; Tue, 23 Jun 2026 03:46: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-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 7048D195604D; Tue, 23 Jun 2026 07:46:43 +0000 (UTC) Received: from localhost (unknown [10.44.22.10]) by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 0AE0B195608E; Tue, 23 Jun 2026 07:46:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782200808; 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=vE9pwrVCF8aM0xWfTmklyEyT4IZO6+MxpFsjg7EbdaY=; b=GudPXfbR5lKtPTvE+4EHgpwl0Tnn4CI2viR2QXhSo7sdcd+k6SCvtayBb2hMVUqVr1aXHb vM0DNlh6vVwM2AmTG7vxumhHtA0gEHxKFnc2KAVOigS3YA6zeoAqsg935hWiYfseJYK/ia 4ZqCeG2V02ce8xcgjSUkgClfCF3Ldbg= X-MC-Unique: APPKOgnFOSO0TIUBThpvXA-1 X-Mimecast-MFC-AGG-ID: APPKOgnFOSO0TIUBThpvXA_1782200803 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Tue, 23 Jun 2026 11:44:38 +0400 Subject: [PATCH v4 23/34] 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: <20260623-b4-ui-v4-23-4656aec3398d@redhat.com> References: <20260623-b4-ui-v4-0-4656aec3398d@redhat.com> In-Reply-To: <20260623-b4-ui-v4-0-4656aec3398d@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=4PGzFZLS6rKgzOHttg/VPScYJxVEdGX6PfcaaAG0RCE=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqOjleW32kOJvB8G3Cux+cjBWpqr1D26UJyv5pr 9JXXwWGA0aJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajo5XgAKCRDa6OEJdZac 5b0xD/4u4MsiEyuD3JYmacoly/A8k2Gg3ucvF/pufIgzaxOYC3uN0fo9559P6Xzu3uMmrl2BfY8 yURqvZhbo3TP9sBAiA1USHuDklePYzjCN+VObI/q5A4bUwVymjtHJMGHb1EMftLFbSNibpnaho0 Yf5DGx72+dH8YS5A3PlqxH9RooWl5YRbpj7F6K/qB8Fei0ZUKx3wVY8xxcZg7NC/RtcTLkabaxb 1tvRKeWKMDhinkypPgZviOwE+mfEJPsNUxi9r2dMD+GOjwOa/82TY17JwqaYq9ftaEhiTuitWkM WWdObNcfCYgYWHShYad2YP0Pj2LHpvrPBRyYIBPecFiJefon79N1kZRAKyCYYI9TSNkQKOl1R46 NeDJj1PTquk9iz2Np0NloeuCBar4XQ1A00BPUPa5HvbURuIFjgI8gWF5FhuUL8VActSPZjT7zIN 7xedj1dempG5t/WL2qR811UL4GbriBX9W65f7JUCLPJQARf8mpcNo870MhdXDQCsKGgXwQQJy0g ptF1+Ink+gXybgSrZTHO75ARuCMwQEq9KMeIQaHLP8n16xx9U8NzUkJN+HJtXIPlFspC2e2OlXl DS+tHtkM8Fww1YE+IH6CzBvcmuZWNS20FTsYcKEtewIxpRlKlTBzN4N+norGmqMps+pYH2wmnzk DDi9cMgxJ/RhRDg== 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: 1782200874029158500 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 Reviewed-by: Akihiko Odaki --- 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 5322c56009d..29bf7228883 100644 --- a/include/ui/console.h +++ b/include/ui/console.h @@ -415,6 +415,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 Thu Jun 25 05:53:06 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=1782200830; cv=none; d=zohomail.com; s=zohoarc; b=eKDHDdtrjtcjR//YW9UNi2nCWZyYG1TxydYWaMT2GDEKQbMcjO63qJVDcqQ8pEsdzDmN26VJWdlmmquIE8AAS+BAmSAwsEsgqc4Z77STe+k0Quo+xD0qL7UIyilYtgd/S26HCHhD4xm22iYHi3r65Qq1m8ZBtikgqFevIqpybg8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782200830; 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=dlzsyqihQfiCleKXy1jAXH3pL6EmBCmG8ZYa1B+osl+sshzj9eWcYHI1D+eSUEtfMv4DqUdFP4PIX+o4Vw9YG30qPS8BV9FpCo60Oy67a8WhSJQTUwGnsb9E72Sff7VuPvvYrBE4EYx7tQOjHD+xixPNMXCx8G4TO43Dj55yryE= 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 1782200830337848.8772812085683; Tue, 23 Jun 2026 00:47:10 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wbvqS-0007DQ-H4; Tue, 23 Jun 2026 03:46:56 -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 1wbvqR-00075J-AK for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:46:55 -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 1wbvqP-0008J4-Qs for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:46:55 -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-648-kscpTS_0OO-jGaa5po8-qg-1; Tue, 23 Jun 2026 03:46:49 -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 9A7411955F70; Tue, 23 Jun 2026 07:46:48 +0000 (UTC) Received: from localhost (unknown [10.44.22.10]) by mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 5C3741800593; Tue, 23 Jun 2026 07:46:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782200813; 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=SSajDqlyKk32pCWRpGbdrdQRQ6ukQBWWOnSZFQu86Y9XfVNHD0va0Q32eRDhyor9Gfy2d/ qwMF5ufloEW5037w4fFd41ei2xLWJvwiWL+sWUjXvxT10aoBZ9l0eCyX1+DuViAqe/+2y1 ADbb4GDccjv6zZHn9htCCGdEWOBX8rw= X-MC-Unique: kscpTS_0OO-jGaa5po8-qg-1 X-Mimecast-MFC-AGG-ID: kscpTS_0OO-jGaa5po8-qg_1782200808 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Tue, 23 Jun 2026 11:44:39 +0400 Subject: [PATCH v4 24/34] 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: <20260623-b4-ui-v4-24-4656aec3398d@redhat.com> References: <20260623-b4-ui-v4-0-4656aec3398d@redhat.com> In-Reply-To: <20260623-b4-ui-v4-0-4656aec3398d@redhat.com> To: qemu-devel@nongnu.org Cc: Paolo Bonzini , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Pierrick Bouvier , Fabiano Rosas , Laurent Vivier , Alex Williamson , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Peter Maydell , Akihiko Odaki , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= X-Developer-Signature: v=1; a=openpgp-sha256; l=1311; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=6hGNnrGYNd3ibRqfbbVKqo9FqKz4axEEuiTBy0WRKJo=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqOjleunrM/k7DwQ0/F6iKQrmpkaEDh2TAdJR9v GAFx1k3EJSJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajo5XgAKCRDa6OEJdZac 5WI8EACj2er6KZKW9XrO6d/3YBEjMvbqnnfOzu2VUzFeue60SGMyneIzgS0kydQXO4DxwNbFHSm zTCpxPE6O+Kyp4IMd5ROsFXRjd/kGHthK4VfdrWrDIjVauutV7n9B9UvN1/T2FfkaJ8Idr7yBon dLNNAV3ujCo8hSTs6EvQ1BptYmMHf+/qdAl/jUiRuS5/yjeRwqByzHCUXYJaxrkMDc7+PUiIjc9 L/QP2fU0g59ghVfHrJBRjcCqOB0vLh0Tgzd65T6AQOwXQlT80l44h9oFpgJg7q7yridP8k6IB9h ebngP6NfD+8uMbfaGQIaplK2ms8RCnAjNa0KZ6KjLMLGJNptbPwt/raBuscsnwvonhCf/h4uWIb SwnEHMiq4R/SaLX+fwzTxYud7bl7wapkncR24Hw3K/jf0AYh0wa5+CW91DwUaL7usXWllWbwRJz MQy+75AuXX81+LrTl17kENvMzSYhWvQNf6Iz1UCIPQ02wGUTH6xsNDyoUwGC3YKeTZMVBGnT6r+ GIcwhTuz4ZrCcUi2UPShCu/k1Zf7H1gGXsW2BpNy1fBL9tatZpLSfZvZXSEr3FrO255eUkwo6sq rJDhCDam6sl0rAeCsAFLmxbK8JHdM7XTCJYVKXjsCMb1APVIKPocEWjmcpG+FNsj7yZi2ZD/Yb3 cbCUR2JlagOCw0w== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.93 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: 8 X-Spam_score: 0.8 X-Spam_bar: / X-Spam_report: (0.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H5=0.001, RCVD_IN_MSPIKE_WL=0.001, RCVD_IN_SBL_CSS=3.335, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=no autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1782200831744158500 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 Reviewed-by: Akihiko Odaki --- 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 Thu Jun 25 05:53:06 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=1782200847; cv=none; d=zohomail.com; s=zohoarc; b=EVa/EcgVbD6a7WQCg5ypfpJU8NnPHARAqmMn45KlgdA0WvsEAxU9l2wXp50l7oT87gOACvXWZS/26JoD1DJ+1GKYxNsCJUskXf6MgpXZEnpkyeGuKYrrpTzVfGfFYB7T/+TkA6XAciB1Zl6YBr0mIFvmCq2TqI6xdOnOXkQcEU0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782200847; 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=nPgVZfKggvMfE/+CzhEHvi3UzMZghbPjfwgeHSsi8YpLirS6P5gWmL+6seQ0ihZYlt3ASN93XUWvazyU62aptJLjObIqwvrwMfXWMQfMqHz2QvROnZdkg7EYosWF+N+aTWngrde3KGmt8r4oqli6TGCxIpkHHSIoplwN/6unh8o= 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 1782200847704975.6654002222779; Tue, 23 Jun 2026 00:47:27 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wbvqY-0008HO-V7; Tue, 23 Jun 2026 03:47:02 -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 1wbvqW-0007pR-Pl for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:47:01 -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 1wbvqV-0008JZ-9o for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:47:00 -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-169-FVmyDVR3MpSMBk5ZZs70Gg-1; Tue, 23 Jun 2026 03:46:55 -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 1258918052ED; Tue, 23 Jun 2026 07:46:54 +0000 (UTC) Received: from localhost (unknown [10.44.22.10]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 7CFD930000DB; Tue, 23 Jun 2026 07:46:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782200818; 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=N7wWFC6hakZt8kvjGMxOBbMUOmKQk3m2aO0L5GjgXqINI3gP32BOFEpin6nhL0GJbu40dN 62ffyxBLLSrnUr7d7BBbbUrpl2bqTzZOqUaYxXl6SwCuiedIztP/jshl1Wlo7tOB7msFEQ kEs77GHAeJlgTx1XnNqkFRh+Gn92dS8= X-MC-Unique: FVmyDVR3MpSMBk5ZZs70Gg-1 X-Mimecast-MFC-AGG-ID: FVmyDVR3MpSMBk5ZZs70Gg_1782200814 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Tue, 23 Jun 2026 11:44:40 +0400 Subject: [PATCH v4 25/34] 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: <20260623-b4-ui-v4-25-4656aec3398d@redhat.com> References: <20260623-b4-ui-v4-0-4656aec3398d@redhat.com> In-Reply-To: <20260623-b4-ui-v4-0-4656aec3398d@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/ZANAwAKAdro4Ql1lpzlAcsmYgBqOjleBF+Rp+03++K4oqQiVpGN3I7M+zCcEnuA8 zGllsTW4BaJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajo5XgAKCRDa6OEJdZac 5dmWEAC5RE/GcrnpGs9wqrw0oDRtIvh7ElxsF9mcWakzuOrB2j45YwFHt0tfhE6iwyz1fPnZenG BpXooNY7OESpxYkNLnYc+3keLDFc4MnVYLb459SKGv4uJIhG+ru11OyJ/vazmZC12YK5lmTHm1e vFpLgFhLY+vMGLTsKjYHRqPw6RTUzq+3uR0opEhBMoA6bnw19zV4mA+KjfJOa4ZfK/wPGNBpTnB I/NeHcapHD7BXsYAyZfTKIMEkAZAChA5oGrN38ux9ToWE45HWS9Mj58UkPGIcXF9MXfkdttK2Qw 0oEdJJpomsDfdjLZtcz3BsbqMSEE9MlAARHnBEtVKwBxKTo8vAToSnBZy1EyUlwAVStJaNX+gS3 RZzCXy3gFyX2hfNBcc31uTA3mRcBax2JsUmFEyLcV/NHvSzll8fENj/hWZzSKqi5a6p8GIcD7cF BFmK86M9hwUjzEKhw0uQoxjgmFYxFi3sVZyGqwJeg6dVl7YGcxhLKAOaI/KPDXjyYbDbaP1ujcM 1pxcO7D7A+Fzlcjk+EK2spdP3Gh9bqBFJXGXng24DAgZsYUP0M0s8AQvEzS1eoUYOsyqcf4Jw07 sAZbmSpLoRBRUIa3tJ3QVq56IOcC+XwBvV/8eYFST1Vpz0Xl+wdU5vUlnQ+i7qQRBTz2fZDAVlh ItVkv9hU8cw1zGg== 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: 1782200849835158500 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 Reviewed-by: Akihiko Odaki --- 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 Thu Jun 25 05:53:06 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=1782200868; cv=none; d=zohomail.com; s=zohoarc; b=FaVGx81Ip2o8pjt21d1pquBkJXpxVJTiWoU4Z9cCDjPRUedVTz1fSdHLUqGW2mNxPexJ+FqrLhsj/lOv9VzcktH0+73atThNuvIoUStVUCqizuEzaE8MSjIk3cSdqd8FmRgP2qzTdlU0zK2zfD3p8YhUolI0oIAteXMUgnt+FgA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782200868; 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=4OdAzLtMXCE0KbwWonpJ6vMVm6YZX4iARVIMehN4nRo=; b=TCTRCXzLNefsafpvP1Oc0kSq7mlGWGjdpH17Gm04M83Rx12uhqYIGQEQQbv+FV2SYC1F+MhHVqxITfrgLU/IWvqTBIAAKL/Gnv0wmemuLFGETxWhLqIThYIKRMiCKqgn7LB60h8dnIRvoagQEOpExK6r2Yvyv0M1YffmRGOg3nU= 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 1782200867956773.4483227930175; Tue, 23 Jun 2026 00:47:47 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wbvqe-000096-NU; Tue, 23 Jun 2026 03:47:08 -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 1wbvqd-0008UL-71 for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:47:07 -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 1wbvqb-0008KH-CC for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:47:06 -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-427-rgSNMrWfOrG6x0IKI852Zg-1; Tue, 23 Jun 2026 03:47:00 -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 3C9E7180025C; Tue, 23 Jun 2026 07:46:59 +0000 (UTC) Received: from localhost (unknown [10.44.22.10]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 05D6D1800591; Tue, 23 Jun 2026 07:46:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782200824; 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=4OdAzLtMXCE0KbwWonpJ6vMVm6YZX4iARVIMehN4nRo=; b=NdvuGT6hEeeYpfWlWXBCeCJczPzllzdu96Jij+GUxDVXLTWx92kL1Qr6ch1K6ps3h486Vp 5YG7TLjJvkSv7gWJJZoDnGpWQr7N8KsVs+uO4nyKAe7uEC00Mt6CBvLnGYURU62udEW8kF ABcycDHb+AsDr+hX3ZGiYJCe0oT9+dM= X-MC-Unique: rgSNMrWfOrG6x0IKI852Zg-1 X-Mimecast-MFC-AGG-ID: rgSNMrWfOrG6x0IKI852Zg_1782200819 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Tue, 23 Jun 2026 11:44:41 +0400 Subject: [PATCH v4 26/34] 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: <20260623-b4-ui-v4-26-4656aec3398d@redhat.com> References: <20260623-b4-ui-v4-0-4656aec3398d@redhat.com> In-Reply-To: <20260623-b4-ui-v4-0-4656aec3398d@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=7432; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=pYkHf4xuhYrughcwER53jaOYI+5mKVTp6HoXtiFTfzo=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqOjlesHmJFI7xo0gXdnvNO+tvwLRQvUt2bKvep iW04MYCgZOJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajo5XgAKCRDa6OEJdZac 5XFwD/0ZGiBocCZfriGx5kf3Km7uVAPyCa50O0tuyEwMWnK6BqgBTh4uBZb1uNna1+6E93LpUgf VOYTK5xda+uyOqQroYXUNsMePY8GwEIk+hFQC9QTlVbOwIlGgvG7fOzLdtRz/GV1Yug/rCJq3Fy MpqkiHcHTR7rR5rICN4dpgkQwVaGtxo/pbJ11z0BOYJT3kUTuHa5Ks8/6S2/woln1szMxZ8KbSC c0oRb1Yv4LflXJeECzpZ5q/Nq2aMtkmbn+JijfE083SFpR7b/caAfEQghzmAbBlbi/DUnhKYlcq Pt5yYpqzATjyYRYFTpv4KgJdRrX0Xwygi1tlTTDeBTz8vsLlDd2ieuOxt32UolOJq5y/aTptnCb L39l1LgdsU5FLEVG5FVWKq57K/hqjOD3jdVk09+sdO5oyfjYLYqGsxuixKKoLfDxNFtSTBhD/YD hJCSRK+itlUCzoRNOCWoW+T+JlMfBB8ghTRw40q16/447jVP6jvU4fLFhZa2xVoNN2/e/02qZhp nWlW+JF7t+3e2K9CVd4Lejm1o9JwIhBg+iWfn5CvRyZxQH6QxKCPmVufhsNb0gGBrrJNrvWoqLi Dd6DhnKVmOFpq5edlIlIze4NPQbHt8seiK+5fn6XIAcRCldweRhO60ZDHGg3WbIYgCxy5sbg0mY icTwcJJMFuW6DWQ== 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: 1782200869976158500 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 Reviewed-by: Akihiko Odaki --- include/ui/gtk.h | 3 +- ui/gtk.c | 108 +++++++++++++++++++++++++++++++++++++++++++--------= ---- 2 files changed, 87 insertions(+), 24 deletions(-) diff --git a/include/ui/gtk.h b/include/ui/gtk.h index f4c8e6a9f00..fb60cbfda5d 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 dfef1b10fe3..b4dcdcd9a44 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,64 @@ 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.ectx) { + eglMakeCurrent(qemu_egl_display, vc->gfx.esurface, + vc->gfx.esurface, vc->gfx.ectx); + } else if (gtk_use_gl_area) { + gtk_gl_area_make_current(GTK_GL_AREA(vc->gfx.drawing_area)); + } + 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); + if (vc->gfx.esurface) { + eglDestroySurface(qemu_egl_display, vc->gfx.esurface); + } + if (vc->gfx.ectx) { + eglDestroyContext(qemu_egl_display, vc->gfx.ectx); + } +#endif + qkbd_state_free(vc->gfx.kbd); + if (vc->gfx.surface) { + cairo_surface_destroy(vc->gfx.surface); + } + if (vc->gfx.convert) { + pixman_image_unref(vc->gfx.convert); + } + break; + case GD_VC_VTE: +#ifdef CONFIG_VTE + fifo8_destroy(&vc->vte.out_fifo); +#endif + break; + } + + if (vc->window) { + gtk_widget_destroy(vc->window); + } else if (vc->tab_item) { + gtk_widget_destroy(vc->tab_item); + } + if (vc->menu_item) { + gtk_widget_destroy(vc->menu_item); + } + g_free(vc->label); + g_free(vc); +} + static GtkDisplayState *gtk_display_state; static gboolean gtkinit; =20 @@ -2525,6 +2588,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 +2646,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 +2754,9 @@ static void gtk_display_cleanup(void) qemu_del_vm_change_state_handler(s->vmse); 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 Thu Jun 25 05:53:06 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=1782200855; cv=none; d=zohomail.com; s=zohoarc; b=gqYs3b70mDieZDthINz91cy45+hlbYgXmFiraF3Qzr8NzbwrbQ123StsmILrj12s7Yu+am1PoXKBI5EP2FLSIbgunwcP/Prv1/ctNcag751jR84iBGKWeXodDtztyimid6+lgfTczmyoaeoaCSDTjiCSUdxi7Z8EGmgyI6sGeWI= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782200855; 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=sg7KsGskAxUGYQuCz+J5GZpDMT7LUWwYGX21cOcPlLI=; b=eXOKulpm5Et6FULXK/AINhZU53IDclBnGzG+Ta1V0dXOPJD2N3nvEobXtrXoSdu82++rhi7s5U9BHTuq8ZAkrcw1IHpasBrat0Odb3xpdeODnvE5EXRmPSgQKUWe3vtZiVovVEjh/sQuOfTXh8XQ9dLo6idXKYgxxB1DrIUkMs4= 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 1782200855729391.33891726167656; Tue, 23 Jun 2026 00:47:35 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wbvqj-0000Yf-Ee; Tue, 23 Jun 2026 03:47:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wbvqh-0000LI-IO for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:47:11 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wbvqg-0008Kl-5B for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:47:11 -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-637-55tUt1aCN2GMaYh1uc94Qw-1; Tue, 23 Jun 2026 03:47:05 -0400 Received: from mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.111]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 6A9C019539A1; Tue, 23 Jun 2026 07:47:04 +0000 (UTC) Received: from localhost (unknown [10.44.22.10]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 61F521800591; Tue, 23 Jun 2026 07:47:02 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782200829; 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=sg7KsGskAxUGYQuCz+J5GZpDMT7LUWwYGX21cOcPlLI=; b=HDWRh3ZyS0mUHYDr3XPAaps1zKdhOunyG3319DS3BjPKA3tLrCIybt+7Y3z95nSEhIcvXE gkeykU8PFE4/Z/y2TO0azbvfx3gdbmTkjCy7J0WZg4CaRPRdeSm2DtqWrzTZZT8pFv/B7x MgwxzQWW+xBIz7bYV4480gEcIdPUbOI= X-MC-Unique: 55tUt1aCN2GMaYh1uc94Qw-1 X-Mimecast-MFC-AGG-ID: 55tUt1aCN2GMaYh1uc94Qw_1782200824 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Tue, 23 Jun 2026 11:44:42 +0400 Subject: [PATCH v4 27/34] 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: <20260623-b4-ui-v4-27-4656aec3398d@redhat.com> References: <20260623-b4-ui-v4-0-4656aec3398d@redhat.com> In-Reply-To: <20260623-b4-ui-v4-0-4656aec3398d@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=qAumGrHZBnM0t7kIhTqS+Wj/lvxsIp0KF4uHpXKaqGU=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqOjleE1akOnG1LEOW5qnMW3lg9IOQU4TjCMx5d Nmb4D7DzeqJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajo5XgAKCRDa6OEJdZac 5f41D/wKVgxWv+yVcVX3KPDCMpK9h17RPixADmUdsAaM7D02wrDSW5BnVbMoDbI5mej1MG3ALFs LqHYtasF4/i06i/ll8Cl3hNE6inRHZudsdn1uxwr2vP3SfJ/ehqDtTNaEQh60mcM1bdQTyBn2js ao+PHVw2Cy98WBZjUIx6KtNRQgNB7BgDmoXlFS8Am+69Oo9ufet9dV3XeMgSnsX73QbCLtzAh+e ZbxAPq6WIay71Z5UQ7k+yb7eZN0QCUxxHQFBMz3N2IsOSCPlsZAHYdqmJqHKmfEgbox5dcOBirj fvYZryGV1C2odBeA9Sk/VY6K5rKA0EHwOECPhyNK++Dsz7JkKPWefU7Dmzi+jhXEnNXMnSB0EH2 YiKDp9kzp1oiA2XeticTsljSqeJegLPxSiPwIXSJj0fye7vW/sK6Ld6QD/Hklp1bja0U1ZACHFz UXGytVmWBXiyHOsZ1O1U+34gnGTFUkxhgRa1fpWKkx1tQCquxmBKnNHoduUQI+O74HvFieFsXTO knOrci2efVEKkk/+IArQYi02vcRkoFZpvYtaseHEbHv/KOm6VWibJFK9rgGD0Llt//6Ga4bFy4x JjAJP40UMNtabhsFJQU2HhKiLj7O8Olp1TKxJkG5BEWRVGcixPIO5gwEb/mXSsd1BppzdZCMzVp UUotHo+Vqiv/GcQ== 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: 1782200857875158500 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 Reviewed-by: Akihiko Odaki --- ui/gtk.c | 46 +++++++++++++++++++++++----------------------- 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/ui/gtk.c b/ui/gtk.c index b4dcdcd9a44..929e4cf43f7 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 Thu Jun 25 05:53:06 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=1782200843; cv=none; d=zohomail.com; s=zohoarc; b=VJaoBKbJpoRW5xE5VW7mLnxi863iiUTeKFfXTTkdExJmaXecECpacROiHwjtX8o5od9g07U8zxXvidcBhNOERPBQyPjo8TTKj9MSbXYCnuCIlb1j6TImMvHS0SVa6wLeLYzN5dNK9qh6L5JdTIS73phx8BsRuKhau1ojF4qahWo= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782200843; 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=PXp6IDcQDWTnCpWDPYd10qxyz4SzrMGhedvswMrxwag=; b=PhBumK+IuqG+Uc//DvLsUP5AsDjmNSFtBo4WpWHbBo2FShD72uAAU5gKuGkfYqEtbGK2zed4ip+Quoks/t2GFniQakTjVST7YZiG253hf8iRBvQKgb0az+AmpCG22c1AP5jUrdRVJze+n3yaPvAwDiBu4KEONpCUwV/UEmvSxNw= 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 1782200843941692.1968425954585; Tue, 23 Jun 2026 00:47:23 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wbvqo-0001Bu-Vc; Tue, 23 Jun 2026 03:47:19 -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 1wbvqm-0000x5-Vx for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:47: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 1wbvql-0008L7-JR for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:47:16 -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-pE1Fu-kRPI-_tm42RFsQEQ-1; Tue, 23 Jun 2026 03:47:11 -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 1F18F1955F7E; Tue, 23 Jun 2026 07:47:10 +0000 (UTC) Received: from localhost (unknown [10.44.22.10]) by mx-prod-int-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id C5359195608E; Tue, 23 Jun 2026 07:47:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782200834; 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=PXp6IDcQDWTnCpWDPYd10qxyz4SzrMGhedvswMrxwag=; b=PKI5pYDHHQVThNhZQD+U7ulTRnAXvQkymQy8ycxd+f/TybrFjEG9GfyNfAGoAUnzIICDGo AjSKFj6680Dn4f8ZkL6nxOApsjo9dw6J4c0R+bH05pQ4hsZ4DA8B9dW7Et6ah8QoGsiLOA WlLXn1AwkrkQ7cbxxMerwuYt/UDY0Iw= X-MC-Unique: pE1Fu-kRPI-_tm42RFsQEQ-1 X-Mimecast-MFC-AGG-ID: pE1Fu-kRPI-_tm42RFsQEQ_1782200830 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Tue, 23 Jun 2026 11:44:43 +0400 Subject: [PATCH v4 28/34] 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: <20260623-b4-ui-v4-28-4656aec3398d@redhat.com> References: <20260623-b4-ui-v4-0-4656aec3398d@redhat.com> In-Reply-To: <20260623-b4-ui-v4-0-4656aec3398d@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=2010; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=xP4Iks1pyzqBMR8iuAQ0TMhb5HtWj5rEEvbuyLR4l2o=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqOjler0UI9aB2SiyVMZlNVek3Zorqsxipx8wPv 1GfyDrNCmiJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajo5XgAKCRDa6OEJdZac 5QZyD/wOF1wW9zI1pAl54jgG/FeaeuKp96xYcCcSmKEZL2G3sTkIc4hPAbmYv7HRqmHVzQNWiu/ s1W2bboFYWZDTwT5DUmrZ8hzN8pgGMY8LCMIcfFerrA0N6VF65XVY/vYqaQRtU2sW5cBQcHG+eq uSkJAseRYBFT7jBwRM3tC4O2lBCBidzqgkDARh0qaauEq3mxL2O4Rso0T8FsPJ03xbHVYRwx50J B+O4ILxoNidZgUv4pc4w6ZRvT1VCJ1npFARud9Yqu/u8FfBBqL5tKRuudIWFg5V3qEzOjjDALC0 FsG0gJKqCHO6J2RQBdNLNTXXCQCok/dOYjoEcDCGIXy62nZwlpdhl2Xm6KGBMZjYTJkgrZvw3hf RsekyaKkTeK+g7JS1EwY5lgxO963Z8RZQBoizj3DwLBrMTh8i58/ZvrPv7aendUTkRw5Wp1T1P6 aAoNzZVrOMQ80lte/dSyXsKfJJaRAB8erQjEEoOcAAjIziCUW1K7+eX136ZX63HQuuYl+qkNa4I NsQyVoyIQn5j8JgfFCdvNsANrT6ti+VJxdRnoaYYUQppIj7ylTNLfNmVorG6GCJ0idHzyhRRv4W dOSfy4l7UerqqDAGw2Mq8krECqDcqP6DKr8k6QkiVlB7LUJ6y3fW9JSMRqdpertZ86Ea2SsAdN+ cgldSLrxeb0mAVg== 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: 1782200845803158500 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. Reviewed-by: Daniel P. Berrang=C3=A9 Signed-off-by: Marc-Andr=C3=A9 Lureau Reviewed-by: Akihiko Odaki --- ui/gtk.c | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/ui/gtk.c b/ui/gtk.c index 929e4cf43f7..741f7bfe373 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 Thu Jun 25 05:53:06 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=1782200905; cv=none; d=zohomail.com; s=zohoarc; b=LccDVGTNUuJlTOhHkWG2EQg4S4Fqm6d111ttubhTOTnshP8s8sxxvuAPUlZjmVKuTDCkwYy3ZGVZ3de/onJkUe2wiGL7pCNw/fru7Vymd2alvajC/5Jmp/zkNnaTEiAyqil9ezhALoMpETSRD/sT7Hko/WWtE9qViLRPfyFeKYQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782200905; 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=+SnNvxCGbeXv5dknnCkzFKzyAsN7nrweo4XRyHTsaZI=; b=LaWXM3AwJNqltMAjCV7CzSC4kZI692I41ZjMHYpQ1UR5ObArULjPMgZbnaIsb997BYGYyh4ZD5oVpr+owE6+EEX9K/+4GZQlBRPvPaFMlGWTbr18FLlSXIIYLFNIpNa1uCoSsQPe03XZdCHx3CvBZPZ15Q/3Gg3iMaJ9iJ/f1cg= 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 1782200905969471.7176799169713; Tue, 23 Jun 2026 00:48:25 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wbvqw-0001ZU-EK; Tue, 23 Jun 2026 03:47:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wbvqu-0001Wh-CF for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:47:24 -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 1wbvqs-0008LR-BF for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:47:24 -0400 Received: from mx-prod-mc-08.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-657-3I-Ft_JQOYaD7aFsu-zg3Q-1; Tue, 23 Jun 2026 03:47:17 -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 96F921805A11; Tue, 23 Jun 2026 07:47:16 +0000 (UTC) Received: from localhost (unknown [10.44.22.10]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 167C61800347; Tue, 23 Jun 2026 07:47:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782200841; 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=+SnNvxCGbeXv5dknnCkzFKzyAsN7nrweo4XRyHTsaZI=; b=jMAMC3O1by015S1OPc+ESzVWhajNYwf/yZTAr4wiGo6fIa/MOXJjizyjrLCzy7uizY1Wv6 1IwL+hb6+SElkzpj16waQOgJncNXIAWnfErNEyqm+/7l0h+lsYjKFMx7/JSmBVFA8eRBsr 5x+0kbtEe2EgnrqkRp3hmdibjLwBAPs= X-MC-Unique: 3I-Ft_JQOYaD7aFsu-zg3Q-1 X-Mimecast-MFC-AGG-ID: 3I-Ft_JQOYaD7aFsu-zg3Q_1782200836 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Tue, 23 Jun 2026 11:44:44 +0400 Subject: [PATCH v4 29/34] 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: <20260623-b4-ui-v4-29-4656aec3398d@redhat.com> References: <20260623-b4-ui-v4-0-4656aec3398d@redhat.com> In-Reply-To: <20260623-b4-ui-v4-0-4656aec3398d@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=V/Cmo+6kZDY14zreByoLg+HhPs6wZHDZvYC2cJIvlG0=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqOjle86lCETlRrL7o6mce6jSbuOQuK75REeqVa Fg2/gG+61uJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajo5XgAKCRDa6OEJdZac 5QwlD/9LMygS/gDCNpLwX83i842tM63XRdnG99Q1W5r2CUpRI65QT+gdHy5I/Bh2sbbd5l8sGrl 4mFqb1dRqmnkce00oetPfPUViWvVf/9hALyIWQfr+8ugcP/aZspvPeIVPzgZ5Bqn9KAKj5E/Hon 4tItouuCnDJbptgyDAwzQjX/k+rN3JO/UhWxFGCFzFfgZG6mKKHDIOYOyc89GZ9DRQ2HCOBYP8Q Qy2mZng9cu3kCPuPm3f5zmW2T++Q4dABIrT+8sR+CJWGVYmS8hlkVMjj/88ubOBU12mNe7rMNxR NU5XavXIfggwOkXkuF6F3Bq+a+ceSwGduINNFxP8dqzqSOR1DshakYYS8SFMMFy9bXojscZN2kH jpzFcROu4BRf1jXbipkXcLqzD0J7+Ndi6gF5YutjxyHdA3yl65iZFqiDRtplLQltGV+FCY7gSRm VxcLfMH+SsCNhZuAUgJ7ihugm5D3yApYC4nCzuYccdEqH3iOm/bUWyqxioFXil/XbcEuhykTCx/ Kf+749mEmIb0XWYvD2Ch1XshWedaU183LvcQRfoG1ngGbGLGS5qNBPAzI0dEQN883G8lCLl34pH ehWXxpJM3t5NpFCRP/EE3VlTTCUuabYAkfzI07PiVkWJ5ARRXsvwQ94cyvXZXs5Oj2tHNdxbBt3 eKkL8v3xyjlUY1Q== 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: 1782200908330158500 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 Reviewed-by: Akihiko Odaki --- 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 fb60cbfda5d..53d0e447a23 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 741f7bfe373..e7a9156f206 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 Thu Jun 25 05:53:06 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=1782200984; cv=none; d=zohomail.com; s=zohoarc; b=Kcn4QMOnWm9qTRUZ1lSnX/wPkt/nAC5s43nZhyv+tSH1zsW/9Kj/7ZWN8stPXzpwc5jRRaluX1KEbaqs+qHtQTVFsTpDlG/CuwuutQjW+8DiyffyUOqQwslgFPV8HjRH9sSCXlL7cufNAMbP2ys+ZwFV5AW/f4h9lR+mgXnIf0w= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782200984; 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=J2hVP0nr0sq/C2NkLYrXw5Jgv60Hz1Ty7BafXMzfQbE=; b=WQYahyFCi7PFPZUgMPKdIMapEVFNpgPvoYw8SpivVZ+tHdgn3Cfy4Aehc7btoH8r3uvoP58uf52cDjiL2FyaaS4IGMCq2qc/9xkWxeaderSs1U9ZjHkMuyNaapl55OibJ9knyzqMbZdQbOW2BoTaHfxkIzVwpNJxG1HRAP/xeB8= 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 1782200984143491.74490831556136; Tue, 23 Jun 2026 00:49:44 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wbvr0-0001jE-1s; Tue, 23 Jun 2026 03:47:30 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wbvqx-0001dD-Vi for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:47: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 1wbvqw-0008Lj-8s for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:47:27 -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-511-XNWNdAdTMLKuNFxo1f8OWg-1; Tue, 23 Jun 2026 03:47:23 -0400 Received: from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 44DFA180065C; Tue, 23 Jun 2026 07:47:22 +0000 (UTC) Received: from localhost (unknown [10.44.22.10]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id A77E5195608C; Tue, 23 Jun 2026 07:47:20 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782200845; 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=J2hVP0nr0sq/C2NkLYrXw5Jgv60Hz1Ty7BafXMzfQbE=; b=Z1wSkFGmj0H6C5eGsThAgWxu3qw7L9fydi4eDMOI/jqQfoRK1ER3sr0UisInhZeHpougmF cOgvPbS/viYzvAQrVnO7LD9fiHxC7LjaKmTJ4J5+UP/fQNEFOuKU/TWse8LT5YboZ2F0bB V8ewIYXpzor0l7i+X4no9nd+W7Zh9b8= X-MC-Unique: XNWNdAdTMLKuNFxo1f8OWg-1 X-Mimecast-MFC-AGG-ID: XNWNdAdTMLKuNFxo1f8OWg_1782200842 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Tue, 23 Jun 2026 11:44:45 +0400 Subject: [PATCH v4 30/34] 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: <20260623-b4-ui-v4-30-4656aec3398d@redhat.com> References: <20260623-b4-ui-v4-0-4656aec3398d@redhat.com> In-Reply-To: <20260623-b4-ui-v4-0-4656aec3398d@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=4058; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=DEvqGsGEWMW9RpYRMNCT4E2Ku7Pud+lgNF7rPteiP5s=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqOjleg2mdQ/lcmfej2xo13b72VAPxR76hf+IEx DcEjBrdAwOJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajo5XgAKCRDa6OEJdZac 5TQHD/40yElDNU4k1VOTePOSpb+WEOqL/Gf2wvFjKNhOKa9WmYjZlwLk46zs+zH5sVSEn19E1dx MP6pZG9jq2Dm9G1Id8OLWvVaGmz7GqVgH5e/Iiq29BdFhp6bcDPXH2O0f0zizf2bmx/RvtXemmz IpDkGfQ0H9fe5DvRRaTk8fKhM66ejgSbzjvHPLa07GQU+9BjRbGztiNDCnTtwundcbEdYYF3KgF IkQoWQGCfFjpTpCjmmyvOHIsARCvfSwDt9NIY4SBn5XW5OCAob4nCvHRfVMcWES+9b1m+KRyJtW tbc645YdfNztUbv/vAebWERp7uvpRpMBzF6n9+2edhcdI4sSTopkK+tIhpTg155HNcYi5A6kaJp yxpgsp1lot30kLYFmlGnrOz1+jkAAxHC8wFIDTSwUsDsC2dSNL3pZVO4J1QNzcTxAdwMOUH6a77 Bt2AF1ur9SNa1kXThtNKQYw6UbfQA0rR23BvWTzVjWeVg8Bryh0DQWBmdoEjeCzZZMbFE+zDu9B +pttDBjgxGw8Ba+ZEah+/uLqT2dVCZKvaBO9sMZhLxjwUmf/DiFq8cPxMMpVqIPT0pFRnDO4+X4 U+2WSsu2vBbuLc35JGaSzf01G+Ccr5fpRutcNykbIpkWj53eWGXec/Ab8dUicDvZVmSyvMJYEav vOUqlaQT9KqTQeg== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.12 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -24 X-Spam_score: -2.5 X-Spam_bar: -- X-Spam_report: (-2.5 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.445, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H3=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_PASS=-0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: qemu development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1782200984692158500 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 Reviewed-by: Akihiko Odaki --- include/ui/gtk.h | 1 + ui/gtk.c | 75 ++++++++++++++++++++++++++++++++++++++++++++++++++++= +++- 2 files changed, 75 insertions(+), 1 deletion(-) diff --git a/include/ui/gtk.h b/include/ui/gtk.h index 53d0e447a23..5c9c34a069e 100644 --- a/include/ui/gtk.h +++ b/include/ui/gtk.h @@ -141,6 +141,7 @@ struct GtkDisplayState { GdkCursor *null_cursor; Notifier mouse_mode_notifier; VMChangeStateEntry *vmse; + Notifier console_notifier; gboolean free_scale; gboolean keep_aspect_ratio; =20 diff --git a/ui/gtk.c b/ui/gtk.c index e7a9156f206..7078d89d679 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,74 @@ 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); +} + +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) @@ -2694,6 +2763,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); @@ -2814,6 +2886,7 @@ static void gtk_display_cleanup(void) return; } qemu_del_vm_change_state_handler(s->vmse); + 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 Thu Jun 25 05:53:06 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=1782200902; cv=none; d=zohomail.com; s=zohoarc; b=e+IzrXdNYOwcs2JN9SQ72neWKRJtuBZNYSfjPk3eHYVhvsONuaKIIVHhpRHQjcdESJ7ymVN1a+o6MYXA7DBcZi32f6gOjlTDpBzCvOay3mszS1obVo6f/j+KDPEERazPPMdSxRBAcsR8T8czfE1d5I90Hh6lgTgCABVFEkm5fSs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782200902; 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=/NBCtQ/LDlj7bqt4GsZQ8DDG3CW8/CbEEUHOSI/t16A=; b=Bd8cLq/nu3Q9StzhYDb0OfHMS2yrFdve9mJhlbN0XZ8CpHYMOJfrhnTt6dA0BD2cSw7S8KUWER9FE0LbpCf5WrZ0a80pLYDWrZiw9RgSYO7LIEzsndIeYYK80ISj5EfP2Fy8RJKlL99wLx5PzoOH99yP48Yct2Oeug9hUkMvypU= 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 178220090268464.92349916349019; Tue, 23 Jun 2026 00:48:22 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wbvr5-000257-FK; Tue, 23 Jun 2026 03:47: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 1wbvr4-00023L-C1 for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:47:34 -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 1wbvr2-0008NV-UD for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:47:34 -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-320-WF1hMYAdNLupsYvBDe0tlA-1; Tue, 23 Jun 2026 03:47:29 -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-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id AC21B180025C; Tue, 23 Jun 2026 07:47:27 +0000 (UTC) Received: from localhost (unknown [10.44.22.10]) by mx-prod-int-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 5571D180057F; Tue, 23 Jun 2026 07:47:25 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782200852; 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=/NBCtQ/LDlj7bqt4GsZQ8DDG3CW8/CbEEUHOSI/t16A=; b=ElB2lZ0V4MHDPkxxnq+Bhu41RCvej5RWCvs0x2VkbdefQXZRLQLeG2HnxaG0S/vmYOq2gy 0gyoPpYpBq0F0UfcOUGncqHG4VTmX26/ceFLPH9gH3Bu6q1b2HSsINn3qCh73pb3YUXyuw SK5pnS+lYAhjBqfBO/T/iZjabEwIZXk= X-MC-Unique: WF1hMYAdNLupsYvBDe0tlA-1 X-Mimecast-MFC-AGG-ID: WF1hMYAdNLupsYvBDe0tlA_1782200847 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Tue, 23 Jun 2026 11:44:46 +0400 Subject: [PATCH v4 31/34] 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: <20260623-b4-ui-v4-31-4656aec3398d@redhat.com> References: <20260623-b4-ui-v4-0-4656aec3398d@redhat.com> In-Reply-To: <20260623-b4-ui-v4-0-4656aec3398d@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=2283; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=+6tAA5uwDh2I1DKjrGBRjiPVFRwcgi1oOVH5ZTlowwM=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqOjleF9urb3gnJSPR4XvFrpnHHW5+r477W4ehq zTngZ2g0XyJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajo5XgAKCRDa6OEJdZac 5f8RD/0Y0R675/WtZK1mHt9KtTOpBeDoiOcWpDL3yv9ACKjM+dKn2jHj2bi5UQhrlOwsTR8+WSR 3xNMeNXR8bt8xODZELh9/zxcOyLhhz1cyV63jh4HT/HgbQSP++iQmfxIiJjAryvfardVKaVt6RV 2yjtw8uv7+c0D5o24oG2d9VVU54kDtHe/votJ7FH4FJvageUGLSS/gKJ88lSNN2+o1dDZ2yPV+k AV/sizHlg6OLBg3aglif1FBJLTBTpL0phopZra95qCrFQxYm6oVMr/sU4/VfGgI8g0PqO+0SQ7p jvBlp2HScxfpO3QOyER+HnOKQEHSWCJxLqKBohthlRniBsNGnaZK7DT9xJzmf4mLkcKeylo/xDm 2pqxszjyy8foXZAZd1HnAkLFPO4MQKFyi5MTsyX5mge57xZRftnHhBubgtkZ0cfSzX1wp3XvmSF fFeKNnE9y5wPRRVLVqBfDtFQtW5IormDUy2lLxI6UpF2W2sno5AJqPjxhB29rc6tHXZlA/Ofb2C nmJLk2OHDVq3L1nV91r6KnCFG3neSg6d1uh0/or5Kb5UEC7EipyRHjwLNXs3wi0fsEPWihc3puy 0oLDFGNPulzYYYJ0cvrEp5inV1+cyPOhXC0eOjATrtjwbDTqNaesWyUjBXAEE99OukWGnwxBQaz OA8PxLCQKI8F3QA== X-Developer-Key: i=marcandre.lureau@redhat.com; a=openpgp; fpr=87A9BD933F87C606D276F62DDAE8E10975969CE5 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.93 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists1p.gnu.org; Received-SPF: pass client-ip=170.10.133.124; envelope-from=marcandre.lureau@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -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: 1782200904161158500 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 Reviewed-by: Akihiko Odaki --- ui/console.c | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/ui/console.c b/ui/console.c index 975eaf15706..db9aaf85f59 100644 --- a/ui/console.c +++ b/ui/console.c @@ -68,6 +68,7 @@ struct DisplayState { uint64_t last_update; uint64_t update_interval; bool refreshing; + bool initialized; =20 QLIST_HEAD(, DisplayChangeListener) listeners; NotifierList console_notifiers; @@ -376,6 +377,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 +421,10 @@ qemu_console_register(QemuConsole *c) } } } + + if (c->ds->initialized) { + qemu_console_add_to_qom(c); + } } =20 static void @@ -1089,20 +1101,19 @@ void qemu_console_remove_notifier(Notifier *notifie= r) */ DisplayState *init_displaystate(void) { - gchar *name; + DisplayState *ds =3D get_alloc_displaystate(); 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; + ds->initialized =3D true; + + return ds; } =20 void qemu_graphic_console_set_hwops(QemuConsole *con, --=20 2.54.0 From nobody Thu Jun 25 05:53:06 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=1782200868; cv=none; d=zohomail.com; s=zohoarc; b=NE/UgC2v8Qf7Kz22j9bSc8fiDA3a/5fudTXg+/KrXRJZGbK9UVbUNgS6h4k1J9yrHOWtAwd/LdaqO5O5xd/dKon18FGloQ2iNl/q50SfGkRZxUtcH6urT7yngOVHnUZ2NfzxIRHficr6mCwGlg7HmKJAF5gPbYOKgyPOB64C+hE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782200868; 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=OxlChsVADaARWyTRMZ3NG8G9plRASvkV/Hq7x8L/VPE=; b=UD1TiJt1yqVwE/+tj3JmUTRhijq+FlDojJkCUsLolyLXfWUqr4o40rvZBp2QDIPnPnry8FlhKDHXTN76Qv50QfTjutsdEkT1zUzO/dycYn7HpLdKXOYw0rK3/W+Eh/OsfJfmpo1w6kDwoPrL9udCvV+9w+beZqC0S3iY88rcrhk= 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 1782200868229774.2528013422974; Tue, 23 Jun 2026 00:47:48 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wbvrC-00028g-U6; Tue, 23 Jun 2026 03:47:42 -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 1wbvrA-00027c-Lb for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:47:40 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wbvr9-0008OB-BD for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:47:40 -0400 Received: from mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-139-gf2CBCdCOfmRVBymtmPo7Q-1; Tue, 23 Jun 2026 03:47:34 -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 4EA33180059B; Tue, 23 Jun 2026 07:47:33 +0000 (UTC) Received: from localhost (unknown [10.44.22.10]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id E3EC318005B3; Tue, 23 Jun 2026 07:47:31 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782200858; 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=OxlChsVADaARWyTRMZ3NG8G9plRASvkV/Hq7x8L/VPE=; b=Vp6Y54/4LIJH600LtlWqL4XJSYodGU1MCuQVdIPHO9Z144cOuTKjDMSfn01WF94fwL/jtp kXvkGuqIq85Yl4A4hUpeRJORx4bufiqesjkZlF1AB+eELxQbn9b2/Hs9VdgzyR/DYFxmcZ QNEr05+5K1rk1BvcuMx/jg9Rk+kpJW4= X-MC-Unique: gf2CBCdCOfmRVBymtmPo7Q-1 X-Mimecast-MFC-AGG-ID: gf2CBCdCOfmRVBymtmPo7Q_1782200853 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Tue, 23 Jun 2026 11:44:47 +0400 Subject: [PATCH v4 32/34] 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: <20260623-b4-ui-v4-32-4656aec3398d@redhat.com> References: <20260623-b4-ui-v4-0-4656aec3398d@redhat.com> In-Reply-To: <20260623-b4-ui-v4-0-4656aec3398d@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=1322; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=mvCtk0KdkrQ8473OU30MMLcq6u1bq2unAsGOAvd3VMw=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqOjlemJlIU3G7YNH3ZnWvAwbRQH98F+y6ZiQuW Kwz0+u6mD6JAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajo5XgAKCRDa6OEJdZac 5YjeD/9tO5hE4hgs+4eElMNgmttS6GFEWfP4uZ2rlM+vcc/mV2Phxz8jlxX7CAI4h+9wE8N8XgX M5VmKi6mQFhJhzdtgPemu2LmeSVCL4xlFKInPT79Oc90fqUUQQ8va7PKNnNuMKOK9M3O2hxvyPn ooquUVqaDUBPuGgi5TGavP2FasJDVCN03Zk1OcmY3oO+xdLZJSIyu54nC3XmU4a70r+hwaGw1eM mybmnhRTrqUU+vIMxxCAuPMQNiYF7eoacf72G0pNIQMfSch+GkeGJKNEsyXFyw9PtZPhMW8sILF Zno5qrlkzC2qAiuC4aXF95wITF5NwpKUhznhtuP5asGI412fBKJFLzDREke+69Gwk+/wNW4cVF7 Z//7aGm+7CSPuxr5OAA04qgoenZSat1ayhl4fGFNhY9ZTjkTfzJXNO7hGQoyHBw7IiicKIR4iT4 77KD/ssC7mkD10t5KhhPrFGsWLqO8D1ExbX81Ys1442yTmzbv0OVd3qpMDQajTaxz6+0wXRAvbp PZmbBlqDBz9baQOCHDszzrmysgVidcGSHQ9iD8xzohr3EcPGtuRyvs5h410RJnH52XfP5RAzj6u 74b9es+kPQnp0ZSCVg/vYVexZNsSrWUT5c37/RejOJWzS/1goYTxPi9yn1xg07+NoE5zVTs1vyI kaFpJMolKGD/pfg== 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: 1782200869983158500 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 Reviewed-by: Akihiko Odaki --- ui/console.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/ui/console.c b/ui/console.c index db9aaf85f59..a8a2a247d8f 100644 --- a/ui/console.c +++ b/ui/console.c @@ -1140,6 +1140,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 (s->ds->initialized) { + qemu_console_add_to_qom(s); + } } else { trace_console_gfx_new(); s =3D (QemuConsole *)object_new(TYPE_QEMU_GRAPHIC_CONSOLE); @@ -1180,6 +1183,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 Thu Jun 25 05:53:06 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=1782200973; cv=none; d=zohomail.com; s=zohoarc; b=gsDsWj8fqq5ekoQlO7ZzK6ghv5a2+Zn1UXtQ9+rJFpxveaj7R0+LylvziYaXOj8DDTP7fzNA0SXu2qDSkf5ZLnhnmS4w+ek4szv7RKQb8pl78lHJIYH8SYB+9sDniCMOBR3ZuOkBC+BxH1SnJgFuxMkSgdTkRwvtPzhnAC2vwsQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782200973; 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=W/5tqHF/rNOlj0lYnt1oLuikPYo9XBBkLyZ8jArpNOc=; b=B/w0UHN4g2suZ2la9sxxKonojw9EJYkxTKamwOSPX9tSP2pFADgdIMr9Tn7U5syj2eb8g4np9DXUGXRuCYrV3mmip+lIZNjfOKC3oivhGvuQ92N+QUH5/sWIQ0fQRiDI1cYJA8WnezMZrykhigEJNM3PbAs8BuGjjlO8N+7LVMA= 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 1782200973466583.1158305438832; Tue, 23 Jun 2026 00:49:33 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wbvrG-0002BM-8D; Tue, 23 Jun 2026 03:47: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 1wbvrE-00028o-Da for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:47:44 -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 1wbvrC-0008Oe-NS for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:47:44 -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-664-9JU_YSieM6qTESyNdz2g6w-1; Tue, 23 Jun 2026 03:47:40 -0400 Received: from mx-prod-int-10.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-10.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.95]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id C6FC51955F2F; Tue, 23 Jun 2026 07:47:38 +0000 (UTC) Received: from localhost (unknown [10.44.22.10]) by mx-prod-int-10.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 74681765; Tue, 23 Jun 2026 07:47:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782200862; 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=W/5tqHF/rNOlj0lYnt1oLuikPYo9XBBkLyZ8jArpNOc=; b=UjYBPNgRQ8ynkhGp2K/QmY3KFB8dAtQXsQzh84EIhTwjGhQDW/AsZ+Gvs8zQQnYfE8TLXU iyBPUZxXe39sJhIT5ozuznuFQDjNVZE9W4W6Y1oE0bECwqqS4CUBONEX0fuzQUie43e90E HgAUM7VbNlstXywh1dS5G0lSySD1kKs= X-MC-Unique: 9JU_YSieM6qTESyNdz2g6w-1 X-Mimecast-MFC-AGG-ID: 9JU_YSieM6qTESyNdz2g6w_1782200858 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Tue, 23 Jun 2026 11:44:48 +0400 Subject: [PATCH v4 33/34] 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: <20260623-b4-ui-v4-33-4656aec3398d@redhat.com> References: <20260623-b4-ui-v4-0-4656aec3398d@redhat.com> In-Reply-To: <20260623-b4-ui-v4-0-4656aec3398d@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=zMXJaBNZ3TrVtCbIgTClYq7YwpZ2EDqqNpV8V/FtgHA=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqOjle2O6llvg9mQljRzHuddlmkKWyV0B5MErzj LORPe4u5GmJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajo5XgAKCRDa6OEJdZac 5ajgD/4qY3oQstsRVBIs5Jx24gK0JnHfz3CpVUz5RDGCvOmu27eqM8kreFq0KYGSik1HkdudX0P CAVF3sriKMer31oBSEMHC4hwG7i3v3fXGpft5CXHxqOLTshYW3970Cmazc2WlnyKF5IEh9MN7qU iOl9HBy4cxiEfIvsPGTe09LyfCBiGnUuWUg3ukRWdJVxf1HFoedsMKjsnsH+y3srCMYJMPZtr0o dm8NXPSFWjmuggN3qVotik/JH6CpB1fODYQpMPXC7HIBb5+vPHaNCrzp+IwgsPxN68WktNJTNpj 74CFeAk2k7TlHCfogXm5+clBZqaNA5VAa1pW7zz8iRox8OnpaFL33nPlyHrq4KQeCFw0QQiYK7A GvrvcJ39+vf23QRQro8KhSXnTGN9cXAmk2DTsf5s3mAG5RPXfzpQqENDA0ASwpwKK4+13nisR2G msJUK1nBXGrzAMjSGGWcpmmFggQJxGirIi/2DMwCf1gOJHHykioc12Z1jLNxqmfmow7fF+LgKen 3WNaDKKxLJhkIgCr8+UwOVMrmaNgxe49IDtvArUiIAxRLaBIMl5M0tODqWuRAMIrL9PKS5rbSht Jpvam+bY9T92cAdoV3MGXaKk+nTRfpMYW3jR+gWmXyJ4ADocJsEhafPNVbugYhLgxurWf9Ec2O9 3ffSFhxR7PMr1SA== 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: 1782200974565158500 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 Reviewed-by: Akihiko Odaki --- 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 bdbc208cf01..e1ac06814ba 100644 --- a/ui/dbus-console.c +++ b/ui/dbus-console.c @@ -533,6 +533,11 @@ int dbus_display_console_get_index(DBusDisplayConsole = *ddc) return qemu_console_get_index(ddc->dcl.con); } =20 +QemuConsole *dbus_display_console_get_qemu_console(DBusDisplayConsole *ddc) +{ + return ddc->dcl.con; +} + DBusDisplayConsole * dbus_display_console_new(DBusDisplay *display, QemuConsole *con) { diff --git a/ui/dbus.c b/ui/dbus.c index b23cb44c535..7be0f8e2611 100644 --- a/ui/dbus.c +++ b/ui/dbus.c @@ -142,6 +142,9 @@ dbus_display_finalize(Object *o) { DBusDisplay *dd =3D DBUS_DISPLAY(o); =20 + if (dd->console_notifier.notify) { + qemu_console_remove_notifier(&dd->console_notifier); + } if (dd->notifier.notify) { dbus_display_notifier_remove(&dd->notifier); } @@ -164,14 +167,35 @@ dbus_display_finalize(Object *o) dbus_display =3D NULL; } =20 +static void +dbus_update_console_ids(DBusDisplay *dd) +{ + g_autoptr(GArray) arr =3D g_array_new(FALSE, FALSE, sizeof(guint32)); + + for (guint i =3D 0; i < dd->consoles->len; i++) { + DBusDisplayConsole *ddc =3D g_ptr_array_index(dd->consoles, i); + guint32 idx =3D dbus_display_console_get_index(ddc); + g_array_append_val(arr, idx); + } + + g_object_set(dd->iface, "console-ids", + g_variant_new_fixed_array(G_VARIANT_TYPE("u"), + arr->data, arr->len, + sizeof(guint32)), + NULL); +} + static bool -dbus_display_add_console(DBusDisplay *dd, int idx, Error **errp) +dbus_display_add_console(DBusDisplay *dd, QemuConsole *con, Error **errp) { - QemuConsole *con; DBusDisplayConsole *dbus_console; =20 - con =3D qemu_console_lookup_by_index(idx); - assert(con); + for (guint i =3D 0; i < dd->consoles->len; i++) { + DBusDisplayConsole *ddc =3D g_ptr_array_index(dd->consoles, i); + if (dbus_display_console_get_qemu_console(ddc) =3D=3D con) { + return true; + } + } =20 if (qemu_console_is_graphic(con) && dd->gl_mode !=3D DISPLAY_GL_MODE_OFF) { @@ -179,20 +203,58 @@ dbus_display_add_console(DBusDisplay *dd, int idx, Er= ror **errp) } =20 dbus_console =3D dbus_display_console_new(dd, con); - g_ptr_array_insert(dd->consoles, idx, dbus_console); + g_ptr_array_add(dd->consoles, dbus_console); g_dbus_object_manager_server_export(dd->server, G_DBUS_OBJECT_SKELETON(dbus_consol= e)); + dbus_update_console_ids(dd); return true; } =20 +static void +dbus_display_remove_console(DBusDisplay *dd, QemuConsole *con) +{ + for (guint i =3D 0; i < dd->consoles->len; i++) { + DBusDisplayConsole *ddc =3D g_ptr_array_index(dd->consoles, i); + if (dbus_display_console_get_qemu_console(ddc) =3D=3D con) { + if (display_opengl) { + qemu_console_set_display_gl_ctx(con, NULL); + } + g_dbus_object_manager_server_unexport( + dd->server, + g_dbus_object_get_object_path(G_DBUS_OBJECT(ddc))); + g_ptr_array_remove_index(dd->consoles, i); + dbus_update_console_ids(dd); + break; + } + } +} + +static void +dbus_console_notify(Notifier *n, void *data) +{ + DBusDisplay *dd =3D container_of(n, DBusDisplay, console_notifier); + QemuConsoleEvent *event =3D data; + + switch (event->type) { + case QEMU_CONSOLE_ADDED: { + Error *err =3D NULL; + if (!dbus_display_add_console(dd, event->con, &err)) { + error_report_err(err); + } + break; + } + case QEMU_CONSOLE_REMOVED: + dbus_display_remove_console(dd, event->con); + break; + } +} + static void dbus_display_complete(UserCreatable *uc, Error **errp) { DBusDisplay *dd =3D DBUS_DISPLAY(uc); g_autoptr(GError) err =3D NULL; g_autofree char *uuid =3D qemu_uuid_unparse_strdup(&qemu_uuid); - g_autoptr(GArray) consoles =3D NULL; - GVariant *console_ids; int idx; =20 if (!object_resolve_path_type("", TYPE_DBUS_DISPLAY, NULL)) { @@ -233,27 +295,24 @@ dbus_display_complete(UserCreatable *uc, Error **errp) } } =20 - consoles =3D g_array_new(FALSE, FALSE, sizeof(guint32)); for (idx =3D 0;; idx++) { - if (!qemu_console_lookup_by_index(idx)) { + QemuConsole *con =3D qemu_console_lookup_by_index(idx); + if (!con) { break; } - if (!dbus_display_add_console(dd, idx, errp)) { + if (!dbus_display_add_console(dd, con, errp)) { return; } - g_array_append_val(consoles, idx); } =20 - console_ids =3D g_variant_new_from_data( - G_VARIANT_TYPE("au"), - consoles->data, consoles->len * sizeof(guint32), TRUE, - (GDestroyNotify)g_array_unref, consoles); - g_steal_pointer(&consoles); g_object_set(dd->iface, "name", qemu_name ?: "QEMU " QEMU_VERSION, "uuid", uuid, - "console-ids", console_ids, NULL); + dbus_update_console_ids(dd); + + dd->console_notifier.notify =3D dbus_console_notify; + qemu_console_add_notifier(&dd->console_notifier); =20 if (dd->bus) { g_dbus_object_manager_server_set_connection(dd->server, dd->bus); --=20 2.54.0 From nobody Thu Jun 25 05:53:06 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=1782200976; cv=none; d=zohomail.com; s=zohoarc; b=Ev4FYAfY+Fn/4GyKurLicG/8ClaF1rcEXamXOshEZMcYghKMjOOS/+ZgqlconckjwY2zmWH97MRnrfA+Al0FxdK5fefXPTpu249kuz5V7DmjfdkDwUvTfuoTRjRy1J6DYKSt80Pa+mtHwHIkz6pM2BfYPUWTB+n5HCyXUUirph8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1782200976; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=xbxN/mAMtJtduNKSGnc8CLMOmhvQhZe+7JMf8JBpoeE=; b=RNFYuoJKWMs9sf/8Rhvcyiie54dR9UEADPjZBZfyIvavbwFbxs4KQMMmgtTib1//UvRA+811yhqyhyTy4o91AZRYNmkeHx6E7oyBJPIaUZYaKRfeDDW9X2JLDJ7iyywfZx5oAisRpFMf43CRH2vuRSlkdfOXhq6xPR4mZpvhN50= 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 1782200976284628.238322957686; Tue, 23 Jun 2026 00:49:36 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists1p.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1wbvrN-0002XO-UT; Tue, 23 Jun 2026 03:47:53 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists1p.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1wbvrM-0002Q1-HV for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:47:52 -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 1wbvrK-0008TZ-U2 for qemu-devel@nongnu.org; Tue, 23 Jun 2026 03:47:52 -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-125-_rvteuDuPDKgEUFpqHYMMw-1; Tue, 23 Jun 2026 03:47:45 -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 7351C1956042; Tue, 23 Jun 2026 07:47:44 +0000 (UTC) Received: from localhost (unknown [10.44.22.10]) by mx-prod-int-08.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 7BABA18005B3; Tue, 23 Jun 2026 07:47:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1782200870; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=xbxN/mAMtJtduNKSGnc8CLMOmhvQhZe+7JMf8JBpoeE=; b=LMPeu34yc0+D4/Oh9xeSJzKcV8N8p/FikrYMs+p9ExE0VczFby2BPFpcZ2I/F8G5MPrxPV 7VIN5UiZl/oPi9AT64XnazngINe8ufoDgIrw9fwaO0HrbnFmjBJKoQJ96xxZe96LyQCssM dS3WaSd1jGsWqSbEgFF8MgOXGWJChMM= X-MC-Unique: _rvteuDuPDKgEUFpqHYMMw-1 X-Mimecast-MFC-AGG-ID: _rvteuDuPDKgEUFpqHYMMw_1782200864 From: =?utf-8?q?Marc-Andr=C3=A9_Lureau?= Date: Tue, 23 Jun 2026 11:44:49 +0400 Subject: [PATCH v4 34/34] 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: <20260623-b4-ui-v4-34-4656aec3398d@redhat.com> References: <20260623-b4-ui-v4-0-4656aec3398d@redhat.com> In-Reply-To: <20260623-b4-ui-v4-0-4656aec3398d@redhat.com> To: qemu-devel@nongnu.org Cc: Paolo Bonzini , =?utf-8?q?Daniel_P=2E_Berrang=C3=A9?= , =?utf-8?q?Philippe_Mathieu-Daud=C3=A9?= , Pierrick Bouvier , Fabiano Rosas , Laurent Vivier , Alex Williamson , =?utf-8?q?C=C3=A9dric_Le_Goater?= , Peter Maydell , Akihiko Odaki , =?utf-8?q?Marc-Andr=C3=A9_Lureau?= X-Developer-Signature: v=1; a=openpgp-sha256; l=4986; i=marcandre.lureau@redhat.com; h=from:subject:message-id; bh=Qj9RcQ/RNJdYxcuio5b6l1xNzAqRshVBUlgn/gQCRCY=; b=owEBbQKS/ZANAwAKAdro4Ql1lpzlAcsmYgBqOjleHugtq1awczxwrPe631sJZ/XWuYpHSNUtp mr1kRaVgzmJAjMEAAEKAB0WIQSHqb2TP4fGBtJ29i3a6OEJdZac5QUCajo5XgAKCRDa6OEJdZac 5Rg5D/9pVvh+qjImMJXiXTX/sANWRQOf0/XqQow8vjvx4gPfc7bh4zQ+VbS3lVt3d9dQwOuOUZH EuNvJi0hqIyN89SM4sa09u6ULO1OsOuWPz4VC7YLfp9uHT4s+wTnuXKWIOJpsoC/+pTZtDcOWy2 ijcSKgD+Bo1n+Dsq/1mNfZ4ct6ASp2oHrIWqrqbtbwUhqZFvwAwzVELL6tFCDbeSOYcjnJzYcrN wnBshLM39ksLEsxQqvsLnApRE26rWNna/75sG65ErzX1L6B9EBIvXFCeyHdZ+3L4YIUJdMltZZj LsiWh7CmrQEMAHMokzQBipE9N9nDziEYHuHRwmMg1vSvmKQMC3Q3LnduN2DDeiSMw6Olpl5vgOy pHgw2y2EjyGj1y+BDbGlLlB4vBjtJMtHl/1byM+x1D8p2ONd7S34w2qBOWh2Bq/4a65s+XnErk/ OppWbx0jumkuporPkfq+MHCfBeFUNhokvdiT+HMJenmBllP89smoWGTiiMWxdN50sOLDYZk1kEq b+ahGkkzqlWOkaJh72v1Dr2f//2OB1XLxu7UGIQ6Qe2tsRHdQkMYBQP330EKaOrdwfFMpLXYVaI NYbRjxtBDxVK9+oGWqHCYzM/8EQUrchn514RdVxx60alX3fDNmLhlSPl8wwTMcCqMi21iDPGHA4 pUPs9vhaONHoU2g== 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: 1782200976578158500 Add a qtest that verifies display consoles are dynamically added and removed over D-Bus when a bochs-display device is hotplugged and unplugged on a q35 machine. The test plugs device_add a bochs-display, waits for the DEVICE_ADDED QMP event, and checks that the D-Bus VM interface reports a second console. It then device_del it, forces a system reset (q35 removal is ACPI-based and needs guest cooperation qtest cannot provide), waits for DEVICE_DELETED, and checks the console count again. Reviewed-by: Fabiano Rosas Signed-off-by: Marc-Andr=C3=A9 Lureau Reviewed-by: Akihiko Odaki --- 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