summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/channel.c15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/channel.c b/src/channel.c
index dfd8b8b..4994df2 100644
--- a/src/channel.c
+++ b/src/channel.c
@@ -684,9 +684,18 @@ find_channel_link(struct Client *client_p, struct Channel *chptr)
if (!IsClient(client_p))
return NULL;
- DLINK_FOREACH(ptr, client_p->channel.head)
- if (((struct Membership *)ptr->data)->chptr == chptr)
- return ptr->data;
+ if (dlink_list_length(&chptr->members) < dlink_list_length(&client_p->channel))
+ {
+ DLINK_FOREACH(ptr, chptr->members.head)
+ if (((struct Membership *)ptr->data)->client_p == client_p)
+ return ptr->data;
+ }
+ else
+ {
+ DLINK_FOREACH(ptr, client_p->channel.head)
+ if (((struct Membership *)ptr->data)->chptr == chptr)
+ return ptr->data;
+ }
return NULL;
}