Messages in this thread | | | Date | Tue, 14 Apr 2015 10:27:37 +0200 | From | Lukasz Skalski <> | Subject | Re: [PATCH] kdbus: do not append the same connection to the queue twice |
| |
On 04/13/2015 11:48 PM, Sergei Zviagintsev wrote: > Hi Lukasz, >
Hi,
> On Mon, Apr 13, 2015 at 04:14:06PM +0200, Lukasz Skalski wrote: >> As it was discussed on systemd ML [1], the same connection should be >> queued up only once for a given well-known name. >> >> [1] http://lists.freedesktop.org/archives/systemd-devel/2015-April/030494.html >> >> Signed-off-by: Lukasz Skalski <l.skalski@samsung.com> >> >> diff --git a/ipc/kdbus/names.c b/ipc/kdbus/names.c >> index 657008e..a546a84 100644 >> --- a/ipc/kdbus/names.c >> +++ b/ipc/kdbus/names.c >> @@ -353,10 +353,23 @@ int kdbus_name_acquire(struct kdbus_name_registry *reg, >> } else if (flags & KDBUS_NAME_QUEUE) { >> /* add to waiting-queue of the name */ >> >> - ret = kdbus_name_pending_new(e, conn, flags); >> - if (ret >= 0) >> - /* tell the caller that we queued it */ >> - rflags |= KDBUS_NAME_IN_QUEUE; >> + struct kdbus_name_pending *p; >> + bool in_queue = false; >> + >> + list_for_each_entry(p, &e->queue, name_entry) { >> + if (p->conn == conn) { >> + /* connection is already queued */ >> + rflags |= KDBUS_NAME_IN_QUEUE; >> + in_queue = true; > > break here? >
Right. I've just sent v2. Thanks!
>> + } >> + } >> + >> + if (!in_queue) { >> + ret = kdbus_name_pending_new(e, conn, flags); >> + if (ret >= 0) >> + /* tell the caller that we queued it */ >> + rflags |= KDBUS_NAME_IN_QUEUE; >> + } >> } else { >> /* the name is busy, return a failure */ >> ret = -EEXIST; >> -- >> 1.9.3 >> >> -- >> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in >> the body of a message to majordomo@vger.kernel.org >> More majordomo info at http://vger.kernel.org/majordomo-info.html >> Please read the FAQ at http://www.tux.org/lkml/ >
Cheers, -- Lukasz Skalski Samsung R&D Institute Poland Samsung Electronics l.skalski@samsung.com
| |