diff options
author | Rodrigo Moya <rodrigo.moya@collabora.co.uk> | 2012-05-29 11:50:12 +0200 |
---|---|---|
committer | Rodrigo Moya <rodrigo@gnome-db.org> | 2012-05-29 11:50:12 +0200 |
commit | 149f9e3a3989d64868c05fc4f21719df9ee4da53 (patch) | |
tree | 2ebd8da6de6b9a78bccee2d8f14fbbc55fd1dd7d | |
parent | 3754fb507c40edb91228d401b5d83e6bc9957f27 (diff) | |
download | dbus-149f9e3a3989d64868c05fc4f21719df9ee4da53.tar.gz |
Set Netlink socket to not block
-rw-r--r-- | bus/dispatch.c | 12 | ||||
-rw-r--r-- | bus/driver-afbus.c | 11 | ||||
-rw-r--r-- | bus/driver-afbus.h | 13 |
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 */ |