]> git.hungrycats.org Git - linux/commitdiff
Bluetooth: Fix poll() misbehavior when using BT_DEFER_SETUP zygo-2.6.29.4-zb5s
authorMarcel Holtmann <marcel@holtmann.org>
Mon, 16 Feb 2009 01:57:30 +0000 (02:57 +0100)
committerZygo Blaxell <zblaxell@feedme.hungrycats.org>
Mon, 8 Jun 2009 20:59:18 +0000 (16:59 -0400)
When BT_DEFER_SETUP has been enabled on a Bluetooth socket it keeps
signaling POLLIN all the time. This is a wrong behavior. The POLLIN
should only be signaled if the client socket is in BT_CONNECT2 state
and the parent has been BT_DEFER_SETUP enabled.

Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
(cherry picked from commit d5f2d2be68876f65dd051b978a7b66265fde9ffd)

net/bluetooth/af_bluetooth.c

index 744ed3f07ef38374f6c1b0480d56954d4cf77eac..f42923fa8b7b9395bc2da4d59dcfd1b55a50b318 100644 (file)
@@ -277,7 +277,9 @@ static inline unsigned int bt_accept_poll(struct sock *parent)
 
        list_for_each_safe(p, n, &bt_sk(parent)->accept_q) {
                sk = (struct sock *) list_entry(p, struct bt_sock, accept_q);
-               if (sk->sk_state == BT_CONNECTED)
+               if (sk->sk_state == BT_CONNECTED ||
+                                       (bt_sk(parent)->defer_setup &&
+                                               sk->sk_state == BT_CONNECT2))
                        return POLLIN | POLLRDNORM;
        }