|
@@ -571,7 +571,7 @@ static unsigned int llcp_sock_poll(struct file *file, struct socket *sock,
|
|
|
if (sk->sk_shutdown == SHUTDOWN_MASK)
|
|
|
mask |= POLLHUP;
|
|
|
|
|
|
- if (sock_writeable(sk))
|
|
|
+ if (sock_writeable(sk) && sk->sk_state == LLCP_CONNECTED)
|
|
|
mask |= POLLOUT | POLLWRNORM | POLLWRBAND;
|
|
|
else
|
|
|
set_bit(SOCK_ASYNC_NOSPACE, &sk->sk_socket->flags);
|
|
@@ -729,14 +729,16 @@ static int llcp_sock_connect(struct socket *sock, struct sockaddr *_addr,
|
|
|
if (ret)
|
|
|
goto sock_unlink;
|
|
|
|
|
|
+ sk->sk_state = LLCP_CONNECTING;
|
|
|
+
|
|
|
ret = sock_wait_state(sk, LLCP_CONNECTED,
|
|
|
sock_sndtimeo(sk, flags & O_NONBLOCK));
|
|
|
- if (ret)
|
|
|
+ if (ret && ret != -EINPROGRESS)
|
|
|
goto sock_unlink;
|
|
|
|
|
|
release_sock(sk);
|
|
|
|
|
|
- return 0;
|
|
|
+ return ret;
|
|
|
|
|
|
sock_unlink:
|
|
|
nfc_llcp_put_ssap(local, llcp_sock->ssap);
|