From d2a7c42b7fb65232130dc41179abdf9832a922c7 Mon Sep 17 00:00:00 2001 From: Simon McVittie Date: Mon, 2 Sep 2013 17:14:38 +0100 Subject: [PATCH 3/6] corrupt test: close connection before releasing GSocket GSocket takes responsibility for closing the fd, and there doesn't seem to be any way to tell it not to. When this test is adapted to run under DBusLoop as an alternative to dbus-glib, that becomes a problem, because DBusLoop/DBusSocketSetEpoll do not tolerate that. Work around it. --- test/corrupt.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/test/corrupt.c b/test/corrupt.c index 0249590..be0e022 100644 --- a/test/corrupt.c +++ b/test/corrupt.c @@ -246,6 +246,16 @@ test_corrupt (Fixture *f, "/org/freedesktop/DBus/Local"); dbus_message_unref (incoming); + + /* Free the DBusConnection before the GSocket, because GSocket is + * going to close our fd. GSocket tolerates closing an already-closed + * fd, whereas DBusLoop + DBusSocketSetEpoll doesn't. On Unix + * we could use dup() but that isn't portable to Windows :-( + */ + dbus_connection_close (f->server_conn); + dbus_connection_unref (f->server_conn); + f->server_conn = NULL; + g_object_unref (socket); } @@ -325,6 +335,12 @@ test_byte_order (Fixture *f, "/org/freedesktop/DBus/Local"); dbus_message_unref (message); + + /* Free the DBusConnection before the GSocket, as above. */ + dbus_connection_close (f->server_conn); + dbus_connection_unref (f->server_conn); + f->server_conn = NULL; + g_object_unref (socket); } -- 1.8.4.rc3