Azure / DotNetty

DotNetty project – a port of netty, event-driven asynchronous network application framework
Other
4.09k stars 977 forks source link

DotNetty.Buffers IndexOutOfBoundsException on ChannelGroup.WriteAndFlushAsync(Unpooled.Empty) #55

Closed Aaronontheweb closed 8 years ago

Aaronontheweb commented 8 years ago

Haven't determined what the underlying cause of the error is yet, but the following block of code throws an IndexOutOfBoundsException inside the Task returned on ChannelGroup.WriteAndFlushAsync

public override async Task<bool> Shutdown()
{
    Func<Task, bool> always = task => task.IsCompleted & !task.IsCanceled & !task.IsFaulted;

    var writeStatus = ChannelGroup.WriteAndFlushAsync(Unpooled.Empty).ContinueWith(always); //throws inside Task
    var disconnectStatus = ChannelGroup.DisconnectAsync().ContinueWith(always);
    var closeStatus = ChannelGroup.CloseAsync().ContinueWith(always);
    //_eventListener.Dispose();
    return await Task.WhenAll(writeStatus, disconnectStatus, closeStatus).ContinueWith(tr =>
    {
        if (tr.IsFaulted || tr.IsCanceled) return false;
        return tr.Result.All(x => x);
    });
}
Aaronontheweb commented 8 years ago

Stacktrace:

   at DotNetty.Buffers.EmptyByteBuffer.Duplicate()
   at DotNetty.Transport.Channels.Groups.DefaultChannelGroup.SafeDuplicate(Object message)
   at DotNetty.Transport.Channels.Groups.DefaultChannelGroup.WriteAndFlushAsync(Object message, IChannelMatcher matcher)
   at DotNetty.Transport.Channels.Groups.DefaultChannelGroup.WriteAndFlushAsync(Object message)
   at Akka.Remote.Transport.DotNetty.DotNettyTransport.<Shutdown>d__36.MoveNext() in D:\Repositories\olympus\akka.net\src\core\Akka.Remote\Transport\DotNetty\DotNettyTransport.cs:line 532