[GHC] #10629: threadWaitRead throws BlockedIndefinitelyOnMVar
GHC
ghc-devs at haskell.org
Fri Jul 10 22:27:17 UTC 2015
#10629: threadWaitRead throws BlockedIndefinitelyOnMVar
-------------------------------------+-------------------------------------
Reporter: | Owner: simonmar
facundo.dominguez | Status: new
Type: bug | Milestone:
Priority: normal | Version: 7.10.1
Component: Runtime System | Keywords:
Resolution: | concurrency sockets
Operating System: Linux | Architecture:
Type of failure: Incorrect result | Unknown/Multiple
at runtime | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Revisions:
-------------------------------------+-------------------------------------
Description changed by facundo.dominguez:
Old description:
> In a project using the network-transport-tcp package, I'm observing
> {{{threadWaitRead}}} throw the exception {{{BlockedIndefinitelyOnMVar}}}.
>
> The call stack is roughly:
>
> {{{
> ...
> n-t-tcp:Network.Transport.TCP.handleIncomingMessages
> n-t-tcp:Network.Transport.TCP.Internal.recvInt32
> n-t-tcp:Network.Transport.TCP.Internal.recvExact
> network:Network.Socket.ByteString:recv
> network:Network.Socket.ByteString:recvInner
> network:Network.Socket.Internal:throwSocketErrorWaitRead
> base:Control.Concurrent:threadWaitRead
> }}}
>
> IIUC this would be an RTS bug. The socket file descriptor is healthy and
> works fine if the exception is caught and {{{threadWaitRead}}} is
> retried.
>
> Unfortunately, I can only reproduce this in a particular machine and with
> a rather complex test case.
>
> I'd appreciate any advice on inspecting the RTS code to scan for the
> cause of {{{BlockedIndefinitelyOnMVar}}} being thrown.
>
> Of course, if someone can help explaining this behavior I'll be most
> thankful.
New description:
In a project using the network-transport-tcp package, I'm observing
{{{threadWaitRead}}} throw the exception {{{BlockedIndefinitelyOnMVar}}}.
The call stack is roughly:
{{{
...
n-t-tcp:Network.Transport.TCP.handleIncomingMessages
n-t-tcp:Network.Transport.TCP.Internal.recvInt32
n-t-tcp:Network.Transport.TCP.Internal.recvExact
network:Network.Socket.ByteString:recv
network:Network.Socket.ByteString:recvInner
network:Network.Socket.Internal:throwSocketErrorWaitRead
base:Control.Concurrent:threadWaitRead
}}}
IIUC this would be an RTS bug. The socket file descriptor is healthy and
works fine if the exception is caught and {{{threadWaitRead}}} is retried.
Unfortunately, I can only reproduce this in a particular cluster and with
a rather complex test case while using the threaded runtime.
I'd appreciate any advice on inspecting the RTS code to scan for the cause
of {{{BlockedIndefinitelyOnMVar}}} being thrown.
Of course, if someone can help explaining this behavior I'll be most
thankful.
--
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/10629#comment:1>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list