A bug of multicore IO manager

Simon Marlow marlowsd at gmail.com
Wed Sep 4 12:51:54 CEST 2013

On 03/09/13 22:57, Johan Tibell wrote:
> Hi Kazu,
> On Tue, Sep 3, 2013 at 2:52 PM, Kazu Yamamoto <kazu at iij.ad.jp
> <mailto:kazu at iij.ad.jp>> wrote:
>     Hi,
>     As I said before, I started running HTTP server using Mio in the real
>     world. Unfortunately, the daemon is not stable.
>     After one day or so, the server cannot accept any HTTP requests.  No
>     error messages from the server.
>     The server is alive. To terminate the server (running in a "screen"
>     terminal), single Ctrl-c is not enough. Typing Ctrl-c again terminates
>     the server.
> Could you run an strace on the process in this state so we can get an
> idea what it's doing?
>     After several tests, I'm getting convinced that this occurs only when
>     +RTS -N<x> is specified (where <x> >= 2). The server runs well if +RTS
>     -N<x> is not specified.
> That indicates that the problem is with the threaded RTS and perhaps
> with the IO manager.
>     My question: if the program complied with GHC needs double Ctrl-c to
>     terminate, what is the situation of the program?
> If Ctrl+C generates an exception (does it?) there could be an
> overzealous exception catcher somewhere that catches all exceptions,
> including your Ctrl+C.

The first Ctrl-C is sent as an Interrupted exception to the main thread. 
  The second Ctrl-C sends a SIGINT as usual, which tends to kill the 

If you need two Ctrl-Cs to kill the program, it probably means that it 
deadlocked somewhere, maybe in the RTS.  Kazu: if you can attach to the 
deadlocked process with gdb and get stack traces of all the threads, 
that might help.


More information about the ghc-devs mailing list