[pulseaudio-discuss] Is this a Pulseaudio bug or a Vala bug? (v2)
Sean McNamara
smcnam at gmail.com
Wed Mar 30 10:44:05 PDT 2011
Hi again Alexander,
On Wed, Mar 30, 2011 at 1:12 PM, Alexander Kurtz
<kurtz.alex at googlemail.com> wrote:
> Hi,
>
> I've got another problem with Vala and Pulseaudio's official Vala bindings.
>
> This is my source code:
>
> $ cat test.vala
> class MyClass : Object {
> PulseAudio.ChannelMap map;
> static void main(){
> }
> }
> $
>
> Compiling it fails:
>
> $ valac --pkg=libpulse --vapidir=. test.vala
> test.vala:2.2-2.26: warning: field `MyClass.map' never used
> PulseAudio.ChannelMap map;
> ^^^^^^^^^^^^^^^^^^^^^^^^^
> /tmp/ccCFqscK.o: In function `myclass_finalize':
> test.vala.c:(.text+0x152): undefined reference to `pulse_audio_channel_map_destroy'
> collect2: ld returned 1 exit status
> error: cc exited with status 256
> Compilation failed: 1 error(s), 1 warning(s)
> $
>
> I thought this was a bug in Vala, since valac accepted the code but gcc
> threw an error. I reported this to the Debian BTS[1] and was told that
> this is a bug in the bindings which I doubt[3].
>
> Can anybody confirm (or deny) that this is *not* a Pulseaudio bug?
FYI, this page is an absolute lifesaver:
http://live.gnome.org/Vala/Manual/Attributes#CCode_Attribute
With the attached patch, I get:
$ valac --pkg=libpulse --vapidir=/usr/share/vala-0.12/vapi test2.vala
test2.vala:2.16-2.40: warning: field `MyClass.map' never used
PulseAudio.ChannelMap map;
^^^^^^^^^^^^^^^^^^^^^^^^^
Compilation succeeded - 1 warning(s)
The result is that the struct is created with _init() using memory you
already allocated (on the stack, or on the heap) and then you are
responsible for calling pa_xfree() later to free it if it's allocated
on the heap. This is how most structs work in my experience (except
for GObjects).
As to your bugs in [3] (from your message):
> (1) valac doesn't fail if you try to put a dynamically-sized array
> into a struct
Probably a bug, yes.
> (2) valac doesn't allow adding a destructor function to a struct
Not sure that this is a bug. The destructor syntax in Vala more or
less assumes that you are working with an (instance of a) class
inheriting from GObject (the `Object' class in Vala), which structs
cannot possibly be. The attribute hack isn't nearly as pretty, but eh,
bindings are write-once use-everywhere, and bindings in other
languages are much nastier (cf. native code written to generate Python
bindings to C, etc.)
> (3) valac doesn't allow making fixed-sized arrays from constants.
> This is absolutely necessary since there are no preprocessor
> directives in vala and most C libraries define symbolic names
> for these things.
If this is true, it sounds like a bug. A trivial test program not
involving the vapi cruft would be nice.
> (4) valac doesn't handle fixed-size arrays correctly, as it still
> thinks they need to freed after use.
Sounds ugly, but I haven't confirmed it myself. A trivial test program
not involving the vapi cruft would be nice.
HTH,
Sean
>
> Best regards
>
> Alexander Kurtz
>
> [1] http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=619345
> [2] http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=619345#10
> [3] http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=619345#15
>
> _______________________________________________
> pulseaudio-discuss mailing list
> pulseaudio-discuss at mail.0pointer.de
> https://tango.0pointer.de/mailman/listinfo/pulseaudio-discuss
>
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-vala-ChannelMap-has-no-destroy-function.patch
Type: text/x-patch
Size: 792 bytes
Desc: not available
URL: <http://lists.freedesktop.org/archives/pulseaudio-discuss/attachments/20110330/e5748289/attachment.bin>
More information about the pulseaudio-discuss
mailing list