public Task WriteAsync(object msg) { this.AssertEventLoop(); ChannelOutboundBuffer outboundBuffer = this.outboundBuffer; if (outboundBuffer == null) { // If the outboundBuffer is null we know the channel was closed and so // need to fail the future right away. If it is not null the handling of the rest // will be done input flush0() // See https://github.com/netty/netty/issues/2362 // release message now to prevent resource-leak ReferenceCountUtil.Release(msg); return(TaskEx.FromException(new ClosedChannelException())); } int size; try { msg = this.channel.FilterOutboundMessage(msg); size = this.channel.pipeline.EstimatorHandle.Size(msg); if (size < 0) { size = 0; } } catch (Exception t) { ReferenceCountUtil.Release(msg); return(TaskEx.FromException(t)); } var promise = new TaskCompletionSource(); outboundBuffer.AddMessage(msg, size, promise); return(promise.Task); }
public void Write(object msg, IPromise promise) { AssertEventLoop(); ChannelOutboundBuffer outboundBuffer = Volatile.Read(ref _outboundBuffer); if (outboundBuffer is null) { // If the outboundBuffer is null we know the channel was closed and so // need to fail the future right away. If it is not null the handling of the rest // will be done input flush0() // See https://github.com/netty/netty/issues/2362 Util.SafeSetFailure(promise, WriteClosedChannelException, Logger); // release message now to prevent resource-leak _ = ReferenceCountUtil.Release(msg); return; } int size; try { var ch = _channel; msg = ch.FilterOutboundMessage(msg); size = ch._pipeline.EstimatorHandle.Size(msg); if (size < 0) { size = 0; } } catch (Exception t) { Util.SafeSetFailure(promise, t, Logger); _ = ReferenceCountUtil.Release(msg); return; } outboundBuffer.AddMessage(msg, size, promise); }