Yes, we have refcount checks for the first two which is really just a revert of a previous patch which worked with GObject.new but didn't if it was called from C as g_object_new. The patch is needed to avoid a leak due to interactions between C and Python that are a bit disjoint when using g_object_new instead of the normal constructor e.g. GObject.new(Gtk.Button) vs Gtk.Button() since in the Gtk.Button case the wrapper is created and returned to python immediately where as in the GObject.new case the python wrapper is created during GObject initialization so init can be called and then grabbed and refed once g_object_new is finished and then returned to python. The leak was caused by a previous patch which removed a Py_DECREF during the initialization stage which would cause crashes because it would destroy the wrapper before the object was fully returned to the calling program. What this does is add a flag to say if you ref this wrapper again you will have an extra ref so just take ownership of it instead and remove the flag. This allows us to create the wrapper inside of the initializer and call the python init at the right spot.
The last patch is a fix of a regression from 2.28. Python 3 does not check instance types so the test suite was throwing asserts when an object of the wrong type was being sent in as the first value. Python 2 does do the instance check. A previous patch fixed that but I missed the edge case of unions. Specifically Gdk.Event. In order to avoid crashes and issues we try to send the actual Gdk.Event union member, e.g. Gdk.KeyEvent. Unfortunately unions are treated like structs so the member wrappers don't inherit from the parent union's type and simple check is not possible to allow the members to be passed as the union. The fix is to iterate through all the members and check the type of the parameter with the type of the member. Since unions and their members are the same pointer this is a valid way of passing it. We need to just make sure it isn't another union's member being passed. On Thu, Sep 22, 2011 at 8:26 PM, Matthias Clasen <[email protected]> wrote: > On Thu, Sep 22, 2011 at 7:48 PM, john palmieri > <[email protected]> wrote: >> Hi all, >> >> libpeas had some interesting regression that only happened with their >> use of g_object_new to instantiate PyGObject objects as well as a >> regression with the handling of unions. The patches are here - >> https://bugzilla.gnome.org/show_bug.cgi?id=659879 . I'll have nacho >> confirm that they work for him. Without these patches and a new >> tarball GEdit and Totem will be unable to load Python plugins. >> Thanks. > > These look fairly scary to me. Is there any testcase coverage for > these changes ? > _______________________________________________ [email protected] http://mail.gnome.org/mailman/listinfo/release-team Release-team lurker? Do NOT participate in discussions.
