Re: gir and refcounting

2015-01-02 Thread Gergely Polonkai
My first thought is that Perl and Glib::Object::Introspection is just fine.
If I were you, I would further debug my own application, with something
like refdbg (http://refdbg.sourceforge.net/ despite the looks, it still
works nowadays) or GObject-list (https://github.com/danni/gobject-list
haven’t tried it myself, but it got pretty good feedback).

Best,
Gergely

On 2 January 2015 at 12:24, Wouter Verhelst  wrote:

> Hi,
>
> After help on this list, I got my API documentation to work properly,
> and have since added GObject-Introspection annotations so that I could
> use it from perl.
>
> When running the following script:
>
> ---
> use Glib::Object::Introspection;
>
> Glib::Object::Introspection->setup(
> basename => "Joy",
> version => "1.0",
> package => "Joy");
>
> my $stick = Joy::Stick->open("/dev/input/js0");
> if(!$stick->get("open")) {
> print("Joystick could not be opened.\n");
> exit 0;
> }
> print "Joystick " . $stick->describe() . " has " .
> $stick->get_button_count() . " buttons and " . $stick->get_axis_count() . "
> axes\n";
> ---
>
> then the output is:
>
> Joystick Logitech Inc. WingMan Gamepad Extreme has 10 buttons and 4 axes
> GLib-GObject-CRITICAL **: g_object_get_qdata: assertion 'G_IS_OBJECT
> (object)' failed during global destruction.
> GLib-GObject-CRITICAL **: g_object_steal_qdata: assertion 'G_IS_OBJECT
> (object)' failed during global destruction.
> GLib-GObject-CRITICAL **: g_object_unref: assertion 'G_IS_OBJECT (object)'
> failed during global destruction.
>
> (or, when no joystick is present:)
>
> Joystick could not be opened.
> GLib-GObject-CRITICAL **: g_object_get_qdata: assertion 'G_IS_OBJECT
> (object)' failed during global destruction.
> GLib-GObject-CRITICAL **: g_object_steal_qdata: assertion 'G_IS_OBJECT
> (object)' failed during global destruction.
> GLib-GObject-CRITICAL **: g_object_unref: assertion 'G_IS_OBJECT (object)'
> failed during global destruction.
>
> This occurs because somehow, perl seems to have a higher reference count
> than does glib, causing it to deref the object when it's already been
> destroyed. I've been trying to figure out what the problem is, but so
> far without luck.
>
> Anyone know what's happening?
>
> Code is at https://github.com/yoe/libjoy
>
> Thanks,
>
> --
> It is easy to love a country that is famous for chocolate and beer
>
>   -- Barack Obama, speaking in Brussels, Belgium, 2014-03-26
> ___
> gtk-app-devel-list mailing list
> gtk-app-devel-list@gnome.org
> https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list
>
___
gtk-app-devel-list mailing list
gtk-app-devel-list@gnome.org
https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list

gir and refcounting

2015-01-02 Thread Wouter Verhelst
Hi,

After help on this list, I got my API documentation to work properly,
and have since added GObject-Introspection annotations so that I could
use it from perl.

When running the following script:

---
use Glib::Object::Introspection;

Glib::Object::Introspection->setup(
basename => "Joy",
version => "1.0",
package => "Joy");

my $stick = Joy::Stick->open("/dev/input/js0");
if(!$stick->get("open")) {
print("Joystick could not be opened.\n");
exit 0;
}
print "Joystick " . $stick->describe() . " has " .  $stick->get_button_count() 
. " buttons and " . $stick->get_axis_count() . " axes\n";
---

then the output is:

Joystick Logitech Inc. WingMan Gamepad Extreme has 10 buttons and 4 axes
GLib-GObject-CRITICAL **: g_object_get_qdata: assertion 'G_IS_OBJECT (object)' 
failed during global destruction.
GLib-GObject-CRITICAL **: g_object_steal_qdata: assertion 'G_IS_OBJECT 
(object)' failed during global destruction.
GLib-GObject-CRITICAL **: g_object_unref: assertion 'G_IS_OBJECT (object)' 
failed during global destruction.

(or, when no joystick is present:)

Joystick could not be opened.
GLib-GObject-CRITICAL **: g_object_get_qdata: assertion 'G_IS_OBJECT (object)' 
failed during global destruction.
GLib-GObject-CRITICAL **: g_object_steal_qdata: assertion 'G_IS_OBJECT 
(object)' failed during global destruction.
GLib-GObject-CRITICAL **: g_object_unref: assertion 'G_IS_OBJECT (object)' 
failed during global destruction.

This occurs because somehow, perl seems to have a higher reference count
than does glib, causing it to deref the object when it's already been
destroyed. I've been trying to figure out what the problem is, but so
far without luck.

Anyone know what's happening?

Code is at https://github.com/yoe/libjoy

Thanks,

-- 
It is easy to love a country that is famous for chocolate and beer

  -- Barack Obama, speaking in Brussels, Belgium, 2014-03-26
___
gtk-app-devel-list mailing list
gtk-app-devel-list@gnome.org
https://mail.gnome.org/mailman/listinfo/gtk-app-devel-list