John Goerzen wrote:
I think you have that backwards, but I'm unsure.  According to the FFI
spec, section 3.3:

  "Optionally, an import declaration can specify, after the calling
  convention, the safety level that should be used when invoking an
  external entity. A safe call is less efficient, but guarantees to
  leave the Haskell system in a state that allows callbacks from the
  external code. In contrast, an unsafe call, while carrying less
  overhead, must not trigger a callback into the Haskell system."

There is no reason for any of these calls to trigger a callback into
Haskell, so they can all be imported unsafe for greater efficiency.

But it doesn't directly address threads, so I don't know what to make of
that.  Do you have a reference?

In GHC, other threads cannot run while an unsafe foreign call is in
progress.  Our documentation is slightly lacking here, but this paper
describes it all:

  http://www.haskell.org/~simonmar/papers/conc-ffi.pdf

If you have foreign calls which might block or just take a long time, it
is good practice not to mark them unsafe.

Cheers,
        Simon

_______________________________________________
Haskell mailing list
Haskell@haskell.org
http://www.haskell.org/mailman/listinfo/haskell

Reply via email to