Free resources associated with waitForDataAsync as early as possible.

Instead of letting the GC clean up at an undefined point in time.
This commit is contained in:
Sönke Ludwig 2018-09-03 13:45:53 +02:00
parent 0b638634c9
commit 897fee84ea

View file

@ -633,6 +633,8 @@ mixin(tracer);
}
static final class WaitContext {
import std.algorithm.mutation : move;
CALLABLE callback;
TCPConnection connection;
Timer timer;
@ -648,7 +650,7 @@ mixin(tracer);
void onTimeout()
{
eventDriver.sockets.cancelRead(connection.m_socket);
callback(false);
invoke(false);
}
void onData(StreamSocketFD, IOStatus st, size_t nb)
@ -656,7 +658,15 @@ mixin(tracer);
if (timer) timer.stop();
assert(connection.m_context.readBuffer.length == 0);
connection.m_context.readBuffer.putN(nb);
callback(connection.m_context.readBuffer.length > 0);
invoke(connection.m_context.readBuffer.length > 0);
}
void invoke(bool status)
{
auto cb = move(callback);
connection = TCPConnection.init;
timer = Timer.init;
cb(status);
}
}