comparison libpurple/dnsquery.c @ 20785:6da14d538231

Fix leakage in the win32 dnsquery implementation.
author Daniel Atallah <daniel.atallah@gmail.com>
date Fri, 05 Oct 2007 05:28:54 +0000
parents 6bf32c9e15a7
children 35b4f1dc4c8d
comparison
equal deleted inserted replaced
20784:ca0d0e4f8c91 20785:6da14d538231
635 */ 635 */
636 636
637 static gboolean 637 static gboolean
638 dns_main_thread_cb(gpointer data) 638 dns_main_thread_cb(gpointer data)
639 { 639 {
640 PurpleDnsQueryData *query_data; 640 PurpleDnsQueryData *query_data = data;
641 641
642 query_data = data; 642 /* We're done, so purple_dnsquery_destroy() shouldn't think it is canceling an in-progress lookup */
643 query_data->resolver = NULL;
643 644
644 if (query_data->error_message != NULL) 645 if (query_data->error_message != NULL)
645 purple_dnsquery_failed(query_data, query_data->error_message); 646 purple_dnsquery_failed(query_data, query_data->error_message);
646 else 647 else
647 { 648 {
711 query_data->error_message = g_strdup_printf(_("Error resolving %s: %d"), query_data->hostname, h_errno); 712 query_data->error_message = g_strdup_printf(_("Error resolving %s: %d"), query_data->hostname, h_errno);
712 } 713 }
713 #endif 714 #endif
714 715
715 /* back to main thread */ 716 /* back to main thread */
716 g_idle_add(dns_main_thread_cb, query_data); 717 purple_timeout_add(0, dns_main_thread_cb, query_data);
717 718
718 return 0; 719 return 0;
719 } 720 }
720 721
721 static gboolean 722 static gboolean
778 g_return_val_if_fail(port != 0, NULL); 779 g_return_val_if_fail(port != 0, NULL);
779 g_return_val_if_fail(callback != NULL, NULL); 780 g_return_val_if_fail(callback != NULL, NULL);
780 781
781 purple_debug_info("dnsquery", "Performing DNS lookup for %s\n", hostname); 782 purple_debug_info("dnsquery", "Performing DNS lookup for %s\n", hostname);
782 783
783 query_data = g_new(PurpleDnsQueryData, 1); 784 query_data = g_new0(PurpleDnsQueryData, 1);
784 query_data->hostname = g_strdup(hostname); 785 query_data->hostname = g_strdup(hostname);
785 g_strstrip(query_data->hostname); 786 g_strstrip(query_data->hostname);
786 query_data->port = port; 787 query_data->port = port;
787 query_data->callback = callback; 788 query_data->callback = callback;
788 query_data->data = data; 789 query_data->data = data;
789 query_data->error_message = NULL;
790 query_data->hosts = NULL;
791 790
792 if (strlen(query_data->hostname) == 0) 791 if (strlen(query_data->hostname) == 0)
793 { 792 {
794 purple_dnsquery_destroy(query_data); 793 purple_dnsquery_destroy(query_data);
795 g_return_val_if_reached(NULL); 794 g_return_val_if_reached(NULL);