From nobody Wed Dec 4 09:08:00 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=fail(p=none dis=none) header.from=redhat.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1715954339091786.9855919130697; Fri, 17 May 2024 06:58:59 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id DC6DF19A7; Fri, 17 May 2024 09:58:56 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id AE36C1995; Fri, 17 May 2024 09:58:22 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id E206F198F; Fri, 17 May 2024 09:58:20 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 7A39E1990 for ; Fri, 17 May 2024 09:58:20 -0400 (EDT) Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-593--purKCzAMwSgqxggoMV_-w-1; Fri, 17 May 2024 09:58:17 -0400 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) (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 mimecast-mx02.redhat.com (Postfix) with ESMTPS id 55F1D8030A5 for ; Fri, 17 May 2024 13:58:17 +0000 (UTC) Received: from toolbox.default.com (unknown [10.42.28.65]) by smtp.corp.redhat.com (Postfix) with ESMTP id E6418C15BB9; Fri, 17 May 2024 13:58:16 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.5 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1715954300; 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; bh=YsSV3PlKLSNNds2rF2ZBNXmLdf14rLwBl+4Lt0a+xPw=; b=aMBr1Nx3EzIwryMfcexLEghpp84heZf84FSegnJpLQIbtsakYV7HK4FpSSQg8M5tWqnd3z 419x7ApwDe/00/nvQak+C4MxY8hjttpX0oioj7mWnafK62fix9zvLz+Cj3LTiVqtk4v6yQ 1m7ra5+B08QDudryFDYElnltA0Qb7WE= X-MC-Unique: -purKCzAMwSgqxggoMV_-w-1 From: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= To: devel@lists.libvirt.org Cc: =?UTF-8?q?Daniel=20P=2E=20Berrang=C3=A9?= Subject: [PATCH] rpc: avoid leak of GSource in use for interrupting main loop Date: Fri, 17 May 2024 14:58:16 +0100 Message-ID: <20240517135816.1145119-1-berrange@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.8 X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: 4ANB5ZGZTTFMCNFQLEMXSXW7RXUCYAX4 X-Message-ID-Hash: 4ANB5ZGZTTFMCNFQLEMXSXW7RXUCYAX4 X-MailFrom: berrange@redhat.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1715954340598100001 Content-Type: text/plain; charset="utf-8" We never release the reference on the GSource created for interrupting the main loop, nor do we remove it from the main context if our thread is woken up prior to the wakeup callback firing. This can result in a leak of GSource objects, along with an ever growing list of GSources attached to the main context, which will gradually slow down execution of the loop, as several operations are O(N) for the number of attached GSource objects. Signed-off-by: Daniel P. Berrang=C3=A9 Reviewed-by: Michal Privoznik --- src/rpc/virnetclient.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/rpc/virnetclient.c b/src/rpc/virnetclient.c index 147b0d661a..6d424eb599 100644 --- a/src/rpc/virnetclient.c +++ b/src/rpc/virnetclient.c @@ -1946,7 +1946,7 @@ static int virNetClientIO(virNetClient *client, /* Check to see if another thread is dispatching */ if (client->haveTheBuck) { /* Force other thread to wakeup from poll */ - GSource *wakeup =3D g_idle_source_new(); + g_autoptr(GSource) wakeup =3D g_idle_source_new(); g_source_set_callback(wakeup, virNetClientIOWakeup, client->eventL= oop, NULL); g_source_attach(wakeup, client->eventCtx); =20 @@ -1968,6 +1968,7 @@ static int virNetClientIO(virNetClient *client, return -1; } =20 + g_source_destroy(wakeup); VIR_DEBUG("Woken up from sleep head=3D%p call=3D%p", client->waitDispatch, thiscall); /* Three reasons we can be woken up --=20 2.43.0