mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-10 21:23:58 +01:00
Minor fix: add code to eventdns so it can free memory on shutdown. This should help valgrind and dmalloc freak out less.
svn:r8503
This commit is contained in:
parent
52e179b942
commit
01f9e97d43
@ -1557,7 +1557,8 @@ evdns_callback(int result, char type, int count, int ttl, void *addresses,
|
||||
if (evdns_err_is_transient(result))
|
||||
status = DNS_RESOLVE_FAILED_TRANSIENT;
|
||||
}
|
||||
dns_found_answer(string_address, is_reverse, addr, hostname, status, ttl);
|
||||
if (result != DNS_ERR_SHUTDOWN)
|
||||
dns_found_answer(string_address, is_reverse, addr, hostname, status, ttl);
|
||||
tor_free(string_address);
|
||||
}
|
||||
|
||||
|
@ -2294,7 +2294,7 @@ main(int c, char **v) {
|
||||
}
|
||||
|
||||
int
|
||||
evdns_init()
|
||||
evdns_init(void)
|
||||
{
|
||||
int res = 0;
|
||||
#ifdef MS_WINDOWS
|
||||
@ -2308,6 +2308,45 @@ evdns_init()
|
||||
|
||||
#endif
|
||||
|
||||
void
|
||||
evdns_shutdown(int fail_requests)
|
||||
{
|
||||
struct nameserver *server, *server_next;
|
||||
struct search_domain *dom, *dom_next;
|
||||
|
||||
while (req_head) {
|
||||
if (fail_requests)
|
||||
reply_callback(req_head, 0, DNS_ERR_SHUTDOWN, NULL);
|
||||
request_finished(req_head, &req_head);
|
||||
}
|
||||
while (req_waiting_head) {
|
||||
if (fail_requests)
|
||||
reply_callback(req_waiting_head, 0, DNS_ERR_SHUTDOWN, NULL);
|
||||
request_finished(req_waiting_head, &req_waiting_head);
|
||||
}
|
||||
global_requests_inflight = global_requests_waiting = 0;
|
||||
|
||||
for (server = server_head; server; server = server_next) {
|
||||
server_next = server->next;
|
||||
if (server->socket >= 0)
|
||||
CLOSE_SOCKET(server->socket);
|
||||
(void) event_del(&server->event);
|
||||
free(server);
|
||||
}
|
||||
server_head = NULL;
|
||||
global_good_nameservers = 0;
|
||||
|
||||
if (global_search_state) {
|
||||
for (dom = global_search_state->head; dom; dom = dom_next) {
|
||||
dom_next = dom->next;
|
||||
free(dom);
|
||||
}
|
||||
free(global_search_state);
|
||||
global_search_state = NULL;
|
||||
}
|
||||
evdns_log_fn = NULL;
|
||||
}
|
||||
|
||||
// Local Variables:
|
||||
// tab-width: 4
|
||||
// c-basic-offset: 4
|
||||
|
@ -36,6 +36,8 @@
|
||||
#define DNS_ERR_UNKNOWN 66
|
||||
/* Communication with the server timed out */
|
||||
#define DNS_ERR_TIMEOUT 67
|
||||
/* The request was canceled because the DNS subsystem was shut down. */
|
||||
#define DNS_ERR_SHUTDOWN 68
|
||||
|
||||
#define DNS_IPv4_A 1
|
||||
#define DNS_PTR 2
|
||||
@ -50,6 +52,7 @@
|
||||
typedef void (*evdns_callback_type) (int result, char type, int count, int ttl, void *addresses, void *arg);
|
||||
|
||||
int evdns_init(void);
|
||||
void evdns_shutdown(int fail_requests);
|
||||
int evdns_nameserver_add(unsigned long int address);
|
||||
int evdns_count_nameservers(void);
|
||||
int evdns_clear_nameservers_and_suspend(void);
|
||||
|
@ -16,6 +16,9 @@ const char main_c_id[] =
|
||||
#ifdef USE_DMALLOC
|
||||
#include <dmalloc.h>
|
||||
#endif
|
||||
#ifdef USE_EVENTDNS
|
||||
void evdns_shutdown(int);
|
||||
#endif
|
||||
|
||||
/********* PROTOTYPES **********/
|
||||
|
||||
@ -1548,6 +1551,11 @@ tor_init(int argc, char *argv[])
|
||||
void
|
||||
tor_free_all(int postfork)
|
||||
{
|
||||
#ifdef USE_EVENTDNS
|
||||
if (!postfork) {
|
||||
evdns_shutdown(1);
|
||||
}
|
||||
#endif
|
||||
routerlist_free_all();
|
||||
addressmap_free_all();
|
||||
set_exit_redirects(NULL); /* free the registered exit redirects */
|
||||
|
Loading…
Reference in New Issue
Block a user