Put a ref on the resolver while calling the callback.
authorMikael Hallendal <micke@imendio.com>
Tue, 05 Aug 2008 09:40:07 +0200
changeset 477 09fe238533b9
parent 476 08d36982e998
child 478 acce45e212a6
Put a ref on the resolver while calling the callback. This makes sure that the object will still be around even if the resolver is unreffed in the callback.
loudmouth/lm-asyncns-resolver.c
loudmouth/lm-blocking-resolver.c
--- a/loudmouth/lm-asyncns-resolver.c	Tue Aug 05 01:06:53 2008 +0200
+++ b/loudmouth/lm-asyncns-resolver.c	Tue Aug 05 09:40:07 2008 +0200
@@ -109,18 +109,19 @@
         priv->resolv_query = NULL;
 }
 
-static gboolean
+static void
 asyncns_resolver_done (LmResolver *resolver)
 {
         LmAsyncnsResolverPriv *priv = GET_PRIV (resolver);
         struct addrinfo	      *ans;
 	int 		       err;
-	gboolean               result = FALSE;
 
         err = asyncns_getaddrinfo_done (priv->asyncns_ctx, priv->resolv_query, &ans);
         priv->resolv_query = NULL;
         /* Signal that we are done */
 
+        g_object_ref (resolver);
+
         if (err) {
                 _lm_resolver_set_result (resolver,
                                          LM_RESOLVER_RESULT_FAILED, 
@@ -133,7 +134,7 @@
 
         asyncns_resolver_cleanup (resolver);
 
-	return result;
+        g_object_unref (resolver);
 }
 
 typedef gboolean  (* LmAsyncnsResolverCallback) (LmResolver *resolver);
@@ -223,7 +224,7 @@
 			     (gpointer) asyncns_resolver_done);
 }
 
-static gboolean
+static void
 asyncns_resolver_srv_done (LmResolver *resolver)
 {
         LmAsyncnsResolverPriv *priv = GET_PRIV (resolver);
@@ -269,8 +270,6 @@
         if (result == TRUE) {
                 asyncns_resolver_lookup_host (resolver);
         }
-
-        return FALSE;
 }
 
 static void
--- a/loudmouth/lm-blocking-resolver.c	Tue Aug 05 01:06:53 2008 +0200
+++ b/loudmouth/lm-blocking-resolver.c	Tue Aug 05 09:40:07 2008 +0200
@@ -125,9 +125,13 @@
 
         g_print ("Found result for %s\n", host);
 
+        g_object_ref (resolver);
+
         _lm_resolver_set_result (LM_RESOLVER (resolver), LM_RESOLVER_RESULT_OK,
                                  ans);
 
+        g_object_unref (resolver);
+
         g_free (host);
 }