Ensure async lambdas are templates to fix LDC linker errors. Fixes #65.
If the lambda is a concrete function, two different versions will end up for it in the final binary on macOS when compiled with LDC. Using argument inference works around that issue.
This commit is contained in:
parent
258abe0844
commit
eb3620056f
|
@ -991,7 +991,7 @@ struct FileDescriptorEvent {
|
||||||
alias readwaiter = Waitable!(IOCallback,
|
alias readwaiter = Waitable!(IOCallback,
|
||||||
cb => eventDriver.sockets.waitForData(m_socket, cb),
|
cb => eventDriver.sockets.waitForData(m_socket, cb),
|
||||||
cb => eventDriver.sockets.cancelRead(m_socket),
|
cb => eventDriver.sockets.cancelRead(m_socket),
|
||||||
(StreamSocketFD fd, IOStatus st, size_t nb) { got_data = st == IOStatus.ok; }
|
(fd, st, nb) { got_data = st == IOStatus.ok; }
|
||||||
);
|
);
|
||||||
|
|
||||||
asyncAwaitAny!(true, readwaiter)(timeout);
|
asyncAwaitAny!(true, readwaiter)(timeout);
|
||||||
|
|
|
@ -201,7 +201,7 @@ TCPConnection connectTCP(NetworkAddress addr, NetworkAddress bind_address = anyA
|
||||||
|
|
||||||
alias waiter = Waitable!(ConnectCallback,
|
alias waiter = Waitable!(ConnectCallback,
|
||||||
cb => eventDriver.sockets.connectStream(uaddr, baddr, cb),
|
cb => eventDriver.sockets.connectStream(uaddr, baddr, cb),
|
||||||
(ConnectCallback cb, StreamSocketFD sock_fd) {
|
(cb, sock_fd) {
|
||||||
cancelled = true;
|
cancelled = true;
|
||||||
eventDriver.sockets.cancelConnectStream(sock_fd);
|
eventDriver.sockets.cancelConnectStream(sock_fd);
|
||||||
},
|
},
|
||||||
|
@ -610,7 +610,7 @@ mixin(tracer);
|
||||||
determined or the specified timeout is reached.
|
determined or the specified timeout is reached.
|
||||||
*/
|
*/
|
||||||
WaitForDataAsyncStatus waitForDataAsync(CALLABLE)(CALLABLE read_ready_callback, Duration timeout = Duration.max)
|
WaitForDataAsyncStatus waitForDataAsync(CALLABLE)(CALLABLE read_ready_callback, Duration timeout = Duration.max)
|
||||||
if (is(typeof(read_ready_callback(true))))
|
if (is(typeof(() @safe { read_ready_callback(true); } ())))
|
||||||
{
|
{
|
||||||
mixin(tracer);
|
mixin(tracer);
|
||||||
import vibe.core.core : setTimer;
|
import vibe.core.core : setTimer;
|
||||||
|
|
Loading…
Reference in a new issue