diff options
author | Gustavo J. A. M. Carneiro <gjc@src.gnome.org> | 2007-01-20 14:25:37 +0000 |
---|---|---|
committer | Gustavo J. A. M. Carneiro <gjc@src.gnome.org> | 2007-01-20 14:25:37 +0000 |
commit | 74620bd24024fd22e43a2f56b757ad631db7e667 (patch) | |
tree | 0f664f6a7fc955e5509eded872eb6bc7c8c2d65d | |
parent | bc87216d1f7942e41d32b75af30f782f520d9b42 (diff) | |
download | pygtk-74620bd24024fd22e43a2f56b757ad631db7e667.tar.gz |
more refcount fixes in gdk.gdk.Display.close
svn path=/trunk/; revision=2806
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | gtk/gdk.override | 8 | ||||
-rw-r--r-- | tests/test_gdk.py | 23 |
3 files changed, 30 insertions, 7 deletions
@@ -1,5 +1,11 @@ 2007-01-20 Gustavo J. A. M. Carneiro <gjc@gnome.org> + * gtk/gdk.override (_wrap_gdk_display_close): Force keeping of a + reference to the display GObject even when we close() it. + + * tests/test_gdk.py (GdkTest.testDisplay): Johan's unit test with + minor modifications. + * gtk/gdk.override (_wrap_gdk_display_close): Override and make it aware that calling gdk_display_close unrefs the GdkDisplay. diff --git a/gtk/gdk.override b/gtk/gdk.override index 6ddc1310..2b06b2a1 100644 --- a/gtk/gdk.override +++ b/gtk/gdk.override @@ -1483,11 +1483,11 @@ override gdk_display_close noargs static PyObject * _wrap_gdk_display_close(PyGObject *self) { - if (self->obj) { - gdk_display_close(GDK_DISPLAY(self->obj)); - self->obj = NULL; + GdkDisplay *display = GDK_DISPLAY(self->obj); + if (self->obj && !display->closed) { + g_object_ref(self->obj); + gdk_display_close(display); } - Py_INCREF(Py_None); return Py_None; } diff --git a/tests/test_gdk.py b/tests/test_gdk.py index 95b23794..77fe5cc1 100644 --- a/tests/test_gdk.py +++ b/tests/test_gdk.py @@ -48,11 +48,28 @@ class GdkTest(unittest.TestCase): [0xdeadbe, 0xbebabe]) def testDisplay(self): - gc.collect() + while gc.collect(): + pass + display = gtk.gdk.Display(None) del display - self.assertEquals(gc.collect(), 1) + + cnt = 0 + while True: + x = gc.collect() + cnt += x + if x: + break + self.assertEquals(cnt, 1) + display = gtk.gdk.Display(None) display.close() del display - #self.assertEquals(gc.collect(), 1) + + cnt = 0 + while True: + x = gc.collect() + cnt += x + if x: + break + self.assertEquals(cnt, 1) |