tracing segfaults with FFI
Gaal Yahas
gaal at forum2.org
Wed Jan 4 10:31:57 EST 2006
On Wed, Jan 04, 2006 at 12:36:35PM +0000, Simon Marlow wrote:
> > thawNode nodePtr = do
> > deRefStablePtr (castPtrToStablePtr nodePtr)
>
> You're attempting to deref the StablePtr, and also run it as an IO
> action! I bet the original value wasn't an IO action, right?
>
> You probably want something like
>
> thawNode nodePtr = do
> node <- deRefStablePtr (castPtrToStablePtr nodePtr)
> -- and do something with node here
>
> in general, try to keep as much type information as possible. That is,
> avoid the use of castPtrToStablePtr and its inverse, by giving correct
> types to your FFI functions (you haven't shown more of the code so I
> don't know if this applies in your case).
The code is at http://svn.openfoundry.org/pugs/src/Data/Yaml/Syck.hsc .
parseYaml works, as does its usage of freezeNode. readNode is slightly
different than thawNode; it gets its pointer from an out variable in
syck_lookup_sym.
Note that readNode also returns an IO YamlNode. How is it correct to do
so there?
--
Gaal Yahas <gaal at forum2.org>
http://gaal.livejournal.com/
More information about the Glasgow-haskell-users
mailing list