diff options
Diffstat (limited to 'net/tipc/socket.c')
-rw-r--r-- | net/tipc/socket.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/net/tipc/socket.c b/net/tipc/socket.c index b542f14ed444..922b75ff56d3 100644 --- a/net/tipc/socket.c +++ b/net/tipc/socket.c | |||
@@ -485,6 +485,7 @@ static int tipc_sk_create(struct net *net, struct socket *sock, | |||
485 | tsk_set_unreturnable(tsk, true); | 485 | tsk_set_unreturnable(tsk, true); |
486 | if (sock->type == SOCK_DGRAM) | 486 | if (sock->type == SOCK_DGRAM) |
487 | tsk_set_unreliable(tsk, true); | 487 | tsk_set_unreliable(tsk, true); |
488 | __skb_queue_head_init(&tsk->mc_method.deferredq); | ||
488 | } | 489 | } |
489 | 490 | ||
490 | trace_tipc_sk_create(sk, NULL, TIPC_DUMP_NONE, " "); | 491 | trace_tipc_sk_create(sk, NULL, TIPC_DUMP_NONE, " "); |
@@ -582,6 +583,7 @@ static int tipc_release(struct socket *sock) | |||
582 | sk->sk_shutdown = SHUTDOWN_MASK; | 583 | sk->sk_shutdown = SHUTDOWN_MASK; |
583 | tipc_sk_leave(tsk); | 584 | tipc_sk_leave(tsk); |
584 | tipc_sk_withdraw(tsk, 0, NULL); | 585 | tipc_sk_withdraw(tsk, 0, NULL); |
586 | __skb_queue_purge(&tsk->mc_method.deferredq); | ||
585 | sk_stop_timer(sk, &sk->sk_timer); | 587 | sk_stop_timer(sk, &sk->sk_timer); |
586 | tipc_sk_remove(tsk); | 588 | tipc_sk_remove(tsk); |
587 | 589 | ||
@@ -2162,6 +2164,9 @@ static void tipc_sk_filter_rcv(struct sock *sk, struct sk_buff *skb, | |||
2162 | if (unlikely(grp)) | 2164 | if (unlikely(grp)) |
2163 | tipc_group_filter_msg(grp, &inputq, xmitq); | 2165 | tipc_group_filter_msg(grp, &inputq, xmitq); |
2164 | 2166 | ||
2167 | if (msg_type(hdr) == TIPC_MCAST_MSG) | ||
2168 | tipc_mcast_filter_msg(&tsk->mc_method.deferredq, &inputq); | ||
2169 | |||
2165 | /* Validate and add to receive buffer if there is space */ | 2170 | /* Validate and add to receive buffer if there is space */ |
2166 | while ((skb = __skb_dequeue(&inputq))) { | 2171 | while ((skb = __skb_dequeue(&inputq))) { |
2167 | hdr = buf_msg(skb); | 2172 | hdr = buf_msg(skb); |