This is an automated email from the git hooks/post-receive script.

intrigeri pushed a commit to branch experimental
in repository libglib-object-introspection-perl.

commit 73db18dacf633daaf0d0963485db4442f56f057f
Author: Torsten Schönfeld <kaffeeti...@gmx.de>
Date:   Sun Jan 18 19:47:00 2015 +0100

    Add a FIXME comment about a corner case of the GInitiallyUnowned handling
---
 gperl-i11n-invoke-c.c | 19 ++++++++++++++++++-
 1 file changed, 18 insertions(+), 1 deletion(-)

diff --git a/gperl-i11n-invoke-c.c b/gperl-i11n-invoke-c.c
index 54ee3e7..80ac875 100644
--- a/gperl-i11n-invoke-c.c
+++ b/gperl-i11n-invoke-c.c
@@ -438,7 +438,24 @@ _prepare_c_invocation_info (GPerlI11nCInvocationInfo 
*iinfo,
 
        /* We need to undo the special handling that GInitiallyUnowned
         * descendants receive from gobject-introspection: values of this type
-        * are always marked transfer=none, even for constructors. */
+        * are always marked transfer=none, even for constructors.
+        *
+        * FIXME: This is not correct for GtkWindow and its descendants, as
+        * gtk+ keeps an internal reference to each window.  Hence,
+        * constructors like gtk_window_new return a non-floating object and do
+        * not pass ownership of a reference on to us.  But the sink func
+        * currently registered for GInitiallyUnowned (sink_initially_unowned
+        * in GObject.xs in Glib) is actually inadvertently conforming to this
+        * requirement.  It runs ref_sink+unref regardless of whether the
+        * object is floating or not.  So, in the non-floating window case, it
+        * does nothing, resulting in an extra reference taken, despite the
+        * request to transfer ownership.
+        *
+        * If we ever encounter a constructor of a GInitiallyUnowned descendant
+        * that returns a non-floating object and passes ownership of a
+        * reference on to us, or a constructor of a GInitiallyUnowned
+        * descendant that returns a floating object but passes no reference on
+        * to us, then we need to revisit this. */
        if (iinfo->is_constructor &&
            g_type_info_get_tag (iinfo->base.return_type_info) == 
GI_TYPE_TAG_INTERFACE)
        {

-- 
Alioth's /usr/local/bin/git-commit-notice on 
/srv/git.debian.org/git/pkg-perl/packages/libglib-object-introspection-perl.git

_______________________________________________
Pkg-perl-cvs-commits mailing list
Pkg-perl-cvs-commits@lists.alioth.debian.org
http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/pkg-perl-cvs-commits

Reply via email to