[Fwd: Memory corruption issues when using newAlignedPinnedByteArray, GC kicking in?]

Nicolas Trangez nicolas at incubaid.com
Wed Jul 11 16:00:31 CEST 2012


On Wed, 2012-07-11 at 09:50 +0100, Simon Marlow wrote:
> On 10/07/2012 23:03, Nicolas Trangez wrote:
> > All,
> >
> > I sent this mail to Haskell Cafe earlier today, and was pointed [1] at
> > this list. As such...
> >
> > Any help/advice would be greatly appreciated!
> 
> It looks like you're making a ForeignPtr from the Addr# or Ptr that 
> points to the contents of the ByteArray#.  Since this ForeignPtr doesn't 
> keep the original ByteArray# alive, the GC will collect it.  You need to 
> keep a reference to the ByteArray# too.

Even though I suspected this and it's blatantly obvious, I failed to
recognize the ForeignPtr as returned by mallocPlainForeignPtrBytes keeps
the reference. Stupid me. Thanks.

> Basically you need a version of mallocForeignPtrBytes that has supports 
> alignment.  Unfortunately it's not possible to write one because the 
> internals of ForeignPtrContents are not exported - we had a recent 
> ticket about that (http://hackage.haskell.org/trac/ghc/ticket/7012) and 
> in 7.6.1 we will export the necessary internals.  If you want we could 
> also add mallocForeignPtrAlignedBytes - please send a patch.

http://hackage.haskell.org/trac/ghc/ticket/7067

Thanks,

Nicolas




More information about the Glasgow-haskell-users mailing list