Bluetooth: create channel timer to replace sk_timer
The new timer does not belong to struct sock, tought it still touch some sock things, but this will be sorted out soon. Signed-off-by: Gustavo F. Padovan <padovan@profusion.mobi>
This commit is contained in:
@ -32,52 +32,6 @@
|
||||
|
||||
static const struct proto_ops l2cap_sock_ops;
|
||||
|
||||
/* ---- L2CAP timers ---- */
|
||||
static void l2cap_sock_timeout(unsigned long arg)
|
||||
{
|
||||
struct sock *sk = (struct sock *) arg;
|
||||
int reason;
|
||||
|
||||
BT_DBG("sock %p state %d", sk, sk->sk_state);
|
||||
|
||||
bh_lock_sock(sk);
|
||||
|
||||
if (sock_owned_by_user(sk)) {
|
||||
/* sk is owned by user. Try again later */
|
||||
l2cap_sock_set_timer(sk, HZ / 5);
|
||||
bh_unlock_sock(sk);
|
||||
sock_put(sk);
|
||||
return;
|
||||
}
|
||||
|
||||
if (sk->sk_state == BT_CONNECTED || sk->sk_state == BT_CONFIG)
|
||||
reason = ECONNREFUSED;
|
||||
else if (sk->sk_state == BT_CONNECT &&
|
||||
l2cap_pi(sk)->chan->sec_level != BT_SECURITY_SDP)
|
||||
reason = ECONNREFUSED;
|
||||
else
|
||||
reason = ETIMEDOUT;
|
||||
|
||||
__l2cap_chan_close(l2cap_pi(sk)->chan, reason);
|
||||
|
||||
bh_unlock_sock(sk);
|
||||
|
||||
l2cap_sock_kill(sk);
|
||||
sock_put(sk);
|
||||
}
|
||||
|
||||
void l2cap_sock_set_timer(struct sock *sk, long timeout)
|
||||
{
|
||||
BT_DBG("sk %p state %d timeout %ld", sk, sk->sk_state, timeout);
|
||||
sk_reset_timer(sk, &sk->sk_timer, jiffies + timeout);
|
||||
}
|
||||
|
||||
void l2cap_sock_clear_timer(struct sock *sk)
|
||||
{
|
||||
BT_DBG("sock %p state %d", sk, sk->sk_state);
|
||||
sk_stop_timer(sk, &sk->sk_timer);
|
||||
}
|
||||
|
||||
static int l2cap_sock_bind(struct socket *sock, struct sockaddr *addr, int alen)
|
||||
{
|
||||
struct sock *sk = sock->sk;
|
||||
@ -753,7 +707,7 @@ static int l2cap_sock_shutdown(struct socket *sock, int how)
|
||||
err = __l2cap_wait_ack(sk);
|
||||
|
||||
sk->sk_shutdown = SHUTDOWN_MASK;
|
||||
l2cap_sock_clear_timer(sk);
|
||||
l2cap_chan_clear_timer(chan);
|
||||
__l2cap_chan_close(chan, 0);
|
||||
|
||||
if (sock_flag(sk, SOCK_LINGER) && sk->sk_lingertime)
|
||||
@ -879,8 +833,6 @@ struct sock *l2cap_sock_alloc(struct net *net, struct socket *sock, int proto, g
|
||||
sk->sk_protocol = proto;
|
||||
sk->sk_state = BT_OPEN;
|
||||
|
||||
setup_timer(&sk->sk_timer, l2cap_sock_timeout, (unsigned long) sk);
|
||||
|
||||
return sk;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user