[GHC] #10199: Sending SIGINT to a program that uses forkOS may crash with various errors
GHC
ghc-devs at haskell.org
Fri Mar 27 15:08:11 UTC 2015
#10199: Sending SIGINT to a program that uses forkOS may crash with various errors
-------------------------------------+-------------------------------------
Reporter: adeon | Owner: simonmar
Type: bug | Status: new
Priority: low | Milestone:
Component: Runtime | Version: 7.10.1
System | Operating System: Linux
Keywords: | Type of failure: Runtime crash
Architecture: x86_64 | Blocked By:
(amd64) | Related Tickets:
Test Case: |
Blocking: |
Differential Revisions: |
-------------------------------------+-------------------------------------
This is the program:
{{{#!hs
module Main ( main ) where
import Control.Concurrent
import Control.Monad
main :: IO ()
main = recursive 0
where
recursive n = do
tid <- forkIO $ do
replicateM_ 100 $ forkOS $ return ()
replicateM_ (n `mod` 1000) yield
recursive (n+1)
}}}
I was trying to investigate a potential issue with leaking StablePtrs in
forkOS but that's another story.
Compile with {{{ghc Main.hs -prof -auto-all -threaded -o Main}}}. Run as
{{{./Main +RTS -h}}} (I don't know if it's absolutely necessary to turn
heap profiling on but I have more trouble getting these error messages
without it).
Then, stop the program with SIGINT (by pressing CTRL+C or otherwise). The
program sometimes crashes and produces one of the these two error
messages:
{{{
Main: internal error: RELEASE_LOCK: I do not own this lock: rts/Task.c 242
(GHC version 7.10.1 for x86_64_unknown_linux)
Please report this as a GHC bug:
http://www.haskell.org/ghc/reportabug
}}}
{{{
Main: newBoundTask: RTS is not initialised; call hs_init() first
}}}
Sometimes the message may be slightly garbled (notice double internal
error below):
{{{
Î: internal error: Main: internal error: RELEASE_LOCK: I do not own this
lock: rts/Task.c 242
(GHC version 7.10.1 for x86_64_unknown_linux)
Please report this as a GHC bug:
http://www.haskell.org/ghc/reportabug
}}}
Replacing forkOS with forkIO seems to stop the messages. I can't reproduce
this on FreeBSD. I'm using the downloaded binaries of 7.10.1 from GHC site
on Arch Linux.
I used this simple bash script to see more of these messages because it
won't crash reliably:
{{{#!bash
#!/bin/bash
while true; do
timeout -s INT 0.2 ./Main +RTS -h
done
}}}
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/10199>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list