Hello community,

here is the log from the commit of package python-gobject for openSUSE:Factory 
checked in at 2013-06-28 18:56:54
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-gobject (Old)
 and      /work/SRC/openSUSE:Factory/.python-gobject.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-gobject"

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-gobject/python-gobject.changes    
2013-06-05 13:08:31.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.python-gobject.new/python-gobject.changes       
2013-06-28 18:56:55.000000000 +0200
@@ -1,0 +2,16 @@
+Tue May 28 19:55:29 UTC 2013 - [email protected]
+
+- Update to version 3.9.2:
+  + examples/option.py: Port to GI and Python 3.
+  + Fix vfunc info search for classes with multiple inheritance
+    (bgo#700092).
+  + Fix closure argument conversion for enum and flag in args.
+  + Fix marshaling Python to FFI return value for enum and flags.
+  + Remove half implemented GC in PyGIBaseInfo, PyGIStruct, and
+    PyGIBoxed (bgo#677091).
+  + Replace usage of pyg_begin_allow_threads with
+    Py_BEGIN_ALLOW_THREADS (bgo#699440).
+  + Remove and deprecate API for setting of thread blocking
+    functions (bgo#699440).
+
+-------------------------------------------------------------------
python3-gobject.changes: same change

Old:
----
  pygobject-3.9.1.tar.xz

New:
----
  pygobject-3.9.2.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-gobject.spec ++++++
--- /var/tmp/diff_new_pack.iQZ8da/_old  2013-06-28 18:56:56.000000000 +0200
+++ /var/tmp/diff_new_pack.iQZ8da/_new  2013-06-28 18:56:56.000000000 +0200
@@ -37,7 +37,7 @@
 Summary:        Python bindings for GObject
 License:        LGPL-2.1+
 Group:          Development/Libraries/Python
-Version:        3.9.1
+Version:        3.9.2
 Release:        0
 Url:            http://ftp.gnome.org/pub/GNOME/sources/pygobject/
 Source:         
http://download.gnome.org/sources/pygobject/3.9/%{_name}-%{version}.tar.xz

python3-gobject.spec: same change
++++++ pygobject-3.9.1.tar.xz -> pygobject-3.9.2.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pygobject-3.9.1/ChangeLog 
new/pygobject-3.9.2/ChangeLog
--- old/pygobject-3.9.1/ChangeLog       2013-04-30 20:49:31.000000000 +0200
+++ new/pygobject-3.9.2/ChangeLog       2013-05-28 17:54:49.000000000 +0200
@@ -1,3 +1,141 @@
+commit af8d048442b924c72a1d0ae868ee63ccf292759d
+Author: Martin Pitt <[email protected]>
+Date:   Fri May 24 13:03:07 2013 +0200
+
+    examples/option.py: Port to GI and Python 3
+
+ examples/option.py | 38 +++++++++++++++++++-------------------
+ 1 file changed, 19 insertions(+), 19 deletions(-)
+
+commit bef5939ca77f4d6939cd9229bd124dfe825b3bdb
+Author: Simon Feltman <[email protected]>
+Date:   Sun May 12 18:58:06 2013 -0700
+
+    Fix vfunc info search for classes with multiple inheritance
+
+    Ensure the search for vfunc GI info continues recursively even if the
+    current class being looked at does not contain GI info of type
+    InterfaceInfo. This more exhaustive search is needed for setups with
+    multiple sub-classes and multiple inheritance.
+
+    https://bugzilla.gnome.org/show_bug.cgi?id=700092
+
+ gi/types.py      | 12 +++++++-----
+ tests/test_gi.py |  1 -
+ 2 files changed, 7 insertions(+), 6 deletions(-)
+
+commit 5b8dff59baa1a3e524dac7877dd5b33dea52b026
+Author: Simon Feltman <[email protected]>
+Date:   Sun May 12 22:19:38 2013 -0700
+
+    Fix closure argument conversion for enum and flag in args
+
+    Replace incorrect cast and assignment of double with uint for flags
+    and enums.
+
+ gi/pygi-closure.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+commit 065503d5e284dc89bacd79d0d9a72eb739882bf8
+Author: Simon Feltman <[email protected]>
+Date:   Sat May 11 21:47:54 2013 -0700
+
+    tests: Add tests for overriding vfunc implementations
+
+    Add tests for overriding vfuncs for both single inheritance
+    and multiple inheritance with an interface (currently failing).
+
+    https://bugzilla.gnome.org/show_bug.cgi?id=700092
+
+ tests/test_gi.py | 23 +++++++++++++++++++++++
+ 1 file changed, 23 insertions(+)
+
+commit c4e1112840004af264b4f2a052f333ea38f95cb6
+Author: Simon Feltman <[email protected]>
+Date:   Sat May 11 20:28:22 2013 -0700
+
+    Fix marshaling Python to FFI return value for enum and flags
+
+    Add break to GI_TYPE_TAG_INTERFACE case. This was falling through
+    causing
+    assignment of arg.v_pointer to the ffi return arg.
+
+ gi/pygi-closure.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+commit a703217eaf4075e9720d4247351e1dfc4f553772
+Author: Simon Feltman <[email protected]>
+Date:   Fri Apr 19 06:37:24 2013 -0700
+
+    Remove half implemented GC in PyGIBaseInfo, PyGIStruct, and PyGIBoxed
+
+    Remove half implemented GC tracking from PyGIBaseInfo as it was not
+    needed (the implemented was also missing usage of
+    PyObject_GC_New/Track).
+    Ensure weakref list for PyGIBaseInfo is initialized to NULL and
+    cleared
+    properly.
+    Remove invalid calls to PyObject_GC_UnTrack and PyObject_ClearWeakRefs
+    for both PyGIStruct and PyGIBoxed as these types were not being
+    advertised as GC aware with Py_TPFLAGS_HAVE_GC.
+
+    https://bugzilla.gnome.org/show_bug.cgi?id=677091
+
+ gi/pygi-boxed.c  |  4 ----
+ gi/pygi-info.c   | 20 +++++---------------
+ gi/pygi-struct.c |  4 ----
+ 3 files changed, 5 insertions(+), 23 deletions(-)
+
+commit 87e41db2e060acd689a2ac043bc1ac51007de6f3
+Author: Simon Feltman <[email protected]>
+Date:   Fri May 3 02:00:07 2013 -0700
+
+    Replace usage of pyg_begin_allow_threads with Py_BEGIN_ALLOW_THREADS
+
+    Replace all usage of pyg[lib]_begin_allow_threads with direct usage
+    of Py_BEGIN_ALLOW_THREADS.
+
+    https://bugzilla.gnome.org/show_bug.cgi?id=699440
+
+ gi/_glib/pyglib.h           |  4 ----
+ gi/_glib/pygoptioncontext.c |  4 ++--
+ gi/_gobject/pygobject.c     | 33 ++++++++++++++++-----------------
+ gi/gimodule.c               |  4 ++--
+ gi/pygi-invoke.c            |  4 ++--
+ 5 files changed, 22 insertions(+), 27 deletions(-)
+
+commit c9e95663d05de98a9abd3d1479554b1f09753382
+Author: Simon Feltman <[email protected]>
+Date:   Thu May 2 03:57:05 2013 -0700
+
+    Remove and deprecate API for setting of thread blocking functions
+
+    Remove pyglib_set_thread_block_funcs and deprecate
+    pyg_set_thread_block_funcs.
+    The thread block function APIs are no longer be neccessary because
+    PyGObject
+    can use the Python C API directly when working with threads.
+
+    https://bugzilla.gnome.org/show_bug.cgi?id=699440
+
+ gi/_glib/pyglib.c               | 41 -----------------------------------
+ gi/_glib/pyglib.h               |  9 ++++----
+ gi/_gobject/gobjectmodule.c     | 25 ++++++++-------------
+ gi/_gobject/pygobject-private.h | 33 ----------------------------
+ gi/_gobject/pygobject.h         | 48
+ ++++++++++++++++++++---------------------
+ gi/gimodule.c                   | 15 +++++++------
+ 6 files changed, 46 insertions(+), 125 deletions(-)
+
+commit 05498a5732582a5ed1944bd1383af154ca5fc4e6
+Author: Martin Pitt <[email protected]>
+Date:   Tue Apr 30 11:51:05 2013 -0700
+
+    configure.ac: Post-release bump to 3.9.2
+
+ configure.ac | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
 commit 902bb6685fd9c90c7d81127861a152b0fab4b107
 Author: Martin Pitt <[email protected]>
 Date:   Tue Apr 30 11:49:03 2013 -0700
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pygobject-3.9.1/NEWS new/pygobject-3.9.2/NEWS
--- old/pygobject-3.9.1/NEWS    2013-04-30 20:48:10.000000000 +0200
+++ new/pygobject-3.9.2/NEWS    2013-05-28 17:54:12.000000000 +0200
@@ -1,3 +1,18 @@
+3.9.2   28-May-2013
+       - examples/option.py: Port to GI and Python 3 (Martin Pitt)
+        - Fix vfunc info search for classes with multiple inheritance
+         (Simon Feltman) (#700092)
+        - Fix closure argument conversion for enum and flag in args
+         (Simon Feltman)
+        - Fix marshaling Python to FFI return value for enum and flags
+         (Simon Feltman)
+       - Remove half implemented GC in PyGIBaseInfo, PyGIStruct, and PyGIBoxed
+         (Simon Feltman) (#677091)
+       - Replace usage of pyg_begin_allow_threads with Py_BEGIN_ALLOW_THREADS
+         (Simon Feltman) (#699440)
+       - Remove and deprecate API for setting of thread blocking functions
+         (Simon Feltman) (#699440)
+
 3.9.1   30-Apr-2013
        - gtk-demo: Wrap description strings at 80 characters (Simon Feltman)
          (#698547)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pygobject-3.9.1/PKG-INFO new/pygobject-3.9.2/PKG-INFO
--- old/pygobject-3.9.1/PKG-INFO        2013-04-30 20:41:57.000000000 +0200
+++ new/pygobject-3.9.2/PKG-INFO        2013-05-15 08:00:52.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 1.0
 Name: PyGObject
-Version: 3.9.1
+Version: 3.9.2
 Summary: Python bindings for GObject
 Home-page: http://www.pygtk.org/
 Author: James Henstridge
@@ -8,7 +8,7 @@
 Maintainer: Johan Dahlin
 Maintainer-email: [email protected]
 License: GNU LGPL
-Download-url: 
ftp://ftp.gnome.org/pub/GNOME/sources/pygobject/3.9/pygobject-3.9.1.tar.gz
+Download-url: 
ftp://ftp.gnome.org/pub/GNOME/sources/pygobject/3.9/pygobject-3.9.2.tar.gz
 Description: Python bindings for GLib and GObject
 Platform: POSIX, Windows
 Classifier: Development Status :: 5 - Production/Stable
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pygobject-3.9.1/aclocal.m4 
new/pygobject-3.9.2/aclocal.m4
--- old/pygobject-3.9.1/aclocal.m4      2013-04-30 20:41:47.000000000 +0200
+++ new/pygobject-3.9.2/aclocal.m4      2013-05-15 08:00:38.000000000 +0200
@@ -1780,7 +1780,7 @@
 
 # Use recursive makes in order to ignore errors during check
 check-code-coverage:
-ifdef CODE_COVERAGE_ENABLED
+ifeq ($(CODE_COVERAGE_ENABLED),yes)
        -$(MAKE) $(AM_MAKEFLAGS) -k check
        $(MAKE) $(AM_MAKEFLAGS) code-coverage-capture
 else
@@ -1789,7 +1789,7 @@
 
 # Capture code coverage data
 code-coverage-capture: code-coverage-capture-hook
-ifdef CODE_COVERAGE_ENABLED
+ifeq ($(CODE_COVERAGE_ENABLED),yes)
        $(LCOV) $(code_coverage_quiet) --directory $(CODE_COVERAGE_DIRECTORY) 
--capture --output-file "$(CODE_COVERAGE_OUTPUT_FILE).tmp" --test-name 
"$(PACKAGE_NAME)-$(PACKAGE_VERSION)" --no-checksum --compat-libtool 
$(CODE_COVERAGE_LCOV_OPTIONS)
        $(LCOV) $(code_coverage_quiet) --directory $(CODE_COVERAGE_DIRECTORY) 
--remove "$(CODE_COVERAGE_OUTPUT_FILE).tmp" "/tmp/*" 
$(CODE_COVERAGE_IGNORE_PATTERN) --output-file "$(CODE_COVERAGE_OUTPUT_FILE)"
        -@rm -f $(CODE_COVERAGE_OUTPUT_FILE).tmp
@@ -1802,11 +1802,13 @@
 # Hook rule executed before code-coverage-capture, overridable by the user
 code-coverage-capture-hook:
 
+ifeq ($(CODE_COVERAGE_ENABLED),yes)
 clean: code-coverage-clean
 code-coverage-clean:
        -$(LCOV) --directory $(top_builddir) -z
        -rm -rf $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_FILE).tmp 
$(CODE_COVERAGE_OUTPUT_DIRECTORY)
        -find . -name "*.gcda" -o -name "*.gcov" -delete
+endif
 
 GITIGNOREFILES ?=
 GITIGNOREFILES += $(CODE_COVERAGE_OUTPUT_FILE) 
$(CODE_COVERAGE_OUTPUT_DIRECTORY)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pygobject-3.9.1/configure 
new/pygobject-3.9.2/configure
--- old/pygobject-3.9.1/configure       2013-04-30 20:41:48.000000000 +0200
+++ new/pygobject-3.9.2/configure       2013-05-15 08:00:39.000000000 +0200
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for pygobject 3.9.1.
+# Generated by GNU Autoconf 2.69 for pygobject 3.9.2.
 #
 # Report bugs to <http://bugzilla.gnome.org/enter_bug.cgi?product=pygobject>.
 #
@@ -591,8 +591,8 @@
 # Identity of this package.
 PACKAGE_NAME='pygobject'
 PACKAGE_TARNAME='pygobject'
-PACKAGE_VERSION='3.9.1'
-PACKAGE_STRING='pygobject 3.9.1'
+PACKAGE_VERSION='3.9.2'
+PACKAGE_STRING='pygobject 3.9.2'
 PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=pygobject'
 PACKAGE_URL='https://live.gnome.org/PyGObject/'
 
@@ -1395,7 +1395,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures pygobject 3.9.1 to adapt to many kinds of systems.
+\`configure' configures pygobject 3.9.2 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1465,7 +1465,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of pygobject 3.9.1:";;
+     short | recursive ) echo "Configuration of pygobject 3.9.2:";;
    esac
   cat <<\_ACEOF
 
@@ -1600,7 +1600,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-pygobject configure 3.9.1
+pygobject configure 3.9.2
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1878,7 +1878,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by pygobject $as_me 3.9.1, which was
+It was created by pygobject $as_me 3.9.2, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -2242,9 +2242,9 @@
 PYGOBJECT_MINOR_VERSION=9
 
 
-$as_echo "#define PYGOBJECT_MICRO_VERSION 1" >>confdefs.h
+$as_echo "#define PYGOBJECT_MICRO_VERSION 2" >>confdefs.h
 
-PYGOBJECT_MICRO_VERSION=1
+PYGOBJECT_MICRO_VERSION=2
 
 
 ac_config_headers="$ac_config_headers config.h"
@@ -2755,7 +2755,7 @@
 
 # Define the identity of the package.
  PACKAGE='pygobject'
- VERSION='3.9.1'
+ VERSION='3.9.2'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -14532,7 +14532,7 @@
 
 # Use recursive makes in order to ignore errors during check
 check-code-coverage:
-ifdef CODE_COVERAGE_ENABLED
+ifeq ($(CODE_COVERAGE_ENABLED),yes)
        -$(MAKE) $(AM_MAKEFLAGS) -k check
        $(MAKE) $(AM_MAKEFLAGS) code-coverage-capture
 else
@@ -14541,7 +14541,7 @@
 
 # Capture code coverage data
 code-coverage-capture: code-coverage-capture-hook
-ifdef CODE_COVERAGE_ENABLED
+ifeq ($(CODE_COVERAGE_ENABLED),yes)
        $(LCOV) $(code_coverage_quiet) --directory $(CODE_COVERAGE_DIRECTORY) 
--capture --output-file "$(CODE_COVERAGE_OUTPUT_FILE).tmp" --test-name 
"$(PACKAGE_NAME)-$(PACKAGE_VERSION)" --no-checksum --compat-libtool 
$(CODE_COVERAGE_LCOV_OPTIONS)
        $(LCOV) $(code_coverage_quiet) --directory $(CODE_COVERAGE_DIRECTORY) 
--remove "$(CODE_COVERAGE_OUTPUT_FILE).tmp" "/tmp/*" 
$(CODE_COVERAGE_IGNORE_PATTERN) --output-file "$(CODE_COVERAGE_OUTPUT_FILE)"
        -@rm -f $(CODE_COVERAGE_OUTPUT_FILE).tmp
@@ -14554,11 +14554,13 @@
 # Hook rule executed before code-coverage-capture, overridable by the user
 code-coverage-capture-hook:
 
+ifeq ($(CODE_COVERAGE_ENABLED),yes)
 clean: code-coverage-clean
 code-coverage-clean:
        -$(LCOV) --directory $(top_builddir) -z
        -rm -rf $(CODE_COVERAGE_OUTPUT_FILE) $(CODE_COVERAGE_OUTPUT_FILE).tmp 
$(CODE_COVERAGE_OUTPUT_DIRECTORY)
        -find . -name "*.gcda" -o -name "*.gcov" -delete
+endif
 
 GITIGNOREFILES ?=
 GITIGNOREFILES += $(CODE_COVERAGE_OUTPUT_FILE) 
$(CODE_COVERAGE_OUTPUT_DIRECTORY)
@@ -15267,7 +15269,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by pygobject $as_me 3.9.1, which was
+This file was extended by pygobject $as_me 3.9.2, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -15334,7 +15336,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; 
s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-pygobject config.status 3.9.1
+pygobject config.status 3.9.2
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pygobject-3.9.1/configure.ac 
new/pygobject-3.9.2/configure.ac
--- old/pygobject-3.9.1/configure.ac    2013-04-28 15:09:22.000000000 +0200
+++ new/pygobject-3.9.2/configure.ac    2013-05-13 17:36:19.000000000 +0200
@@ -18,7 +18,7 @@
 dnl the pygobject version number
 m4_define(pygobject_major_version, 3)
 m4_define(pygobject_minor_version, 9)
-m4_define(pygobject_micro_version, 1)
+m4_define(pygobject_micro_version, 2)
 m4_define(pygobject_version, 
pygobject_major_version.pygobject_minor_version.pygobject_micro_version)
 
 dnl versions of packages we require ...
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pygobject-3.9.1/examples/option.py 
new/pygobject-3.9.2/examples/option.py
--- old/pygobject-3.9.1/examples/option.py      2013-02-19 16:01:47.000000000 
+0100
+++ new/pygobject-3.9.2/examples/option.py      2013-05-24 13:02:49.000000000 
+0200
@@ -1,28 +1,28 @@
 #!/usr/bin/env python
-# gnome-python/pygobject/examples/option.py
 
-from gobject.option import OptionGroup, OptionParser, make_option
+from gi.repository import GLib
 
-group = OptionGroup("example", "OptionGroup Example", "Shows all example 
options",
-                    option_list=[make_option("--example",
-                                             action="store_true",
-                                             dest="example",
-                                             help="An example option."),
-                                ])
-
-parser = OptionParser("NAMES ...",
-                      description="A simple gobject.option example.",
-                      option_list=[make_option("--file", "-f",
-                                               type="filename",
-                                               action="store",
-                                               dest="file",
-                                               help="A filename option"),
-                                   # ...
-                                  ])
+group = GLib.option.OptionGroup(
+    "example", "OptionGroup Example", "Shows all example options",
+    option_list=[GLib.option.make_option("--example",
+                                         action="store_true",
+                                         dest="example",
+                                         help="An example option."),
+                ])
+
+parser = GLib.option.OptionParser(
+    "NAMES ...", description="A simple gobject.option example.",
+    option_list=[GLib.option.make_option("--file", "-f",
+                                         type="filename",
+                                         action="store",
+                                         dest="file",
+                                         help="A filename option"),
+                 # ...
+                ])
 
 parser.add_option_group(group)
 
 parser.parse_args()
 
-print "group: example ", group.values.example
-print "parser: file", parser.values.file
+print("group: example " + str(group.values.example))
+print("parser: file " + str(parser.values.file))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pygobject-3.9.1/gi/_glib/pyglib.c 
new/pygobject-3.9.2/gi/_glib/pyglib.c
--- old/pygobject-3.9.1/gi/_glib/pyglib.c       2013-04-28 15:09:23.000000000 
+0200
+++ new/pygobject-3.9.2/gi/_glib/pyglib.c       2013-05-13 17:36:19.000000000 
+0200
@@ -77,47 +77,6 @@
 }
 
 /**
- * pyglib_block_threads:
- *
- */
-void
-pyglib_block_threads(void)
-{
-    g_return_if_fail (_PyGLib_API != NULL);
-
-    if (_PyGLib_API->block_threads != NULL)
-       (* _PyGLib_API->block_threads)();
-}
-
-/**
- * pyglib_unblock_threads:
- *
- */
-void
-pyglib_unblock_threads(void)
-{
-    g_return_if_fail (_PyGLib_API != NULL);
-    if (_PyGLib_API->unblock_threads != NULL)
-       (* _PyGLib_API->unblock_threads)();
-}
-
-/**
- * pyglib_set_thread_block_funcs:
- *
- * hooks to register handlers for getting GDK threads to cooperate
- * with python threading
- */
-void
-pyglib_set_thread_block_funcs (PyGLibThreadBlockFunc block_threads_func,
-                              PyGLibThreadBlockFunc unblock_threads_func)
-{
-    g_return_if_fail (_PyGLib_API != NULL);
-
-    _PyGLib_API->block_threads = block_threads_func;
-    _PyGLib_API->unblock_threads = unblock_threads_func;
-}
-
-/**
  * pyglib_error_marshal:
  * @error: a pointer to the GError.
  *
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pygobject-3.9.1/gi/_glib/pyglib.h 
new/pygobject-3.9.2/gi/_glib/pyglib.h
--- old/pygobject-3.9.1/gi/_glib/pyglib.h       2013-04-28 15:09:23.000000000 
+0200
+++ new/pygobject-3.9.2/gi/_glib/pyglib.h       2013-05-13 17:36:19.000000000 
+0200
@@ -37,24 +37,21 @@
 #ifdef DISABLE_THREADING
 #    define pyglib_gil_state_ensure()        PyGILState_LOCKED
 #    define pyglib_gil_state_release(state)  state
-#    define pyglib_begin_allow_threads       G_STMT_START {
-#    define pyglib_end_allow_threads         } G_STMT_END
 #else
 #    define pyglib_gil_state_ensure          PyGILState_Ensure
 #    define pyglib_gil_state_release         PyGILState_Release
-#    define pyglib_begin_allow_threads       Py_BEGIN_ALLOW_THREADS
-#    define pyglib_end_allow_threads         Py_END_ALLOW_THREADS
 #endif
 
+/* Deprecated, only available for API compatibility. */
+#define pyg_set_thread_block_funcs(a, b)
+#define pyglib_block_threads()
+#define pyglib_unblock_threads()
+
 gboolean pyglib_error_check(GError **error);
 PyObject *pyglib_error_marshal (GError **error);
 gboolean pyglib_gerror_exception_check(GError **error);
 PyObject *pyglib_register_exception_for_domain(gchar *name,
                                               gint error_domain);
-void pyglib_set_thread_block_funcs(PyGLibThreadBlockFunc block_threads_func,
-                                  PyGLibThreadBlockFunc unblock_threads_func);
-void pyglib_block_threads(void);
-void pyglib_unblock_threads(void);
 PyObject * pyglib_option_context_new(GOptionContext *context);
 PyObject * pyglib_option_group_new(GOptionGroup *group);
 GOptionGroup * pyglib_option_group_transfer_group(PyObject *self);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pygobject-3.9.1/gi/_glib/pygoptioncontext.c 
new/pygobject-3.9.2/gi/_glib/pygoptioncontext.c
--- old/pygobject-3.9.1/gi/_glib/pygoptioncontext.c     2013-02-19 
16:01:47.000000000 +0100
+++ new/pygobject-3.9.2/gi/_glib/pygoptioncontext.c     2013-05-13 
17:36:19.000000000 +0200
@@ -130,10 +130,10 @@
 
     g_assert(argv_length <= G_MAXINT);
     argv_length_int = argv_length;
-    pyglib_begin_allow_threads;
+    Py_BEGIN_ALLOW_THREADS;
     result = g_option_context_parse(self->context, &argv_length_int, 
&argv_content,
                                     &error);
-    pyglib_end_allow_threads;
+    Py_END_ALLOW_THREADS;
     argv_length = argv_length_int;
 
     if (!result)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pygobject-3.9.1/gi/_gobject/gobjectmodule.c 
new/pygobject-3.9.2/gi/_gobject/gobjectmodule.c
--- old/pygobject-3.9.1/gi/_gobject/gobjectmodule.c     2013-04-28 
15:09:23.000000000 +0200
+++ new/pygobject-3.9.2/gi/_gobject/gobjectmodule.c     2013-05-13 
17:36:19.000000000 +0200
@@ -48,24 +48,17 @@
 
 /**
  * pyg_set_thread_block_funcs:
- * @block_threads_func: a function to block Python threads.
- * @unblock_threads_func: a function to unblock Python threads.
- *
- * an interface to allow pygtk to add hooks to handle threading
- * similar to the old PyGTK 0.6.x releases.  May not work quite right
- * anymore.
+ * Deprecated, only available for ABI compatibility.
  */
 static void
-pyg_set_thread_block_funcs (PyGThreadBlockFunc block_threads_func,
-                           PyGThreadBlockFunc unblock_threads_func)
+_pyg_set_thread_block_funcs (PyGThreadBlockFunc block_threads_func,
+                            PyGThreadBlockFunc unblock_threads_func)
 {
-    g_return_if_fail(pygobject_api_functions.block_threads == NULL &&
-                    pygobject_api_functions.unblock_threads == NULL);
-
-    pygobject_api_functions.block_threads   = block_threads_func;
-    pygobject_api_functions.unblock_threads = unblock_threads_func;
-    pyglib_set_thread_block_funcs(block_threads_func,
-                                 unblock_threads_func);
+    PyGILState_STATE state = pyglib_gil_state_ensure ();
+    PyErr_Warn (PyExc_DeprecationWarning,
+                "Using pyg_set_thread_block_funcs is not longer needed. "
+                "PyGObject always uses Py_BLOCK/UNBLOCK_THREADS.");
+    pyglib_gil_state_release (state);
 }
 
 /**
@@ -2031,7 +2024,7 @@
 
   pyg_error_check,
 
-  pyg_set_thread_block_funcs,
+  _pyg_set_thread_block_funcs,
   (PyGThreadBlockFunc)0, /* block_threads */
   (PyGThreadBlockFunc)0, /* unblock_threads */
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pygobject-3.9.1/gi/_gobject/pygobject-private.h 
new/pygobject-3.9.2/gi/_gobject/pygobject-private.h
--- old/pygobject-3.9.1/gi/_gobject/pygobject-private.h 2013-04-28 
15:09:23.000000000 +0200
+++ new/pygobject-3.9.2/gi/_gobject/pygobject-private.h 2013-05-13 
17:36:19.000000000 +0200
@@ -21,39 +21,6 @@
 
 /* from gobjectmodule.c */
 extern struct _PyGObject_Functions pygobject_api_functions;
-#define pyg_block_threads()   G_STMT_START { \
-    if (pygobject_api_functions.block_threads != NULL)    \
-      (* pygobject_api_functions.block_threads)();        \
-  } G_STMT_END
-#define pyg_unblock_threads() G_STMT_START { \
-    if (pygobject_api_functions.unblock_threads != NULL)  \
-      (* pygobject_api_functions.unblock_threads)();      \
-  } G_STMT_END
-
-#define pyg_threads_enabled (pygobject_api_functions.threads_enabled)
-
-#ifdef DISABLE_THREADING
-#define pyg_gil_state_ensure() 0
-#define pyg_gil_state_release(state) G_STMT_START {     \
-    } G_STMT_END
-
-#else
-#define pyg_gil_state_ensure() (pygobject_api_functions.threads_enabled? 
(PyGILState_Ensure()) : 0)
-#define pyg_gil_state_release(state) G_STMT_START {     \
-    if (pygobject_api_functions.threads_enabled)        \
-        PyGILState_Release(state);                      \
-    } G_STMT_END
-#endif
-
-#define pyg_begin_allow_threads                         \
-    G_STMT_START {                                      \
-        PyThreadState *_save = NULL;                    \
-        if (pygobject_api_functions.threads_enabled)    \
-            _save = PyEval_SaveThread();
-#define pyg_end_allow_threads                           \
-        if (pygobject_api_functions.threads_enabled)    \
-            PyEval_RestoreThread(_save);                \
-    } G_STMT_END
 
 
 #ifndef Py_CLEAR /* since Python 2.4 */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pygobject-3.9.1/gi/_gobject/pygobject.c 
new/pygobject-3.9.2/gi/_gobject/pygobject.c
--- old/pygobject-3.9.1/gi/_gobject/pygobject.c 2013-04-28 15:09:23.000000000 
+0200
+++ new/pygobject-3.9.2/gi/_gobject/pygobject.c 2013-05-13 17:36:19.000000000 
+0200
@@ -88,10 +88,9 @@
     if (Py_IsInitialized()) {
        state = pyglib_gil_state_ensure();
        Py_DECREF(data->type);
-       /* We cannot use pyg_begin_allow_threads here because this is inside
+       /* We cannot use Py_BEGIN_ALLOW_THREADS here because this is inside
         * a branch. */
-       if (pyg_threads_enabled)
-           _save = PyEval_SaveThread();
+       Py_UNBLOCK_THREADS; /* Modifies _save */
     }
 
     tmp = closures = data->closures;
@@ -114,8 +113,7 @@
     g_free(data);
 
     if (Py_IsInitialized()) {
-       if (pyg_threads_enabled)
-           PyEval_RestoreThread(_save);
+       Py_BLOCK_THREADS; /* Restores _save */
        pyglib_gil_state_release(state);
     }
 }
@@ -309,10 +307,11 @@
 
     /* The GType is implemented in Python, or we failed to read it via gi:
      * do a straightforward read. */
+    Py_BEGIN_ALLOW_THREADS;
     g_value_init(&value, G_PARAM_SPEC_VALUE_TYPE(pspec));
-    pyg_begin_allow_threads;
     g_object_get_property(self->pygobject->obj, pspec->name, &value);
-    pyg_end_allow_threads;
+    Py_END_ALLOW_THREADS;
+
     ret = pyg_param_gvalue_as_pyobject(&value, TRUE, pspec);
     g_value_unset(&value);
     
@@ -352,12 +351,11 @@
        return FALSE;
     }
 
-    pyg_begin_allow_threads;
+    Py_BEGIN_ALLOW_THREADS;
     g_object_set_property(obj, pspec->name, &value);
-    pyg_end_allow_threads;
-
     g_value_unset(&value);
-    
+    Py_END_ALLOW_THREADS;
+
     return TRUE;
 }
 
@@ -1183,9 +1181,9 @@
             g_object_remove_toggle_ref(self->obj, pyg_toggle_notify, self);
             self->private_flags.flags &= ~PYGOBJECT_USING_TOGGLE_REF;
         } else {
-            pyg_begin_allow_threads;
+            Py_BEGIN_ALLOW_THREADS;
             g_object_unref(self->obj);
-            pyg_end_allow_threads;
+            Py_END_ALLOW_THREADS;
         }
         self->obj = NULL;
     }
@@ -1320,9 +1318,10 @@
        return NULL;
     }
     g_value_init(&value, G_PARAM_SPEC_VALUE_TYPE(pspec));
-    pyg_begin_allow_threads;
+    Py_BEGIN_ALLOW_THREADS;
     g_object_get_property(self->obj, param_name, &value);
-    pyg_end_allow_threads;
+    Py_END_ALLOW_THREADS;
+
     ret = pyg_param_gvalue_as_pyobject(&value, TRUE, pspec);
     g_value_unset(&value);
     return ret;
@@ -1372,9 +1371,9 @@
         }
         g_value_init(&value, G_PARAM_SPEC_VALUE_TYPE(pspec));
 
-        pyg_begin_allow_threads;
+        Py_BEGIN_ALLOW_THREADS;
         g_object_get_property(self->obj, property_name, &value);
-        pyg_end_allow_threads;
+        Py_END_ALLOW_THREADS;
 
         item = pyg_value_as_pyobject(&value, TRUE);
         PyTuple_SetItem(tuple, i, item);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pygobject-3.9.1/gi/_gobject/pygobject.h 
new/pygobject-3.9.2/gi/_gobject/pygobject.h
--- old/pygobject-3.9.1/gi/_gobject/pygobject.h 2013-04-28 15:09:23.000000000 
+0200
+++ new/pygobject-3.9.2/gi/_gobject/pygobject.h 2013-05-13 17:36:19.000000000 
+0200
@@ -140,6 +140,7 @@
                                     PyGThreadBlockFunc unblock_threads_func);
     PyGThreadBlockFunc block_threads;
     PyGThreadBlockFunc unblock_threads;
+
     PyTypeObject *paramspec_type;
     PyObject *(* paramspec_new)(GParamSpec *spec);
     GParamSpec *(*paramspec_get)(PyObject *tuple);
@@ -196,6 +197,28 @@
     PyTypeObject *object_type;
 };
 
+
+#ifdef DISABLE_THREADING
+#    define pyg_threads_enabled           FALSE
+#    define pyg_gil_state_ensure()        0
+#    define pyg_gil_state_release(state)
+#    define pyg_begin_allow_threads       G_STMT_START {
+#    define pyg_end_allow_threads         } G_STMT_END
+#else
+#    define pyg_threads_enabled           TRUE
+#    define pyg_gil_state_ensure          PyGILState_Ensure
+#    define pyg_gil_state_release         PyGILState_Release
+#    define pyg_begin_allow_threads       Py_BEGIN_ALLOW_THREADS
+#    define pyg_end_allow_threads         Py_END_ALLOW_THREADS
+#endif
+
+/* Deprecated, only available for API compatibility. */
+#define pyg_enable_threads()
+#define pyg_set_thread_block_funcs(a, b)
+#define pyg_block_threads()
+#define pyg_unblock_threads()
+
+
 #ifndef _INSIDE_PYGOBJECT_
 
 #if defined(NO_IMPORT) || defined(NO_IMPORT_PYGOBJECT)
@@ -233,7 +256,6 @@
 #define pyg_flags_add_constants     (_PyGObject_API->flags_add_constants)
 #define pyg_constant_strip_prefix   (_PyGObject_API->constant_strip_prefix)
 #define pyg_error_check             (_PyGObject_API->error_check)
-#define pyg_set_thread_block_funcs  (_PyGObject_API->set_thread_block_funcs)
 #define PyGParamSpec_Type           (*_PyGObject_API->paramspec_type)
 #define pyg_param_spec_new          (_PyGObject_API->paramspec_new)
 #define pyg_param_spec_from_object  (_PyGObject_API->paramspec_get)
@@ -247,9 +269,6 @@
 #define PyGFlags_Type               (*_PyGObject_API->flags_type)
 #define pyg_flags_add               (_PyGObject_API->flags_add)
 #define pyg_flags_from_gtype        (_PyGObject_API->flags_from_gtype)
-#define pyg_enable_threads          (_PyGObject_API->enable_threads)
-#define pyg_gil_state_ensure        (_PyGObject_API->gil_state_ensure)
-#define pyg_gil_state_release       (_PyGObject_API->gil_state_release)
 #define pyg_register_class_init     (_PyGObject_API->register_class_init)
 #define pyg_register_interface_info (_PyGObject_API->register_interface_info)
 #define pyg_add_warning_redirection   (_PyGObject_API->add_warning_redirection)
@@ -257,27 +276,6 @@
 #define pyg_gerror_exception_check (_PyGObject_API->gerror_exception_check)
 #define pyg_option_group_new       (_PyGObject_API->option_group_new)
 
-#define pyg_block_threads()   G_STMT_START {   \
-    if (_PyGObject_API->block_threads != NULL) \
-      (* _PyGObject_API->block_threads)();     \
-  } G_STMT_END
-#define pyg_unblock_threads() G_STMT_START {     \
-    if (_PyGObject_API->unblock_threads != NULL) \
-      (* _PyGObject_API->unblock_threads)();     \
-  } G_STMT_END
-
-#define pyg_threads_enabled (_PyGObject_API->threads_enabled)
-
-#define pyg_begin_allow_threads                 \
-    G_STMT_START {                              \
-        PyThreadState *_save = NULL;            \
-        if (_PyGObject_API->threads_enabled)    \
-            _save = PyEval_SaveThread();
-#define pyg_end_allow_threads                   \
-        if (_PyGObject_API->threads_enabled)    \
-            PyEval_RestoreThread(_save);        \
-    } G_STMT_END
-
 
 /**
  * pygobject_init:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pygobject-3.9.1/gi/gimodule.c 
new/pygobject-3.9.2/gi/gimodule.c
--- old/pygobject-3.9.1/gi/gimodule.c   2013-02-28 11:41:54.000000000 +0100
+++ new/pygobject-3.9.2/gi/gimodule.c   2013-05-13 17:36:19.000000000 +0200
@@ -534,6 +534,7 @@
     gsize total_read = 0;
     GError* error = NULL;
     GIOStatus status = G_IO_STATUS_NORMAL;
+    GIOChannel *iochannel = NULL;
 
     if (!PyArg_ParseTuple (args, "Oi:pyg_channel_read", &py_iochannel, 
&max_count)) {
         return NULL;
@@ -545,7 +546,9 @@
        
     if (max_count == 0)
         return PYGLIB_PyBytes_FromString("");
-    
+
+    iochannel = pyg_boxed_get (py_iochannel, GIOChannel);
+
     while (status == G_IO_STATUS_NORMAL
           && (max_count == -1 || total_read < max_count)) {
        gsize single_read;
@@ -572,11 +575,11 @@
        
         buf = PYGLIB_PyBytes_AsString(ret_obj) + total_read;
 
-        pyglib_unblock_threads();
-        status = g_io_channel_read_chars(pyg_boxed_get (py_iochannel, 
GIOChannel),
-                                         buf, buf_size, &single_read, &error);
-        pyglib_block_threads();
-       if (pyglib_error_check(&error))
+        Py_BEGIN_ALLOW_THREADS;
+        status = g_io_channel_read_chars (iochannel, buf, buf_size, 
&single_read, &error);
+        Py_END_ALLOW_THREADS;
+
+        if (pyglib_error_check(&error))
            goto failure;
        
        total_read += single_read;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pygobject-3.9.1/gi/pygi-boxed.c 
new/pygobject-3.9.2/gi/pygi-boxed.c
--- old/pygobject-3.9.1/gi/pygi-boxed.c 2013-02-28 11:34:01.000000000 +0100
+++ new/pygobject-3.9.2/gi/pygi-boxed.c 2013-05-13 17:36:19.000000000 +0200
@@ -32,10 +32,6 @@
 {
     GType g_type;
 
-    PyObject_GC_UnTrack ( (PyObject *) self);
-
-    PyObject_ClearWeakRefs ( (PyObject *) self);
-
     if ( ( (PyGBoxed *) self)->free_on_dealloc) {
         if (self->slice_allocated) {
             g_slice_free1 (self->size, ( (PyGBoxed *) self)->boxed);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pygobject-3.9.1/gi/pygi-closure.c 
new/pygobject-3.9.2/gi/pygi-closure.c
--- old/pygobject-3.9.1/gi/pygi-closure.c       2013-03-18 13:24:54.000000000 
+0100
+++ new/pygobject-3.9.2/gi/pygi-closure.c       2013-05-13 17:25:17.000000000 
+0200
@@ -99,6 +99,7 @@
                 }
 
                 g_base_info_unref (interface_info);
+                break;
             }
         default:
             *(ffi_arg *) retval = (ffi_arg) arg.v_pointer;
@@ -271,7 +272,7 @@
                         break;
                     } else if (interface_type == GI_INFO_TYPE_ENUM ||
                                interface_type == GI_INFO_TYPE_FLAGS) {
-                        g_args[i].v_double = * (double *) args[i];
+                        g_args[i].v_uint = * (guint *) args[i];
                         g_base_info_unref (interface);
                         break;
                     } else if (interface_type == GI_INFO_TYPE_STRUCT ||
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pygobject-3.9.1/gi/pygi-info.c 
new/pygobject-3.9.2/gi/pygi-info.c
--- old/pygobject-3.9.1/gi/pygi-info.c  2013-04-28 15:09:23.000000000 +0200
+++ new/pygobject-3.9.2/gi/pygi-info.c  2013-05-13 17:36:19.000000000 +0200
@@ -32,9 +32,8 @@
 static void
 _base_info_dealloc (PyGIBaseInfo *self)
 {
-    PyObject_GC_UnTrack ( (PyObject *) self);
-
-    PyObject_ClearWeakRefs ( (PyObject *) self);
+    if (self->inst_weakreflist != NULL)
+        PyObject_ClearWeakRefs ( (PyObject *) self);
 
     g_base_info_unref (self->info);
 
@@ -43,14 +42,6 @@
     Py_TYPE( (PyObject *) self)->tp_free ( (PyObject *) self);
 }
 
-static int
-_base_info_traverse (PyGIBaseInfo *self,
-                     visitproc     visit,
-                     void         *arg)
-{
-    return 0;
-}
-
 static PyObject *
 _base_info_repr (PyGIBaseInfo *self)
 {
@@ -256,6 +247,8 @@
     }
 
     self->info = g_base_info_ref (info);
+    self->inst_weakreflist = NULL;
+    self->cache = NULL;
 
     return (PyObject *) self;
 }
@@ -1746,10 +1739,7 @@
 
     PyGIBaseInfo_Type.tp_dealloc = (destructor) _base_info_dealloc;
     PyGIBaseInfo_Type.tp_repr = (reprfunc) _base_info_repr;
-    PyGIBaseInfo_Type.tp_flags = (Py_TPFLAGS_DEFAULT | 
-                                   Py_TPFLAGS_BASETYPE  | 
-                                   Py_TPFLAGS_HAVE_GC);
-    PyGIBaseInfo_Type.tp_traverse = (traverseproc) _base_info_traverse;
+    PyGIBaseInfo_Type.tp_flags = (Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE);
     PyGIBaseInfo_Type.tp_weaklistoffset = offsetof(PyGIBaseInfo, 
inst_weakreflist);
     PyGIBaseInfo_Type.tp_methods = _PyGIBaseInfo_methods; 
     PyGIBaseInfo_Type.tp_richcompare = (richcmpfunc)_base_info_richcompare;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pygobject-3.9.1/gi/pygi-invoke.c 
new/pygobject-3.9.2/gi/pygi-invoke.c
--- old/pygobject-3.9.1/gi/pygi-invoke.c        2013-02-28 11:15:59.000000000 
+0100
+++ new/pygobject-3.9.2/gi/pygi-invoke.c        2013-05-13 17:36:19.000000000 
+0200
@@ -37,7 +37,7 @@
 
     error = NULL;
 
-    pyg_begin_allow_threads;
+    Py_BEGIN_ALLOW_THREADS;
 
     /* FIXME: use this for now but we can streamline the calls */
     if (cache->function_type == PYGI_FUNCTION_TYPE_VFUNC)
@@ -68,7 +68,7 @@
                                           cache->n_to_py_args,
                                          &state->return_arg,
                                          &error);
-    pyg_end_allow_threads;
+    Py_END_ALLOW_THREADS;
 
     if (!retval) {
         g_assert (error != NULL);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pygobject-3.9.1/gi/pygi-struct.c 
new/pygobject-3.9.2/gi/pygi-struct.c
--- old/pygobject-3.9.1/gi/pygi-struct.c        2013-02-19 16:01:47.000000000 
+0100
+++ new/pygobject-3.9.2/gi/pygi-struct.c        2013-05-13 17:36:19.000000000 
+0200
@@ -34,10 +34,6 @@
                            (PyObject *) self,
                            &PyGIStructInfo_Type);
 
-    PyObject_GC_UnTrack ( (PyObject *) self);
-
-    PyObject_ClearWeakRefs ( (PyObject *) self);
-
     if (info != NULL && g_struct_info_is_foreign ( (GIStructInfo *) info)) {
         pygi_struct_foreign_release (info, ( (PyGPointer *) self)->pointer);
     } else if (self->free_on_dealloc) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pygobject-3.9.1/gi/types.py 
new/pygobject-3.9.2/gi/types.py
--- old/pygobject-3.9.1/gi/types.py     2013-02-19 16:01:47.000000000 +0100
+++ new/pygobject-3.9.2/gi/types.py     2013-05-13 17:25:17.000000000 +0200
@@ -245,14 +245,16 @@
         # Skip bases without __info__ (static _gobject._gobject.GObject)
         if base is GInterface or\
                 not issubclass(base, GInterface) or\
-                not hasattr(base, '__info__') or\
-                not isinstance(base.__info__, InterfaceInfo):
+                not hasattr(base, '__info__'):
             continue
 
-        for vfunc in base.__info__.get_vfuncs():
-            if vfunc.get_name() == vfunc_name:
-                return vfunc
+        # Only look at this classes vfuncs if it is an interface.
+        if isinstance(base.__info__, InterfaceInfo):
+            for vfunc in base.__info__.get_vfuncs():
+                if vfunc.get_name() == vfunc_name:
+                    return vfunc
 
+        # Recurse into the parent classes
         vfunc = find_vfunc_info_in_interface(base.__bases__, vfunc_name)
         if vfunc is not None:
             return vfunc
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pygobject-3.9.1/tests/test_gi.py 
new/pygobject-3.9.2/tests/test_gi.py
--- old/pygobject-3.9.1/tests/test_gi.py        2013-04-28 15:09:23.000000000 
+0200
+++ new/pygobject-3.9.2/tests/test_gi.py        2013-05-13 17:36:19.000000000 
+0200
@@ -2056,6 +2056,9 @@
         def do_method_with_default_implementation(self, int8):
             self.val = int8
 
+        def do_vfunc_return_value_only(self):
+            return 2121
+
     class Interface3Impl(GObject.Object, GIMarshallingTests.Interface3):
         def __init__(self):
             GObject.Object.__init__(self)
@@ -2129,6 +2132,10 @@
         object_.method_with_default_implementation(87)
         self.assertEqual(object_.val, 87)
 
+    def test_subobject_child_vfunc(self):
+        object_ = self.SubObject(int=1)
+        self.assertEqual(object_.vfunc_return_value_only(), 2121)
+
     def test_dynamic_module(self):
         from gi.module import DynamicModule
         self.assertTrue(isinstance(GObject, DynamicModule))
@@ -2270,6 +2277,21 @@
         GIMarshallingTests.test_interface_test_int8_in(instance, 42)
         self.assertEqual(instance.val, 42)
 
+    def test_subclass_override(self):
+        class TestInterfaceImplD(TestInterfaces.TestInterfaceImpl):
+            val2 = None
+
+            def do_test_int8_in(self, int8):
+                self.val2 = int8
+
+        instance = TestInterfaceImplD()
+        self.assertEqual(instance.val, None)
+        self.assertEqual(instance.val2, None)
+
+        GIMarshallingTests.test_interface_test_int8_in(instance, 42)
+        self.assertEqual(instance.val, None)
+        self.assertEqual(instance.val2, 42)
+
     def test_mro(self):
         # there was a problem with Python bailing out because of
         # http://en.wikipedia.org/wiki/Diamond_problem with interfaces,

-- 
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to