> struct mcast_member {
>@@ -540,9 +541,16 @@ static void join_handler(int status, struct
>ib_sa_mcmember_rec *rec,
> static void leave_handler(int status, struct ib_sa_mcmember_rec *rec,
>                          void *context)
> {
>+       __u8 leave_state;
>        struct mcast_group *group = context;
>
>-       mcast_work_handler(&group->work);
>+       leave_state = get_leave_state(group);

I don't think this works as expected.  If you look in
mcast_work_handler(), the group's join_state is adjusted before
send_leave is called.  Leave_state here will be different (likely 0)
than the leave_state sent in the original leave request. 

>+       if (status && (group->retries > 0)) {
>+               send_leave(group, leave_state);
>+               group->retries--;
>+       }
>+       if (!status || (group->retries == 0))

I think this should just be an 'else'.

>+               mcast_work_handler(&group->work);
> }

- Sean

_______________________________________________
general mailing list
[email protected]
http://lists.openfabrics.org/cgi-bin/mailman/listinfo/general

To unsubscribe, please visit http://openib.org/mailman/listinfo/openib-general

Reply via email to