chiark / gitweb /
bus: sync with kdbus
authorDavid Herrmann <dh.herrmann@gmail.com>
Tue, 17 Feb 2015 17:05:32 +0000 (18:05 +0100)
committerDavid Herrmann <dh.herrmann@gmail.com>
Tue, 17 Feb 2015 17:16:07 +0000 (18:16 +0100)
Pull in new kdbus changes, namely:
 - EOVERFLOW is replaces by KDBUS_RECV_RETURN_DROPPED_MSGS
 - ENOMSG is merged with EAGAIN for consistency

src/libsystemd/sd-bus/bus-kernel.c
src/libsystemd/sd-bus/kdbus.h
src/libsystemd/sd-bus/test-bus-kernel.c

index e90ee44..df77203 100644 (file)
@@ -1345,15 +1345,12 @@ int bus_kernel_read_message(sd_bus *bus, bool hint_priority, int64_t priority) {
         }
 
         r = ioctl(bus->input_fd, KDBUS_CMD_RECV, &recv);
+        if (recv.return_flags & KDBUS_RECV_RETURN_DROPPED_MSGS)
+                log_debug("%s: kdbus reports %" PRIu64 " dropped broadcast messages, ignoring.", strna(bus->description), (uint64_t) recv.dropped_msgs);
         if (r < 0) {
                 if (errno == EAGAIN)
                         return 0;
 
-                if (errno == EOVERFLOW) {
-                        log_debug("%s: kdbus reports %" PRIu64 " dropped broadcast messages, ignoring.", strna(bus->description), (uint64_t) recv.dropped_msgs);
-                        return 0;
-                }
-
                 return -errno;
         }
 
index 1cc475e..f7fbfd9 100644 (file)
@@ -602,9 +602,15 @@ enum kdbus_recv_flags {
  * @KDBUS_RECV_RETURN_INCOMPLETE_FDS:  One or more file descriptors could not
  *                                     be installed. These descriptors in
  *                                     KDBUS_ITEM_FDS will carry the value -1.
+ * @KDBUS_RECV_RETURN_DROPPED_MSGS:    There have been dropped messages since
+ *                                     the last time a message was received.
+ *                                     The 'dropped_msgs' counter contains the
+ *                                     number of messages dropped pool
+ *                                     overflows or other missed broadcasts.
  */
 enum kdbus_recv_return_flags {
        KDBUS_RECV_RETURN_INCOMPLETE_FDS        = 1ULL <<  0,
+       KDBUS_RECV_RETURN_DROPPED_MSGS          = 1ULL <<  1,
 };
 
 /**
@@ -614,10 +620,12 @@ enum kdbus_recv_return_flags {
  * @return_flags:      Command return flags, kernel → userspace
  * @priority:          Minimum priority of the messages to de-queue. Lowest
  *                     values have the highest priority.
- * @dropped_msgs:      In case the KDBUS_CMD_RECV ioctl returns
- *                     -EOVERFLOW, this field will contain the number of
- *                     broadcast messages that have been lost since the
- *                     last call.
+ * @dropped_msgs:      In case there were any dropped messages since the last
+ *                     time a message was received, this will be set to the
+ *                     number of lost messages and
+ *                     KDBUS_RECV_RETURN_DROPPED_MSGS will be set in
+ *                     'return_flags'. This can only happen if the ioctl
+ *                     returns 0 or EAGAIN.
  * @msg:               Return storage for received message.
  * @items:             Additional items for this command.
  *
index 3aec568..c396eac 100644 (file)
@@ -119,7 +119,7 @@ int main(int argc, char *argv[]) {
         assert_se(r == -EBUSY);
 
         r = sd_bus_process_priority(b, -10, &m);
-        assert_se(r == -ENOMSG);
+        assert_se(r == 0);
 
         r = sd_bus_process(b, &m);
         assert_se(r > 0);