[racket] ffi, unioun, string: is this correct?

From: Matthew Flatt (mflatt at cs.utah.edu)
Date: Sun Sep 1 13:10:38 EDT 2013

You're right --- the string can be GC'ed at any time.

There are a few ways to solve the problem:

 * Allocate `giarg' with `(malloc 'nonatomic ...)` and never install a
   non-pointer value into it.

 * Allocate the string's memory with `(malloc 'atomic-interior ...)`
   and arrange for that memory to be referenced from some GC-visible
   place for as long as it can be referenced by `giarg`.

 * Allocate the string's memory with `(malloc 'raw ...)` and explicitly
   `free` it when `giarg` is no longer used.

At Sun, 01 Sep 2013 17:38:26 +0400, Roman Klochkov wrote:
>  (define _giarg (_union _bool _int8 _uint8 _int16 _uint16
>                        _int32 _uint32 _int64 _uint64
>                        _float _double _long _ulong _pointer _string))
> 
> (define giarg (malloc _giarg)) (ptr-set! giarg _string "Test string")
> 
> ---
> 
> It works. But I'm afraid, that string maybe allocated temporary and will be 
> GC'ed at any time. Or _union keep _string pointer inside?



Posted on the users mailing list.