0
0
Fork 0
mirror of https://github.com/matrix-construct/construct synced 2024-06-02 10:08:56 +02:00

modules/s_dns_resolver: Deconflict resolver instance pointer from typename.

This commit is contained in:
Jason Volk 2019-06-24 02:17:06 -06:00
parent cbd2f6f4c7
commit fc786afbd5
2 changed files with 13 additions and 12 deletions

View file

@ -79,7 +79,7 @@ struct ircd::net::dns::cache::waiter
namespace ircd::net::dns
{
// Resolver instance
struct resolver extern *resolver;
struct resolver extern *resolver_instance;
uint16_t resolver_call(const hostport &, const opts &);
void resolver_init(answers_callback);

View file

@ -10,8 +10,8 @@
#include "s_dns.h"
decltype(ircd::net::dns::resolver)
ircd::net::dns::resolver;
decltype(ircd::net::dns::resolver_instance)
ircd::net::dns::resolver_instance;
decltype(ircd::net::dns::resolver::servers)
ircd::net::dns::resolver::servers
@ -21,8 +21,8 @@ ircd::net::dns::resolver::servers
{ "default", "4.2.2.1 4.2.2.2 4.2.2.3 4.2.2.4 4.2.2.5 4.2.2.6" },
}, []
{
if(bool(ircd::net::dns::resolver))
ircd::net::dns::resolver->set_servers();
if(bool(ircd::net::dns::resolver_instance))
ircd::net::dns::resolver_instance->set_servers();
}
};
@ -61,8 +61,9 @@ ircd::net::dns::resolver::retry_max
void
ircd::net::dns::resolver_init(answers_callback callback)
{
assert(!ircd::net::dns::resolver);
ircd::net::dns::resolver = new typename ircd::net::dns::resolver
assert(!ircd::net::dns::resolver_instance);
ircd::net::dns::resolver_instance = new resolver
{
std::move(callback)
};
@ -71,22 +72,22 @@ ircd::net::dns::resolver_init(answers_callback callback)
void
ircd::net::dns::resolver_fini()
{
delete ircd::net::dns::resolver;
ircd::net::dns::resolver = nullptr;
delete ircd::net::dns::resolver_instance;
ircd::net::dns::resolver_instance = nullptr;
}
uint16_t
ircd::net::dns::resolver_call(const hostport &hp,
const opts &opts)
{
if(unlikely(!resolver))
if(unlikely(!resolver_instance))
throw error
{
"Cannot resolve '%s': resolver unavailable.",
host(hp)
};
auto &resolver{*dns::resolver};
auto &resolver{*dns::resolver_instance};
if(unlikely(!resolver.ns.is_open()))
throw error
{
@ -893,7 +894,7 @@ catch(const std::exception &e)
};
resolver::servers.fault();
if(!ircd::net::dns::resolver)
if(!ircd::net::dns::resolver_instance)
set_servers();
}