FFI Bug - Finalizer always called with NULL pointer?
Brian Hulley
brianh at metamilk.com
Sat Apr 8 05:35:06 EDT 2006
> [Helpful off-list suggestion to look at FFI spec for & more closely]
Thanks. I'd read it several times before but hadn't understood the
difference between a function and the address of a function and so thought
'&' was optional, as it is in C for functions:
void foo();
typedef void (*Fun)();
Fun a = &foo;
Fun b = foo; // same as above (in VC7)
However I see now that in the Haskell FFI my original declaration, without
the &, was declaring duma_releaseFont to be a function taking no args and
returning a FunPtr, whereas with the &, I am declaring duma_releaseFont to
be the FunPtr itself. The '&' is needed because otherwise there would be no
way to distinguish the wrapping of a C function in a FunPtr and a C function
returning a FunPtr.
So in a way it is "obvious" but only when it is realised that '&' actually
means something in Haskell FFI even though it is irrelevant (when taking
about functions) in C.
Therefore there is no bug anywhere. It is just that FFI has a high learning
curve since it rests on extremely subtle but vital distinctions foreign to a
C programmer... :-)
More information about the Glasgow-haskell-users
mailing list