FunPtr stability - suggested clarification to FFI Addendum

Hi, I think the FFI Addendum should make explicit that FunPtr values are stable (in the sense of StablePtr). I'm writing a Haskell plugin for an application written in C, and the control flow is: C->Haskell->C ; C->Haskell->C ; ... and I was confused by this statement in section 4.1 of the Addendum (under the subheading "Dynamic wrapper"): --8<-- The stub factory mkCallback turns any Haskell computation of type IO () into a C function pointer that can be passed to C routines, which can call back into the Haskell context by invoking the referenced function. --8<-- The usage of "call back" makes it clear that this control flow is ok: Haskell->C->Haskell but I wasn't sure whether the C code could store the pointer and call it later. Apparently it is safe, but it isn't made explicit in the Addendum. As SamB said in #haskell: --8<-- The fact that there is something called "freeHaskellFunPtr" seems to indicate that, yes, those things are stable. It would be totally bonkers to have a "free" function if the associated memory was not stable (and, therefor, garbage collected). --8<-- Thanks for your attention, Claude -- http://claudiusmaximus.goto10.org
participants (1)
-
Claude Heiland-Allen