Fixed Resolver Memory Management Issues (by creating less severe issues)
authorJayson Vantuyl <jvantuyl@engineyard.com>
Mon, 23 Feb 2009 18:04:58 -0800
changeset 585 bccdb423a8e9
parent 584 96b31c822ab8
child 586 397c716572b4
Fixed Resolver Memory Management Issues (by creating less severe issues)
loudmouth/lm-blocking-resolver.c
loudmouth/lm-old-socket.c
--- a/loudmouth/lm-blocking-resolver.c	Mon Feb 23 13:51:34 2009 -0800
+++ b/loudmouth/lm-blocking-resolver.c	Mon Feb 23 18:04:58 2009 -0800
@@ -117,9 +117,11 @@
 
     if (ans == NULL) {
         /* Couldn't find any results */
+        g_object_ref (resolver);
         _lm_resolver_set_result (LM_RESOLVER (resolver), LM_RESOLVER_RESULT_FAILED,
                                  NULL);
 
+        g_object_unref (resolver);
         retval = FALSE;
     }
 
@@ -127,12 +129,15 @@
     /*priv->results    = ans;
       priv->cur_result = ans; */
 
-    g_object_ref (resolver);
+    if (retval) {
+        assert(ans->ai_family == AF_INET);
+        g_object_ref (resolver);
 
-    _lm_resolver_set_result (LM_RESOLVER (resolver), LM_RESOLVER_RESULT_OK,
-                             ans);
+        _lm_resolver_set_result (LM_RESOLVER (resolver), LM_RESOLVER_RESULT_OK,
+                                 ans);
 
-    g_object_unref (resolver);
+        g_object_unref (resolver);
+    }
 
     g_free (host);
 
--- a/loudmouth/lm-old-socket.c	Mon Feb 23 13:51:34 2009 -0800
+++ b/loudmouth/lm-old-socket.c	Mon Feb 23 18:04:58 2009 -0800
@@ -772,8 +772,9 @@
         if (socket->connect_func) {
             (socket->connect_func) (socket, FALSE, socket->user_data);
         }
+        /*FIXME: Leaking Resolvers Until Clean Up Can Be Properly Handled
         g_object_unref (socket->resolver);
-        socket->resolver = NULL;
+        socket->resolver = NULL;*/
         g_free (socket->connect_data);
         socket->connect_data = NULL;
 
@@ -933,10 +934,11 @@
         g_free (data);
     }
 
+    /* FIXME: Leaking Resolvers Until Clean Up Can Be Corrected
     if (socket->resolver) {
         g_object_unref (socket->resolver);
         socket->resolver = NULL;
-    }
+    } */
 
     if (socket->io_channel) {
         if (socket->watch_in) {