[GHC] #10975: At program exit, finalizer runs while foreign function is running

GHC ghc-devs at haskell.org
Fri Oct 16 01:27:37 UTC 2015


#10975: At program exit, finalizer runs while foreign function is running
-------------------------------------+-------------------------------------
           Reporter:  akio           |             Owner:
               Type:  bug            |            Status:  new
           Priority:  normal         |         Milestone:
          Component:  Compiler       |           Version:  7.10.1
           Keywords:                 |  Operating System:  Linux
       Architecture:  x86_64         |   Type of failure:  Incorrect result
  (amd64)                            |  at runtime
          Test Case:                 |        Blocked By:
           Blocking:                 |   Related Tickets:
Differential Rev(s):                 |         Wiki Page:
-------------------------------------+-------------------------------------
 The following code prints "finalized", which means the finalizer runs
 while the "call" function is still running.

 Steps to reproduce:
 {{{
 % ghc finalizer.hs foreign.c -threaded
 % ./finalizer
 }}}

 finalizer.hs:
 {{{#!hs
 import Control.Concurrent
 import Control.Monad
 import Foreign.C.Types
 import Foreign.ForeignPtr
 import Foreign.Ptr

 main :: IO ()
 main = do
   _ <- forkIO $ do
     fptr <- newForeignPtr finalizer nullPtr
     forever $ withForeignPtr fptr call
   threadDelay 1000000

 foreign import ccall "&finalizer" finalizer :: FunPtr (Ptr CInt -> IO ())
 foreign import ccall "call" call :: Ptr CInt -> IO ()
 }}}

 foreign.c
 {{{#!c
 #include <stdio.h>

 int finalized = 0;

 void finalizer(int *a)
 {
   finalized = 1;
   puts("finalizer");
 }

 void call(int *a)
 {
   int i;
   unsigned w = 0;
   puts("begin call");
   for(i = 0; i < 100000000; i++)
   {
     if(finalized)
       puts("finalized");
     w += i;
   }
   printf("end call: %u\n", w);
 }
 }}}

--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/10975>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list