diff options
author | Lennart Poettering <lennart@poettering.net> | 2014-11-26 15:54:53 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2014-11-26 17:27:59 +0100 |
commit | dcc2fc01fa850e9ee36c549dc2691e7e5c71bebf (patch) | |
tree | f8e81cc61d7257063e3701c4a9198e11c5d8349c | |
parent | e0312f4db08c7100bd00299614e87bedc759b366 (diff) |
sd-bus: update peeking into receieved messages, with recent kernel change we need to FREE them after all
-rw-r--r-- | src/core/busname.c | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/src/core/busname.c b/src/core/busname.c index 1583d57416..8926c6bd94 100644 --- a/src/core/busname.c +++ b/src/core/busname.c @@ -731,6 +731,7 @@ static int busname_peek_message(BusName *n) { struct kdbus_cmd_recv cmd_recv = { .flags = KDBUS_RECV_PEEK, }; + struct kdbus_cmd_free cmd_free = {}; const char *comm = NULL; struct kdbus_item *d; struct kdbus_msg *k; @@ -739,11 +740,17 @@ static int busname_peek_message(BusName *n) { pid_t pid = 0; int r; + /* Generate a friendly debug log message about which process + * caused triggering of this bus name. This simply peeks the + * metadata of the first queued message and logs it. */ + assert(n); - /* Generate a friendly log message about which process caused - * triggering of this bus name. This simply peeks the metadata - * of the first queued message and logs it. */ + /* Let's shortcut things a bit, if debug logging is turned off + * anyway. */ + + if (log_get_max_level() < LOG_DEBUG) + return 0; r = ioctl(n->starter_fd, KDBUS_CMD_MSG_RECV, &cmd_recv); if (r < 0) { @@ -795,9 +802,9 @@ finish: if (p) (void) munmap(p, sz); - /* Hint: we don't invoke KDBUS_CMD_MSG_FREE here, as we only - * PEEKed the message, and didn't ask for it to be dropped - * from the queue. */ + cmd_free.offset = cmd_recv.offset; + if (ioctl(n->starter_fd, KDBUS_CMD_FREE, &cmd_free) < 0) + log_warning_unit(UNIT(n)->id, "Failed to free peeked message, ignoring: %m"); return r; } |