if (!entry) {
mutex_unlock(&conn->lock);
ret = -EAGAIN;
- } else if (cmd->flags & KDBUS_RECV_DROP) {
+ goto exit;
+ }
+
+ if (cmd->flags & KDBUS_RECV_DROP) {
var(reply_state, entry->reply_state);
bool freeReply = true;
kdbus_queue_entry_destroy(entry, conn);
{
struct kdbus_user *user = container_of(kref, struct kdbus_user, kref);
- kdbus_assert(atomic_read(&user->buses) <= 0);
- kdbus_assert(atomic_read(&user->connections) <= 0);
+ kdbus_assert(!atomic_read(&user->buses));
+ kdbus_assert(!atomic_read(&user->connections));
mutex_lock(&user->domain->lock);
ida_simple_remove(&user->domain->user_ida, user->id);
if (0 > (reply_state = entry->reply_state)) /* never had a reply */
kmem_cache_free(queue_entry_cachep, entry);
else if (!reply_state) /* finalized reply */
- kmem_cache_free(kdbus_reply_cachep, container_of(entry, struct kdbus_reply, queue_entry));
+ kdbus_reply_free(container_of(entry, struct kdbus_reply, queue_entry));
else { /* just dequeued a message requiring reply -> move it to dequeued_reply_list */
var(r, container_of(entry, struct kdbus_reply, queue_entry));
if (!entry->sync)