# HG changeset patch # User Mikael Hallendal # Date 1217922007 -7200 # Node ID 09fe238533b9a8b93f98a9b198951cebb45b7df3 # Parent 08d36982e99842b1d577b3395c9fbe549b155e40 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. diff -r 08d36982e998 -r 09fe238533b9 loudmouth/lm-asyncns-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 diff -r 08d36982e998 -r 09fe238533b9 loudmouth/lm-blocking-resolver.c --- 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); }