[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 ]
