Mercurial > pidgin.yaz
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); |