
Excerpts from Evan Laforge's message of Mon Jul 12 16:23:39 -0400 2010:
Well, what I'm worried about is that withForeignPtr says you should only use the pointer from inside it. The situation here is that I've passed a pointer to C. C wants to share ownership of the pointer, so even if all haskell references are gone, it needs to stay alive until C says so. So there's nothing to pass to withForeignPtr. C uses a ptr, not a foreign ptr.
Ah, I see your problem. Normally, pointers that end up getting freed in C have no business being in a foreign pointer, but StorableVector only generates foreign pointers. The easiest thing to do is copy the contents to a regular area of memory not managed by a Storable Vector. This'll be much less painful because it's just a normal free (not a recursive one, which can get hairy). Cheers, Edward