From c797bc7a3ab441a2640fb824e1f0579b32f2cc2c Mon Sep 17 00:00:00 2001 From: Samuel Ortiz Date: Fri, 22 Jun 2012 14:40:34 +0200 Subject: [PATCH] --- yaml --- r: 315297 b: refs/heads/master c: 4d22ea1532ba5730b665343e513d813c108c84ff h: refs/heads/master i: 315295: 021cf1004a8810715e9d8dfdb97bdf08ffd9016d v: v3 --- [refs] | 2 +- trunk/net/nfc/llcp/llcp.c | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index dd0713cda0c2..96e535bbaac0 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: b8e7a06d9cd4c0e778b1d12cef1ef414e0fb6d7e +refs/heads/master: 4d22ea1532ba5730b665343e513d813c108c84ff diff --git a/trunk/net/nfc/llcp/llcp.c b/trunk/net/nfc/llcp/llcp.c index 6812b1e4f025..0c8d25e53ff6 100644 --- a/trunk/net/nfc/llcp/llcp.c +++ b/trunk/net/nfc/llcp/llcp.c @@ -45,7 +45,7 @@ void nfc_llcp_sock_unlink(struct llcp_sock_list *l, struct sock *sk) write_unlock(&l->lock); } -static void nfc_llcp_socket_release(struct nfc_llcp_local *local) +static void nfc_llcp_socket_release(struct nfc_llcp_local *local, bool listen) { struct sock *sk; struct hlist_node *node, *tmp; @@ -78,6 +78,11 @@ static void nfc_llcp_socket_release(struct nfc_llcp_local *local) sock_orphan(accept_sk); } + + if (listen == true) { + release_sock(sk); + continue; + } } sk->sk_state = LLCP_CLOSED; @@ -106,7 +111,7 @@ static void local_release(struct kref *ref) local = container_of(ref, struct nfc_llcp_local, ref); list_del(&local->list); - nfc_llcp_socket_release(local); + nfc_llcp_socket_release(local, false); del_timer_sync(&local->link_timer); skb_queue_purge(&local->tx_queue); destroy_workqueue(local->tx_wq); @@ -991,7 +996,7 @@ void nfc_llcp_mac_is_down(struct nfc_dev *dev) nfc_llcp_clear_sdp(local); /* Close and purge all existing sockets */ - nfc_llcp_socket_release(local); + nfc_llcp_socket_release(local, true); } void nfc_llcp_mac_is_up(struct nfc_dev *dev, u32 target_idx,