fix: crash when evdns_base_new() fails (#2627)
Fixes #1437 by checking for nullptr before calling evdns_base_free().
This commit is contained in:
parent
f87d737e0f
commit
0adc6b95de
|
@ -24,7 +24,6 @@
|
|||
#include <sys/stat.h> /* umask() */
|
||||
#endif
|
||||
|
||||
#include <event2/dns.h> /* evdns_base_free() */
|
||||
#include <event2/event.h>
|
||||
|
||||
#include <libutp/utp.h>
|
||||
|
@ -1837,8 +1836,6 @@ static void sessionCloseImplFinish(tr_session* session)
|
|||
session->saveTimer = nullptr;
|
||||
|
||||
/* we had to wait until UDP trackers were closed before closing these: */
|
||||
evdns_base_free(session->evdns_base, 0);
|
||||
session->evdns_base = nullptr;
|
||||
tr_tracker_udp_close(session);
|
||||
tr_udpUninit(session);
|
||||
|
||||
|
|
|
@ -201,18 +201,23 @@ static void libeventThreadFunc(tr_event_handle* events)
|
|||
|
||||
// create the libevent base
|
||||
auto* const base = event_base_new();
|
||||
auto* const dns_base = evdns_base_new(base, EVDNS_BASE_INITIALIZE_NAMESERVERS);
|
||||
|
||||
// initialize the session struct's event fields
|
||||
events->base = base;
|
||||
events->work_queue_event = event_new(base, -1, 0, onWorkAvailable, events->session);
|
||||
events->session->event_base = base;
|
||||
events->session->evdns_base = evdns_base_new(base, EVDNS_BASE_INITIALIZE_NAMESERVERS);
|
||||
events->session->evdns_base = dns_base;
|
||||
events->session->events = events;
|
||||
|
||||
// loop until `tr_eventClose()` kills the loop
|
||||
event_base_loop(base, EVLOOP_NO_EXIT_ON_EMPTY);
|
||||
|
||||
// shut down the thread
|
||||
if (dns_base != nullptr)
|
||||
{
|
||||
evdns_base_free(dns_base, 0);
|
||||
}
|
||||
event_base_free(base);
|
||||
events->session->event_base = nullptr;
|
||||
events->session->evdns_base = nullptr;
|
||||
|
|
Loading…
Reference in New Issue