[balsa/wip/gtk4: 128/351] libnetclient: Restore the dispose/finalize split



commit 94ed2ed42e55e82e37ec5c69b759fbbb606dace3
Author: Peter Bloomfield <PeterBloomfield bellsouth net>
Date:   Sat Jan 20 15:05:51 2018 -0500

    libnetclient: Restore the dispose/finalize split

 libnetclient/net-client-pop.c |    6 +---
 libnetclient/net-client.c     |   56 +++++++++++++++++++++++++---------------
 2 files changed, 37 insertions(+), 25 deletions(-)
---
diff --git a/libnetclient/net-client-pop.c b/libnetclient/net-client-pop.c
index 3837427..09287d7 100644
--- a/libnetclient/net-client-pop.c
+++ b/libnetclient/net-client-pop.c
@@ -410,10 +410,8 @@ net_client_pop_finalise(GObject *object)
        const NetClientPop *client = NET_CLIENT_POP(object);
        const GObjectClass *parent_class = G_OBJECT_CLASS(net_client_pop_parent_class);
 
-       if (client->priv != NULL) {
-               g_free(client->priv->apop_banner);
-               g_free(client->priv);
-       }
+       g_free(client->priv->apop_banner);
+       g_free(client->priv);
 
        (*parent_class->finalize)(object);
 }
diff --git a/libnetclient/net-client.c b/libnetclient/net-client.c
index 0eb6769..8a12c01 100644
--- a/libnetclient/net-client.c
+++ b/libnetclient/net-client.c
@@ -54,14 +54,14 @@ net_client_new(const gchar *host_and_port, guint16 default_port, gsize max_line_
        client = NET_CLIENT(g_object_new(NET_CLIENT_TYPE, NULL));
 
        if (client->priv->sock == NULL) {
-               g_object_unref(client);
-               return NULL;
+               g_object_unref(G_OBJECT(client));
+               client = NULL;
+       } else {
+               client->priv->host_and_port = g_strdup(host_and_port);
+               client->priv->default_port = default_port;
+               client->priv->max_line_len = max_line_len;
        }
 
-       client->priv->host_and_port = g_strdup(host_and_port);
-       client->priv->default_port = default_port;
-       client->priv->max_line_len = max_line_len;
-
        return client;
 }
 
@@ -325,7 +325,10 @@ net_client_set_cert_from_pem(NetClient *client, const gchar *pem_data, GError **
        g_return_val_if_fail(NET_IS_CLIENT(client) && (pem_data != NULL), FALSE);
 
        /* always free any existing certificate */
-       g_clear_object(&client->priv->certificate);
+       if (client->priv->certificate != NULL) {
+               g_object_unref(G_OBJECT(client->priv->certificate));
+               client->priv->certificate = NULL;
+       }
 
        /* load the certificate */
        res = gnutls_x509_crt_init(&cert);
@@ -504,10 +507,12 @@ net_client_class_init(NetClientClass *klass)
 static void
 net_client_init(NetClient *self)
 {
-       self->priv = G_TYPE_INSTANCE_GET_PRIVATE(self, NET_CLIENT_TYPE, NetClientPrivate);
-       self->priv->sock = g_socket_client_new();
-       if (self->priv->sock != NULL) {
-               g_socket_client_set_timeout(self->priv->sock, 180U);
+        NetClientPrivate *priv;
+
+       self->priv = priv = G_TYPE_INSTANCE_GET_PRIVATE(self, NET_CLIENT_TYPE, NetClientPrivate);
+       priv->sock = g_socket_client_new();
+       if (priv->sock != NULL) {
+               g_socket_client_set_timeout(priv->sock, 180U);
        }
 }
 
@@ -516,19 +521,28 @@ static void
 net_client_dispose(GObject *object)
 {
        const NetClient *client = NET_CLIENT(object);
+        NetClientPrivate *priv = client->priv;
        const GObjectClass *parent_class = G_OBJECT_CLASS(net_client_parent_class);
 
        net_client_shutdown(client);
-       if (client->priv->sock != NULL) {
-               g_object_unref(G_OBJECT(client->priv->sock));
-               client->priv->sock = NULL;
-       }
-       if (client->priv->certificate != NULL) {
-               g_object_unref(G_OBJECT(client->priv->certificate));
-               client->priv->certificate = NULL;
-       }
-       g_debug("finalised connection to %s", client->priv->host_and_port);
-       g_free(client->priv->host_and_port);
+       g_clear_object(&priv->sock);
+       g_clear_object(&priv->certificate);
+       g_debug("disposed connection to %s", priv->host_and_port);
+
+       (*parent_class->dispose)(object);
+}
+
+
+static void
+net_client_finalise(GObject *object)
+{
+       const NetClient *client = NET_CLIENT(object);
+        NetClientPrivate *priv = client->priv;
+       const GObjectClass *parent_class = G_OBJECT_CLASS(net_client_parent_class);
+
+       g_debug("finalised connection to %s", priv->host_and_port);
+       g_free(priv->host_and_port);
+
        (*parent_class->finalize)(object);
 }
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]