[cffi-devel] Type Translators and Callbacks

Luís Oliveira luismbo at gmail.com
Tue Nov 15 15:17:48 UTC 2005


On 2005-nov-15, at 06:28, James Bielman wrote:
> As Luis's comment in the C code portion of the callback tests  
> indicates,
> C code that calls this callback has no reliable way to deallocate the
> memory allocated implicitly by the type translator.  The only way to
> deallocate it is from Lisp via FOREIGN-STRING-FREE.
>
> I think this is probably not too bad if we document it very clearly,
> but it worries me.  Making type translators not apply to the return
> value of callbacks would remove the possibility for a non-obvious  
> memory
> leak here.

> Another option might be a :malloced-string type with a :TO-C  
> translator
> that explicitly malloc's the buffer---or just specify that
> FOREIGN-STRING-ALLOC always uses malloc, I suppose.  Obviously that
> wouldn't apply to possibly stack-allocated strings allocated by
> WITH-FOREIGN-STRING...

Or we could define yet another kind of translator, say :CALLBACK-TO- 
C, that would normally inherit from :TO-C and that in :string's case  
would use malloc. (hmm, this gives me some ideas on how to rewrite  
the type system.)

I think that WITH-FOREIGN-STRING, WITH-FOREIGN-OBJECT and WITH- 
FOREIGN-PTR should take a :MALLOC option, as should FOREIGN-ALLOC,  
etc... I have thought about this before, probably because CLISP does  
this IIRC.

Also, the same applies to foreign variables.

-- 
Luís Oliveira
http://student.dei.uc.pt/~lmoliv/
Equipa Portuguesa do Translation Project
http://www.iro.umontreal.ca/translation/registry.cgi?team=pt




More information about the cffi-devel mailing list