[GHC] #11500: C finalizer of a finalized ForeignPtr may be called again when RTS shuts down
GHC
ghc-devs at haskell.org
Wed Jan 27 09:32:20 UTC 2016
#11500: C finalizer of a finalized ForeignPtr may be called again when RTS shuts
down
-------------------------------------+-------------------------------------
Reporter: skydust | Owner:
Type: bug | Status: new
Priority: normal | Milestone:
Component: Runtime | Version: 7.8.3
System |
Keywords: | Operating System: Unknown/Multiple
Architecture: | Type of failure: None/Unknown
Unknown/Multiple |
Test Case: | Blocked By:
Blocking: | Related Tickets:
Differential Rev(s): | Wiki Page:
-------------------------------------+-------------------------------------
The C finalizer of a ForeignPtr that was explicitly finalized
(finalizeForeignPtr) is sometimes called again when the RTS shuts down.
Expected behaviour:
- The test script (./test.sh) below never stops
Observed behaviour:
- After a while, the test script stops with an error message indicating
double free or memory corruption
{{{#!sh
$ ./test.sh
}}}
{{{
[1 of 1] Compiling Main ( finalizer_hs.hs, finalizer_hs.o )
Linking finalizer_hs ...
*** Error in `./finalizer_hs': double free or corruption (!prev):
0x00000000010b85e0 ***
./test.sh: line 3: 20482 Aborted (core dumped)
./finalizer_hs +RTS -N
178
}}}
File finalizer_hs.hs
{{{#!hs
{-# LANGUAGE ForeignFunctionInterface #-}
import Foreign (Ptr, FunPtr, malloc)
import Foreign.ForeignPtr (newForeignPtr, finalizeForeignPtr)
import Control.Monad (forM, forM_)
foreign import ccall "stdlib.h &free" p_free :: FunPtr (Ptr a -> IO ())
main :: IO ()
main = do
fps <- forM [1 .. 10000] $ \_ -> do
p <- malloc
newForeignPtr p_free (p :: Ptr Int)
forM_ fps finalizeForeignPtr
}}}
File test.sh:
{{{#!sh
ghc finalizer_hs.hs -threaded
CNT=0
while ./finalizer_hs +RTS -N; do CNT=$((CNT+1)); done
echo $CNT
}}}
Note: running several instances of ./test.sh concurrently triggers the
problem faster
Issue detected on following tested setups:
- Linux 32bit GHC 7.10.2
- Linux 64bit GHC 7.8.3
- Linux 64bit GHC 7.8.4
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/11500>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list