Yes, but it is much cleaner and nicer to express it as an interface than a 
bunch of ccode attributes.

And not all structs of the same type are allocated by the same subsystem or 
want freeing with the same free function.

Sam

Sam

-----Original Message-----
From: Arc Riley <[email protected]>
Sent: 24 June 2009 07:23
To: vala-list <[email protected]>
Subject: Re: [Vala] malloc/free CCode attributes

I may not be understanding you correctly, but an interface is a gobject 
mechanic.  This is intended as a quick and simple mechanism for non-gobject 
library bindings.

Free shouldn't actually be needed, since that's handled by the specified 
unref_function, but something as simple as:

  [Compact]
  [CCode (lower_case_cprefix = "PyObject_",
          ref_function = "Py_IncRef",
          ref_function_void = true,
          unref_function = "Py_DecRef",
          new_function = "PyObject_Malloc")]
  public class Object {

Like ref_function and unref_function, it's just a drop-in replacement for the 
memory allocation function Vala would otherwise use which doesn't work with 
some bindings as they use their own internal memory management.


On Thu, Jun 18, 2009 at 4:03 AM, Sam Liddicott <[email protected]> wrote:
I've given this a lot of thought.

 Here's some ideas:

 A memory management interface which implements these. A class implements the 
interface with it's own specific management.

 This would be better done by late binding, the microsoft way, where the object 
supports IInterface so it can be queried for a complete memory management 
interface.

 As this isn't likely to be magically compatible with what we have now; I have 
another solution; based on a tree of memory allocation pools.

 Any allocation of memory (or super allocation) is registered with the memory 
pool library. It is then possible to call find_allocation(void* ptr) and be 
returned the management interface for that pointer.

 It may be easier if a library will mmap memory it allocates, it become a 
matter of checking which range of mmap'd memory the pointer lies between.

 Thus it will be easy to get the memory management interface associated with a 
pointer.

 Sam

_______________________________________________
Vala-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/vala-list

Reply via email to