diff libpurple/dnssrv.c @ 15829:2edbd4fede72

merge of '921657d3f21f5190639852247331d608f5946095' and 'fab2ec4334c8c32a4a33cf74896fdbf48dc76365'
author Daniel Atallah <daniel.atallah@gmail.com>
date Mon, 19 Mar 2007 13:31:34 +0000
parents 32c366eeeb99 76bdff454d6f
children c028fc690b5d
line wrap: on
line diff
--- a/libpurple/dnssrv.c	Mon Mar 19 07:01:17 2007 +0000
+++ b/libpurple/dnssrv.c	Mon Mar 19 13:31:34 2007 +0000
@@ -110,7 +110,7 @@
 #ifdef HAVE_SIGNAL_H
 	purple_restore_default_signal_handlers();
 #endif
-	
+
 	if (read(in, query, 256) <= 0)
 		_exit(0);
 
@@ -222,9 +222,9 @@
 		PurpleSrvResponse *srvres_tmp = NULL;
 		GSList *lst = query_data->results;
 
-		size = g_slist_length(query_data->results);
+		size = g_slist_length(lst);
 
-		if(query_data->cb)
+		if(query_data->cb && size > 0)
 			srvres_tmp = srvres = g_new0(PurpleSrvResponse, size);
 		while (lst) {
 			if(query_data->cb)
@@ -234,9 +234,9 @@
 		}
 
 		query_data->results = NULL;
-	}
 
 	purple_debug_info("dnssrv", "found %d SRV entries\n", size);
+	}
 
 	if(query_data->cb)
 		query_data->cb(srvres, size, query_data->extradata);
@@ -367,29 +367,22 @@
 	query_data->query = query;
 	query_data->extradata = extradata;
 
-	if (!MyDnsQuery_UTF8 || !MyDnsRecordListFree) {
-		query_data->error_message = g_strdup_printf("System missing DNS API (Requires W2K+)\n");
-
-		/* Asynchronously call the callback since stuff may not expect
-		 * the callback to be called before this returns */
-		query_data->handle = g_idle_add(res_main_thread_cb, query_data);
-
-		return query_data;
+	if (!MyDnsQuery_UTF8 || !MyDnsRecordListFree)
+		query_data->error_message = g_strdup("System missing DNS API (Requires W2K+)\n");
+	else {
+		query_data->resolver = g_thread_create(res_thread, query_data, FALSE, &err);
+		if (query_data->resolver == NULL) {
+			query_data->error_message = g_strdup_printf("SRV thread create failure: %s\n", (err && err->message) ? err->message : "");
+			g_error_free(err);
+		}
 	}
 
-	query_data->resolver = g_thread_create(res_thread, query_data, FALSE, &err);
-	if (query_data->resolver == NULL)
-	{
-		query_data->error_message = g_strdup_printf("SRV thread create failure: %s\n", err ? err->message : "");
-		g_error_free(err);
-
-		/* Asynchronously call the callback since stuff may not expect
-		 * the callback to be called before this returns */
+	/* The query isn't going to happen, so finish the SRV lookup now.
+	 * Asynchronously call the callback since stuff may not expect
+	 * the callback to be called before this returns */
+	if (query_data->error_message != NULL)
 		query_data->handle = g_idle_add(res_main_thread_cb, query_data);
 
-		return query_data;
-	}
-
 	return query_data;
 #endif
 }