[plt-scheme] PLT Scheme v370

From: Eli Barzilay (eli at barzilay.org)
Date: Fri May 25 04:25:36 EDT 2007

On May 25, Hans Oesterholt-Dijkema wrote:
> 
> > In general, you should be careful with any C code that may keep a
> > reference to something.  For example -- say that you allocate pull a C
> > string out of a Scheme bytes object, and pass the pointer to a C
> > function.  As long as the call is active, no GC will happen and things
> > are fine -- but if the C code will keep a reference to that string and
> > then return, then at some point in the future, the string may have
> > been moved.
> >   
> Do you mean something like this?:
> 
> 
> static char *global_pointer[10];
> 
> void f(Scheme_Object *o)
> {
>   char *s=SCHEME_STR_VAL(o);
>   global_pointer[0]=s;
>   ...
> }

Not when it's *your* code, since mzc will add the annotations that
will treat your globals as pointers to move too.


> void g(Scheme_Object *o)
> {
>   char *s=SCHEME_STR_VAL(o);
>   global_pointer[0]=s*+10*;
>   ...
> }

BTW, I don't know what `s*+10*' is trying to achieve, but also note
that 3m does not like pointers into the middle of allocated objects.

-- 
          ((lambda (x) (x x)) (lambda (x) (x x)))          Eli Barzilay:
                  http://www.barzilay.org/                 Maze is Life!


Posted on the users mailing list.