[maemo-commits] [maemo-commits] r18240 - projects/haf/trunk/dbus/debian/patches
From: subversion at stage.maemo.org subversion at stage.maemo.orgDate: Tue May 5 16:22:49 EEST 2009
- Previous message: [maemo-commits] r18239 - projects/haf/trunk/dbus/debian/patches
- Next message: [maemo-commits] r18241 - projects/haf/trunk/dbus/debian/patches
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Author: makarhun Date: 2009-05-05 16:22:41 +0300 (Tue, 05 May 2009) New Revision: 18240 Added: projects/haf/trunk/dbus/debian/patches/36-bug-896-ignore-epipe-on-writes.patch Log: 36-patch Added: projects/haf/trunk/dbus/debian/patches/36-bug-896-ignore-epipe-on-writes.patch =================================================================== --- projects/haf/trunk/dbus/debian/patches/36-bug-896-ignore-epipe-on-writes.patch 2009-05-05 13:10:01 UTC (rev 18239) +++ projects/haf/trunk/dbus/debian/patches/36-bug-896-ignore-epipe-on-writes.patch 2009-05-05 13:22:41 UTC (rev 18240) @@ -0,0 +1,118 @@ +diff --git a/dbus/dbus-sysdeps.c b/dbus/dbus-sysdeps.c +index 00a1a3d..d317f31 100644 +--- a/dbus/dbus-sysdeps.c ++++ b/dbus/dbus-sysdeps.c +@@ -1078,6 +1078,16 @@ _dbus_get_is_errno_eintr (void) + } + + /** ++ * See if errno is EPIPE ++ * @returns #TRUE if errno == EPIPE ++ */ ++dbus_bool_t ++_dbus_get_is_errno_epipe (void) ++{ ++ return errno == EPIPE; ++} ++ ++/** + * Get error message from errno + * @returns _dbus_strerror(errno) + */ +diff --git a/dbus/dbus-sysdeps.h b/dbus/dbus-sysdeps.h +index b766f3f..8e6cdc4 100644 +--- a/dbus/dbus-sysdeps.h ++++ b/dbus/dbus-sysdeps.h +@@ -362,6 +362,7 @@ dbus_bool_t _dbus_get_is_errno_nonzero (void); + dbus_bool_t _dbus_get_is_errno_eagain_or_ewouldblock (void); + dbus_bool_t _dbus_get_is_errno_enomem (void); + dbus_bool_t _dbus_get_is_errno_eintr (void); ++dbus_bool_t _dbus_get_is_errno_epipe (void); + const char* _dbus_strerror_from_errno (void); + + void _dbus_disable_sigpipe (void); +diff --git a/dbus/dbus-transport-socket.c b/dbus/dbus-transport-socket.c +index 10b671c..bf97ef8 100644 +--- a/dbus/dbus-transport-socket.c ++++ b/dbus/dbus-transport-socket.c +@@ -616,7 +616,11 @@ do_writing (DBusTransport *transport) + { + /* EINTR already handled for us */ + +- if (_dbus_get_is_errno_eagain_or_ewouldblock ()) ++ /* For some discussion of why we also ignore EPIPE here, see ++ * http://lists.freedesktop.org/archives/dbus/2008-March/009526.html ++ */ ++ ++ if (_dbus_get_is_errno_eagain_or_ewouldblock () || _dbus_get_is_errno_epipe ()) + goto out; + else + { +@@ -807,6 +811,28 @@ do_reading (DBusTransport *transport) + } + + static dbus_bool_t ++unix_error_with_read_to_come (DBusTransport *itransport, ++ DBusWatch *watch, ++ unsigned int flags) ++{ ++ DBusTransportSocket *transport = (DBusTransportSocket *) itransport; ++ if (flags & DBUS_WATCH_ERROR) ++ return TRUE; ++ ++ if ((flags & DBUS_WATCH_HANGUP) && !(flags & DBUS_WATCH_READABLE)) ++ { ++ /* If we have a read watch enabled ... ++ we -might have data incoming ... => handle the HANGUP there */ ++ if (watch != transport->read_watch && ++ _dbus_watch_get_enabled (transport->read_watch)) ++ return FALSE; ++ ++ return TRUE; ++ } ++ return FALSE; ++} ++ ++static dbus_bool_t + socket_handle_watch (DBusTransport *transport, + DBusWatch *watch, + unsigned int flags) +@@ -823,8 +849,7 @@ socket_handle_watch (DBusTransport *transport, + * of its max_bytes_read_per_iteration limit). The condition where + * flags == HANGUP (without READABLE) probably never happen in fact. + */ +- if ((flags & DBUS_WATCH_ERROR) || +- ((flags & DBUS_WATCH_HANGUP) && !(flags & DBUS_WATCH_READABLE))) ++ if (unix_error_with_read_to_come (transport, watch, flags)) + { + _dbus_verbose ("Hang up or error on watch\n"); + _dbus_transport_disconnect (transport); +diff --git a/dbus/dbus-watch.c b/dbus/dbus-watch.c +index 9d6ab7c..da7b1bf 100644 +--- a/dbus/dbus-watch.c ++++ b/dbus/dbus-watch.c +@@ -51,6 +51,12 @@ struct DBusWatch + unsigned int enabled : 1; /**< Whether it's enabled. */ + }; + ++dbus_bool_t ++_dbus_watch_get_enabled (DBusWatch *watch) ++{ ++ return watch->enabled; ++} ++ + /** + * Creates a new DBusWatch. Used to add a file descriptor to be polled + * by a main loop. +diff --git a/dbus/dbus-watch.h b/dbus/dbus-watch.h +index 1d8d327..bb3fe98 100644 +--- a/dbus/dbus-watch.h ++++ b/dbus/dbus-watch.h +@@ -74,6 +74,7 @@ void _dbus_watch_list_remove_watch (DBusWatchList *watch_li + void _dbus_watch_list_toggle_watch (DBusWatchList *watch_list, + DBusWatch *watch, + dbus_bool_t enabled); ++dbus_bool_t _dbus_watch_get_enabled (DBusWatch *watch); + + /** @} */ +
- Previous message: [maemo-commits] r18239 - projects/haf/trunk/dbus/debian/patches
- Next message: [maemo-commits] r18241 - projects/haf/trunk/dbus/debian/patches
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]