From nobody Thu Apr 25 20:58:01 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1530965480904108.07031793335273; Sat, 7 Jul 2018 05:11:20 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx10.intmail.prod.int.phx2.redhat.com [10.5.11.25]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 58B87308212F; Sat, 7 Jul 2018 12:11:19 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 404BF2010CF4; Sat, 7 Jul 2018 12:11:18 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id 4729E4BB78; Sat, 7 Jul 2018 12:11:15 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w67CBCMj005857 for ; Sat, 7 Jul 2018 08:11:12 -0400 Received: by smtp.corp.redhat.com (Postfix) id 7FAF35C301; Sat, 7 Jul 2018 12:11:12 +0000 (UTC) Received: from unknown4CEB42C824F4.redhat.com (ovpn-116-46.phx2.redhat.com [10.3.116.46]) by smtp.corp.redhat.com (Postfix) with ESMTP id 3F0AA65F44 for ; Sat, 7 Jul 2018 12:11:12 +0000 (UTC) From: John Ferlan To: libvir-list@redhat.com Date: Sat, 7 Jul 2018 08:10:59 -0400 Message-Id: <20180707121107.7629-2-jferlan@redhat.com> In-Reply-To: <20180707121107.7629-1-jferlan@redhat.com> References: <20180707121107.7629-1-jferlan@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH v2 1/9] libvirtd: Alter refcnt processing for domain server objects X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.84 on 10.5.11.25 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.42]); Sat, 07 Jul 2018 12:11:19 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Type: text/plain; charset="utf-8" Once virNetDaemonAddServer returns, the @srv or @srvAdm have either been added to the @dmn list increasing the refcnt or there was an error. In either case, we can lower the refcnt from virNetServerNew, but not set to NULL. Thus "using" the hash table reference when adding programs later or allowing the immediate free of the object on error. The @dmn dispose function (virNetDaemonDispose) will handle the Unref of each object during the virHashFree when the object is removed from the hash table. Signed-off-by: John Ferlan Reviewed-by: Erik Skultety Reviewed-by: Marc Hartmayer --- src/remote/remote_daemon.c | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/src/remote/remote_daemon.c b/src/remote/remote_daemon.c index 9f3a5f38ad..f61d58f3e5 100644 --- a/src/remote/remote_daemon.c +++ b/src/remote/remote_daemon.c @@ -1036,6 +1036,7 @@ int main(int argc, char **argv) { char *remote_config_file =3D NULL; int statuswrite =3D -1; int ret =3D 1; + int rc; int pid_file_fd =3D -1; char *pid_file =3D NULL; char *sock_file =3D NULL; @@ -1290,7 +1291,11 @@ int main(int argc, char **argv) { goto cleanup; } =20 - if (virNetDaemonAddServer(dmn, srv) < 0) { + /* Add @srv to @dmn servers hash table and Unref to allow removal from + * hash table at @dmn disposal to decide when to free @srv */ + rc =3D virNetDaemonAddServer(dmn, srv); + virObjectUnref(srv); + if (rc < 0) { ret =3D VIR_DAEMON_ERR_INIT; goto cleanup; } @@ -1358,7 +1363,11 @@ int main(int argc, char **argv) { goto cleanup; } =20 - if (virNetDaemonAddServer(dmn, srvAdm) < 0) { + /* Add @srvAdm to @dmn servers hash table and Unref to allow removal f= rom + * hash table at @dmn disposal to decide when to free @srvAdm */ + rc =3D virNetDaemonAddServer(dmn, srvAdm); + virObjectUnref(srvAdm); + if (rc < 0) { ret =3D VIR_DAEMON_ERR_INIT; goto cleanup; } @@ -1479,11 +1488,9 @@ int main(int argc, char **argv) { } =20 virObjectUnref(adminProgram); - virObjectUnref(srvAdm); virObjectUnref(qemuProgram); virObjectUnref(lxcProgram); virObjectUnref(remoteProgram); - virObjectUnref(srv); virObjectUnref(dmn); =20 virNetlinkShutdown(); --=20 2.17.1 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list