summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRodrigo Moya <rodrigo.moya@collabora.co.uk>2012-05-29 11:50:12 +0200
committerRodrigo Moya <rodrigo@gnome-db.org>2012-05-29 11:50:12 +0200
commit149f9e3a3989d64868c05fc4f21719df9ee4da53 (patch)
tree2ebd8da6de6b9a78bccee2d8f14fbbc55fd1dd7d
parent3754fb507c40edb91228d401b5d83e6bc9957f27 (diff)
downloaddbus-149f9e3a3989d64868c05fc4f21719df9ee4da53.tar.gz
Set Netlink socket to not block
-rw-r--r--bus/dispatch.c12
-rw-r--r--bus/driver-afbus.c11
-rw-r--r--bus/driver-afbus.h13
3 files changed, 34 insertions, 2 deletions
diff --git a/bus/dispatch.c b/bus/dispatch.c
index 7a96f9dc..16a93cb5 100644
--- a/bus/dispatch.c
+++ b/bus/dispatch.c
@@ -27,6 +27,7 @@
#include "dispatch.h"
#include "connection.h"
#include "driver.h"
+#include "driver-afbus.h"
#include "services.h"
#include "activation.h"
#include "utils.h"
@@ -129,6 +130,17 @@ bus_dispatch_matches (BusTransaction *transaction,
BUS_SET_OOM (error);
return FALSE;
}
+
+ /* If using AF_BUS and the message came to the daemon, the client sending
+ * the message doesn't yet know the address for this service, so notify
+ * it of the address associated with the service. */
+ if (!bus_driver_afbus_emit_forwarded (sender,
+ addressed_recipient,
+ dbus_message_get_destination (message)))
+ {
+ _dbus_verbose ("bus_driver_afbus_emit_forwarded() failed\n");
+ return FALSE;
+ }
}
/* Now dispatch to others who look interested in this message */
diff --git a/bus/driver-afbus.c b/bus/driver-afbus.c
index 64df160c..9cf0d1e6 100644
--- a/bus/driver-afbus.c
+++ b/bus/driver-afbus.c
@@ -74,6 +74,12 @@ ensure_nl_sock(DBusError *error)
return -1;
}
+ if (!_dbus_set_fd_nonblocking (fd, error))
+ {
+ _dbus_close_socket (fd, NULL);
+ return -1;
+ }
+
l_local.nl_family = AF_NETLINK;
l_local.nl_groups = 0;
l_local.nl_pid = 0;
@@ -178,8 +184,9 @@ bus_driver_afbus_upload_match_rule (DBusConnection *connection,
return TRUE;
}
-dbus_bool_t bus_driver_afbus_append_unique_name (DBusConnection *connection,
- DBusString *str)
+dbus_bool_t
+bus_driver_afbus_append_unique_name (DBusConnection *connection,
+ DBusString *str)
{
struct sockaddr_bus address;
long len = sizeof(address);
diff --git a/bus/driver-afbus.h b/bus/driver-afbus.h
index 81dc09e2..90779b7e 100644
--- a/bus/driver-afbus.h
+++ b/bus/driver-afbus.h
@@ -34,6 +34,9 @@ dbus_bool_t bus_driver_afbus_upload_match_rule (DBusConnection *connection,
DBusError *error);
dbus_bool_t bus_driver_afbus_append_unique_name (DBusConnection *connection,
DBusString *str);
+dbus_bool_t bus_driver_afbus_emit_forwarded (DBusConnection *connection,
+ DBusConnection *addressed_recipient,
+ const char *service_name);
#else
inline
dbus_bool_t bus_driver_afbus_upload_match_rule (DBusConnection *connection,
@@ -42,12 +45,22 @@ dbus_bool_t bus_driver_afbus_upload_match_rule (DBusConnection *connection,
{
return TRUE;
}
+
inline
dbus_bool_t bus_driver_afbus_append_unique_name (DBusConnection *connection,
DBusString *str)
{
return TRUE;
}
+
+inline
+dbus_bool_t bus_driver_afbus_emit_forwarded (DBusConnection *connection,
+ DBusConnection *addressed_recipient,
+ const char *service_name)
+{
+ return TRUE;
+}
+
#endif
#endif /* BUS_DRIVER_AFBUS_H */