[pulseaudio-discuss] [Vala] Issues will vala and pulse vapi
Evan Nemerson
evan at coeus-group.com
Sat Nov 21 21:07:31 PST 2015
On Sat, 2015-11-21 at 22:45 -0600, Aaron Paden wrote:
> On Sat, Nov 21, 2015 at 9:54 PM, Evan Nemerson <evan at coeus-group.com>
> wrote:
> >
> > That's not quite right; the VAPI shouldn't indicate that a *type*
> > is
> > "unmanaged"… it's up to your code to indicate whether an instance
> > is
> > unowned. However, the question is really what the proper way to
> > destroy an instance is.
> >
> > In order to determine how to destroy a struct which doesn't specify
> > a
> > destroy_function CCode attribute, Vala will look at the
> > members. If
> > none of the members require destroy or free functions, then Vala
> > can
> > assume that simply releasing the memory associated with the struct
> > itself (i.e., calling g_free on heap-allocated instances, or simply
> > allowing stack-allocated instances to go out of scope) is
> > sufficient.
>
> Hum. Sourceinfo (and SinkInfo) should not be freed at all, the C APIs
> that retrieve them give you const pointers.
Then they should return an unowned reference. Note, however, that if
you assign an unowned reference to an owned value, Vala will create a
copy. For example, consider
unowned string foo = "foo";
string bar = "bar";
...
Discounting things like tmp variables, you'll end up with something
like this in C:
char* foo = "foo";
char* bar = g_strdup ("bar");
...
g_free (bar);
With structs the same thing is happening, it's just a bit more
difficult to wrap your head around.
Remember that the C APIs aren't the only way to get a SourceInfo
instance. You could easily create one yourself.
-Evan
More information about the pulseaudio-discuss
mailing list