From d4440ef7bb3ee339cf5a3cdd8d0f56e6db69ea23 Mon Sep 17 00:00:00 2001 From: Romain Pokrzywka Date: Thu, 14 Jan 2010 08:59:22 +0100 Subject: [PATCH] fixes bug where sometimes objects were not unregistered from dbus although their app had exited. As it turns out it was a missing implementation of the method _dbus_fd_set_close_on_exec() for windows. It's been tested with msvc2005, msvc2008, and mingw, and solves all the unregistering issues on many kde apps. --- dbus/dbus-sysdeps-win.c | 31 ++++++------------------------- 1 file changed, 6 insertions(+), 25 deletions(-) diff --git a/dbus/dbus-sysdeps-win.c b/dbus/dbus-sysdeps-win.c index c323820..300e9b1 100644 --- a/dbus/dbus-sysdeps-win.c +++ b/dbus/dbus-sysdeps-win.c @@ -275,31 +275,12 @@ _dbus_close_socket (int fd, void _dbus_fd_set_close_on_exec (int handle) { -#ifdef ENABLE_DBUSSOCKET - DBusSocket *s; - if (handle < 0) - return; - - _dbus_lock_sockets(); - - _dbus_handle_to_socket_unlocked (handle, &s); - s->close_on_exec = TRUE; - - _dbus_unlock_sockets(); -#else - /* TODO unic code. - int val; - - val = fcntl (fd, F_GETFD, 0); - - if (val < 0) - return; - - val |= FD_CLOEXEC; - - fcntl (fd, F_SETFD, val); - */ -#endif + if ( !SetHandleInformation( (HANDLE) handle, + HANDLE_FLAG_INHERIT | HANDLE_FLAG_PROTECT_FROM_CLOSE, + 0 /*disable both flags*/ ) ) + { + _dbus_win_warn_win_error ("Disabling socket handle inheritance failed:", GetLastError()); + } } /** -- 2.7.4