At Mon, 16 Jul 2012 15:48:42 +0100, Tim Brown wrote: > I posted this on IRC earlier today with no response: > "With ffi, i have a function which returns a pointer which has been > malloc'd using a GC_malloc (linked with my foreign library). > > "I need this pointer to remain visible within racket (i.e. on the stack > or anywhere else that the CGC would find it). This is fine for > racketcgc (since GC_malloc is shared between my library and racket) > but how do i keep a pointer visible with racket3m? > > "[if possible, without "remembering" it explicitly in my library]" > > Does anyone have any idea how to hint to the FFI that I want this reference > kept visible?
Looking again, I think I didn't understand the question. I think you're saying that you always call the Boehm GC's GC_malloc(); that happens to be the same as Racket's GC_malloc() with CGC, but it's not the same in 3m. In the latter case, memory allocated with GC_malloc() is not managed by Racket's GC, and so `_gcpointer' doesn't help. If that's right, then this doesn't seem like a FFI question so much as a Boehm GC question: how do you tell the Boehm GC that a pointer is still live, even if it's otherwise invisible? I think the answer is that you have to allocate immobile memory to hold the pointer, and then use GC_add_roots() to register the pointer-holding memory. ____________________ Racket Users list: http://lists.racket-lang.org/users

