From: Romain Pokrzywka Date: Thu, 14 Jan 2010 07:59:22 +0000 (+0100) Subject: fixes bug where sometimes objects were not unregistered from dbus X-Git-Tag: dbus-1.3.1~120^2~38 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d4440ef7bb3ee339cf5a3cdd8d0f56e6db69ea23;p=thirdparty%2Fdbus.git 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. --- diff --git a/dbus/dbus-sysdeps-win.c b/dbus/dbus-sysdeps-win.c index c323820b8..300e9b120 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()); + } } /**