Eric Y. Kow wrote:
>> Should imageGetData be turned into a 'with-style' function
>>
>> Image a -> (Ptr () -> IO b) -> IO b
>>
>> which protects the image?
> 
> Ultimately, this seems like the right thing to do, for all functions
> that return pointers to underlying bits of data (I am slightly scared
> that there may be loads of these lurking around).

The alternative is to use mallocForeignPtr or one of its friends, and 
return a ForeignPtr to a copy of the buffer. Clearly both alternatives 
could be supported.

For most purposes the (Ptr () -> IO b) approach is probably neater, 
though. After all if you do need direct access to a Ptr, it's probably 
because you're calling another FFI funciton on it (in my case, 
texImage2d), which will itself "take a copy" of the memory, and then 
it's safe to destroy.

So in my example withImageData (\d -> texImage2d d ...) would seem like 
a pretty elegant answer.

> 
>> Is there a workaround I can use in my code like touchPtr? A version of 
>> touchPtr which works on WXObjects?
> 
> Well, I added image `seq` return () to your demonstrator.  Not sure if
> that really does what we want.  I suppose we could augment the
> PixelBuffer type to include a pointer to the original image.

I think that makes it safe as long as PixelBuffer is considered opaque.

But as soon as you provide a way of extracting the Ptr () from the Pixel 
Buffer, then the same problem comes back to bite you.

As it happens, in my particular program, I don't use the Ptr directly 
because I need to pad to even width anyway, in general. So I was using 
imageGetPixels and thus would be safe under that scheme.

Jules


-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2008.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
wxhaskell-users mailing list
wxhaskell-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/wxhaskell-users

Reply via email to