aboutsummaryrefslogtreecommitdiffstats
path: root/recipes/dbus
diff options
context:
space:
mode:
authorSteffen Sledz <sledz@dresearch.de>2010-10-07 19:20:10 +0200
committerSteffen Sledz <sledz@dresearch.de>2010-10-07 19:22:13 +0200
commit65bd13c8c9e1779b99bf926688fb2d50a037c63d (patch)
treebdc1a0787d888cba13cbb8b83ed497fea7ee1abd /recipes/dbus
parentd19b69a60ace72309ea79bb72e8a3dd091bafcee (diff)
downloadopenembedded-65bd13c8c9e1779b99bf926688fb2d50a037c63d.tar.gz
dbus: backport SO_REUSEADDR handling for tcp dbusses from dbus git repo
Signed-off-by: Steffen Sledz <sledz@dresearch.de>
Diffstat (limited to 'recipes/dbus')
-rw-r--r--recipes/dbus/dbus/reuseaddr01.patch64
-rw-r--r--recipes/dbus/dbus/reuseaddr02.patch38
-rw-r--r--recipes/dbus/dbus_1.2.24.bb4
-rw-r--r--recipes/dbus/dbus_1.3.1.bb4
4 files changed, 108 insertions, 2 deletions
diff --git a/recipes/dbus/dbus/reuseaddr01.patch b/recipes/dbus/dbus/reuseaddr01.patch
new file mode 100644
index 0000000000..e291bb8949
--- /dev/null
+++ b/recipes/dbus/dbus/reuseaddr01.patch
@@ -0,0 +1,64 @@
+From 8f5f340b77b51fed1f036a9ee9f70a31b201f2c9 Mon Sep 17 00:00:00 2001
+From: Sledz <sledz@MOBIL-400-586.intern.dresearch.de>
+Date: Tue, 29 Jun 2010 21:04:15 +0000
+Subject: sysdeps-unix: enable address reuse on TCP sockets
+
+This helps to avoid 'Address already in use' problems if server has been shut
+down, and then restarted while sockets are still active on its port.
+
+Signed-off-by: Steffen Sledz <sledz@dresearch.de>
+---
+diff --git a/dbus/dbus-sysdeps-unix.c b/dbus/dbus-sysdeps-unix.c
+index ce3475a..b58d09a 100644
+--- a/dbus/dbus-sysdeps-unix.c
++++ b/dbus/dbus-sysdeps-unix.c
+@@ -623,6 +623,7 @@ _dbus_listen_unix_socket (const char *path,
+ int listen_fd;
+ struct sockaddr_un addr;
+ size_t path_len;
++ unsigned int reuseaddr;
+
+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
+
+@@ -696,7 +697,15 @@ _dbus_listen_unix_socket (const char *path,
+
+ strncpy (addr.sun_path, path, path_len);
+ }
+-
++
++ reuseaddr = 1;
++ if (setsockopt (listen_fd, SOL_SOCKET, SO_REUSEADDR, &reuseaddr, sizeof(reuseaddr))==-1)
++ {
++ dbus_set_error (error, _dbus_error_from_errno (errno),
++ "Failed to set socket option\"%s\": %s",
++ path, _dbus_strerror (errno));
++ }
++
+ if (bind (listen_fd, (struct sockaddr*) &addr, _DBUS_STRUCT_OFFSET (struct sockaddr_un, sun_path) + path_len) < 0)
+ {
+ dbus_set_error (error, _dbus_error_from_errno (errno),
+@@ -870,6 +879,7 @@ _dbus_listen_tcp_socket (const char *host,
+ int nlisten_fd = 0, *listen_fd = NULL, res, i;
+ struct addrinfo hints;
+ struct addrinfo *ai, *tmp;
++ unsigned int reuseaddr;
+
+ *fds_p = NULL;
+ _DBUS_ASSERT_ERROR_IS_CLEAR (error);
+@@ -915,6 +925,14 @@ _dbus_listen_tcp_socket (const char *host,
+ }
+ _DBUS_ASSERT_ERROR_IS_CLEAR(error);
+
++ reuseaddr = 1;
++ if (setsockopt (fd, SOL_SOCKET, SO_REUSEADDR, &reuseaddr, sizeof(reuseaddr))==-1)
++ {
++ dbus_set_error (error, _dbus_error_from_errno (errno),
++ "Failed to set socket option \"%s:%s\": %s",
++ host ? host : "*", port, _dbus_strerror (errno));
++ }
++
+ if (bind (fd, (struct sockaddr*) tmp->ai_addr, tmp->ai_addrlen) < 0)
+ {
+ _dbus_close(fd, NULL);
+--
+cgit v0.8.3-6-g21f6
diff --git a/recipes/dbus/dbus/reuseaddr02.patch b/recipes/dbus/dbus/reuseaddr02.patch
new file mode 100644
index 0000000000..10bc7edfdc
--- /dev/null
+++ b/recipes/dbus/dbus/reuseaddr02.patch
@@ -0,0 +1,38 @@
+From d365dd8141e709222f3a619d7b04ec4ded6429fd Mon Sep 17 00:00:00 2001
+From: Havoc Pennington <hp@pobox.com>
+Date: Tue, 31 Aug 2010 15:59:09 +0000
+Subject: Change failure of setsockopt SO_REUSEADDR to be a warning, not set an error
+
+It was previously setting an error but then continuing, which is
+not allowed since errors can't be "piled up"
+---
+diff --git a/dbus/dbus-sysdeps-unix.c b/dbus/dbus-sysdeps-unix.c
+index e4ff6ee..3205bed 100644
+--- a/dbus/dbus-sysdeps-unix.c
++++ b/dbus/dbus-sysdeps-unix.c
+@@ -980,9 +980,8 @@ _dbus_listen_unix_socket (const char *path,
+ reuseaddr = 1;
+ if (setsockopt (listen_fd, SOL_SOCKET, SO_REUSEADDR, &reuseaddr, sizeof(reuseaddr))==-1)
+ {
+- dbus_set_error (error, _dbus_error_from_errno (errno),
+- "Failed to set socket option\"%s\": %s",
+- path, _dbus_strerror (errno));
++ _dbus_warn ("Failed to set socket option\"%s\": %s",
++ path, _dbus_strerror (errno));
+ }
+
+ if (bind (listen_fd, (struct sockaddr*) &addr, _DBUS_STRUCT_OFFSET (struct sockaddr_un, sun_path) + path_len) < 0)
+@@ -1335,9 +1334,8 @@ _dbus_listen_tcp_socket (const char *host,
+ reuseaddr = 1;
+ if (setsockopt (fd, SOL_SOCKET, SO_REUSEADDR, &reuseaddr, sizeof(reuseaddr))==-1)
+ {
+- dbus_set_error (error, _dbus_error_from_errno (errno),
+- "Failed to set socket option \"%s:%s\": %s",
+- host ? host : "*", port, _dbus_strerror (errno));
++ _dbus_warn ("Failed to set socket option \"%s:%s\": %s",
++ host ? host : "*", port, _dbus_strerror (errno));
+ }
+
+ if (bind (fd, (struct sockaddr*) tmp->ai_addr, tmp->ai_addrlen) < 0)
+--
+cgit v0.8.3-6-g21f6
diff --git a/recipes/dbus/dbus_1.2.24.bb b/recipes/dbus/dbus_1.2.24.bb
index a2b7eea2a6..5ef1fef891 100644
--- a/recipes/dbus/dbus_1.2.24.bb
+++ b/recipes/dbus/dbus_1.2.24.bb
@@ -1,6 +1,6 @@
include dbus.inc
-PR = "${INC_PR}.0"
+PR = "${INC_PR}.1"
SRC_URI = "\
http://dbus.freedesktop.org/releases/dbus/dbus-${PV}.tar.gz;name=dbus \
@@ -8,6 +8,8 @@ SRC_URI = "\
file://fix-install-daemon.patch \
file://0001-Make-the-default-DBus-reply-timeout-configurable.patch \
file://dbus-1.init \
+ file://reuseaddr01.patch \
+ file://reuseaddr02.patch \
"
SRC_URI[dbus.md5sum] = "565346cecd9cfecf1463540c6086cc2c"
diff --git a/recipes/dbus/dbus_1.3.1.bb b/recipes/dbus/dbus_1.3.1.bb
index 2d09dc9ba5..b30bdab3c3 100644
--- a/recipes/dbus/dbus_1.3.1.bb
+++ b/recipes/dbus/dbus_1.3.1.bb
@@ -1,5 +1,5 @@
include dbus.inc
-PR = "${INC_PR}.1"
+PR = "${INC_PR}.2"
SRC_URI = "\
http://dbus.freedesktop.org/releases/dbus/dbus-${PV}.tar.gz \
@@ -9,6 +9,8 @@ SRC_URI = "\
file://fix-install-daemon.patch \
file://add-configurable-reply-timeouts.patch \
file://dbus-1.init \
+ file://reuseaddr01.patch \
+ file://reuseaddr02.patch \
"
# This is a development version of dbus that will lead to 1.4.0