summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKay Sievers <kay@vrfy.org>2013-12-25 16:42:50 +0100
committerKay Sievers <kay@vrfy.org>2013-12-25 16:42:50 +0100
commit80a33f113bbdadf4fc7ffec7fed026fde59d232b (patch)
treef6e4522a72b72e4effd94be547fa90836749da80 /src
parent7e94edc2a43b9fdb3d9fc743ab1994c3d4a13d9f (diff)
bus: conditionally set cookie_reply/timeout and update kdbus.h
Diffstat (limited to 'src')
-rw-r--r--src/libsystemd-bus/bus-kernel.c7
-rw-r--r--src/libsystemd-bus/kdbus.h28
2 files changed, 16 insertions, 19 deletions
diff --git a/src/libsystemd-bus/bus-kernel.c b/src/libsystemd-bus/bus-kernel.c
index c15218fe98..7944f51383 100644
--- a/src/libsystemd-bus/bus-kernel.c
+++ b/src/libsystemd-bus/bus-kernel.c
@@ -257,8 +257,11 @@ static int bus_message_setup_kmsg(sd_bus *b, sd_bus_message *m) {
m->destination ? unique : KDBUS_DST_ID_BROADCAST;
m->kdbus->payload_type = KDBUS_PAYLOAD_DBUS;
m->kdbus->cookie = m->header->serial;
- m->kdbus->cookie_reply = m->reply_serial;
- m->kdbus->timeout_ns = m->timeout * NSEC_PER_USEC;
+
+ if (m->header->flags & BUS_MESSAGE_NO_REPLY_EXPECTED)
+ m->kdbus->cookie_reply = m->reply_serial;
+ else
+ m->kdbus->timeout_ns = m->timeout * NSEC_PER_USEC;
d = m->kdbus->items;
diff --git a/src/libsystemd-bus/kdbus.h b/src/libsystemd-bus/kdbus.h
index 71bf86d063..71cfe06eac 100644
--- a/src/libsystemd-bus/kdbus.h
+++ b/src/libsystemd-bus/kdbus.h
@@ -345,21 +345,13 @@ enum kdbus_payload_type {
* @payload_type: Payload type (KDBUS_PAYLOAD_*)
* @cookie: Userspace-supplied cookie, for the connection
* to identify its messages
- * @cookie_reply: A reply to the message with the same cookie. The
- * reply itself has its own cookie, @cookie_reply
- * corresponds to the cookie of the request message
- * @timeout_ns: For non-kernel-generated messages, this denotes the
- * message timeout in nanoseconds. A message has to be
- * received with KDBUS_CMD_MSG_RECV by the destination
- * connection within this time frame. For messages that
- * have KDBUS_MSG_FLAGS_EXPECT_REPLY set in @flags,
- * this value also denotes the timeout for the reply to
- * this message. If there is no reply, or the message is
- * not received in time by the other side, a
- * kernel-generated message with an attached
- * KDBUS_ITEM_REPLY_TIMEOUT item is sent to @src_id.
- * A 0-value is only valid if KDBUS_MSG_FLAGS_EXPECT_REPLY
- * is unset in @flags.
+ * @cookie_reply: A reply to the requesting message with the same
+ * cookie. The requesting connection can match its
+ * request and the reply with this value
+ * @timeout_ns: The time to wait for a message reply from the peer.
+ * If there is no reply, a kernel-generated message
+ * with an attached KDBUS_ITEM_REPLY_TIMEOUT item
+ * is sent to @src_id.
* @items: A list of kdbus_items containing the message payload
*/
struct kdbus_msg {
@@ -369,8 +361,10 @@ struct kdbus_msg {
__u64 src_id;
__u64 payload_type;
__u64 cookie;
- __u64 cookie_reply;
- __u64 timeout_ns;
+ union {
+ __u64 cookie_reply;
+ __u64 timeout_ns;
+ };
struct kdbus_item items[0];
} __attribute__((aligned(8)));