Hello Evan and Thomas,

Thank you for your suggestions, I decided to go for `CHICKEN_new_gc_root` and 
it works like I hoped.

I was the lookup-table before but found it to be too unwieldy in my project.

Thanks again,
Pluijzer 

On Mon, 16 Dec 2013 13:28:27 +1300
Evan Hanson <[email protected]> wrote:

> Hi Pluijzer,
> 
> On 16/12/13 12:59, pluijzer wrote:
> > I am using a C-library that lets you assign user data to objects via a
> > void pointer. I would like to assign a scheme object to this pointer,
> > but as I understand I cannot use 'object->pointer' for this, as the
> > garbage collector might move the object.
> 
> There are a couple of ways to do this.
> 
> One is to manually move the object into static memory, via
> `object-evict` (http://api.call-cc.org/doc/lolevel#def:object-evict).
> This is nice and easy, but might not work as expected for all data
> types.
> 
> Another is to create a new GC root for the object, via
> `CHICKEN_new_gc_root` and its associated procedures
> (http://api.call-cc.org/doc/foreign/embedding#sec:CHICKEN_new_gc_root).
> 
> You might also sidestep the issue entirely by keeping your objects in a
> Scheme-side lookup table and only storing immediate values in the
> pointer that you can then use to retrieve the objects as needed.
> 
> Other folks may chime in with more ideas, but I hope these help some.
> 
> Cheers,
> 
> Evan
> 
> _______________________________________________
> Chicken-users mailing list
> [email protected]
> https://lists.nongnu.org/mailman/listinfo/chicken-users


-- 
pluijzer <[email protected]>

_______________________________________________
Chicken-users mailing list
[email protected]
https://lists.nongnu.org/mailman/listinfo/chicken-users

Reply via email to