Create the DNS helper event lazily.
Reduces resource usage on threads that don't perform DNS queries.
This commit is contained in:
parent
eaf7ab778b
commit
3cb0891c58
|
@ -38,21 +38,23 @@ final class EventDriverDNS_GAI(Events : EventDriverEvents, Signals : EventDriver
|
|||
}
|
||||
ChoppedVector!Lookup m_lookups;
|
||||
Events m_events;
|
||||
EventID m_event;
|
||||
EventID m_event = EventID.invalid;
|
||||
size_t m_maxHandle;
|
||||
}
|
||||
|
||||
this(Events events, Signals signals)
|
||||
{
|
||||
m_events = events;
|
||||
m_event = events.createInternal();
|
||||
m_events.wait(m_event, &onDNSSignal);
|
||||
setupEvent();
|
||||
}
|
||||
|
||||
void dispose()
|
||||
{
|
||||
m_events.cancelWait(m_event, &onDNSSignal);
|
||||
m_events.releaseRef(m_event);
|
||||
if (m_event != EventID.invalid) {
|
||||
m_events.cancelWait(m_event, &onDNSSignal);
|
||||
m_events.releaseRef(m_event);
|
||||
m_event = EventID.invalid;
|
||||
}
|
||||
}
|
||||
|
||||
override DNSLookupID lookupHost(string name, DNSLookupCallback on_lookup_finished)
|
||||
|
@ -61,6 +63,8 @@ final class EventDriverDNS_GAI(Events : EventDriverEvents, Signals : EventDriver
|
|||
auto handle = getFreeHandle();
|
||||
if (handle > m_maxHandle) m_maxHandle = handle;
|
||||
|
||||
setupEvent();
|
||||
|
||||
assert(!m_lookups[handle].result);
|
||||
Lookup* l = () @trusted { return &m_lookups[handle]; } ();
|
||||
l.name = name;
|
||||
|
@ -131,6 +135,14 @@ final class EventDriverDNS_GAI(Events : EventDriverEvents, Signals : EventDriver
|
|||
return cast(DNSLookupID)cast(int)i;
|
||||
return cast(DNSLookupID)cast(int)m_lookups.length;
|
||||
}
|
||||
|
||||
private void setupEvent()
|
||||
{
|
||||
if (m_event == EventID.invalid) {
|
||||
m_event = m_events.createInternal();
|
||||
m_events.wait(m_event, &onDNSSignal);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in a new issue