Thread-Safety through FFI

Ashley Yakeley
Tue, 23 Oct 2001 23:34:18 -0700

Is there a way of calling exported 'dynamic export' functions in a 
thread-safe manner? I have this problem in JVM-Bridge...

This is what the main thread does, from Haskell:

1. starts the Java VM, which starts a bunch of other threads, including 
the AWT thread;
2. creates a pointer to a some IO function 'paint', using a 'dynamic 
export' callback-maker;
3. creates a new Java Frame (i.e. a GUI window) with the function-pointer;
4. repeatedly calls the Java Thread.yield function for 20 seconds.
(the program then ends)

Now, once the Java Frame has been created, the AWT thread will 
occasionally call the 'paint' method, which ends up calling the 
function-pointer. However, it seems GHC 5.02 'dynamic export' calls are 
not thread-safe, and sooner or later it crashes, either with a seg 
violation or a complaint about unknown closure types.

Ashley Yakeley, Seattle WA