Skip to content

Commit

Permalink
[Bluetooth] More checks if DLC is still attached to the TTY
Browse files Browse the repository at this point in the history
If the DLC device is no longer attached to the TTY device, then return
errors or default values for various callbacks of the TTY layer.

Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
  • Loading branch information
Marcel Holtmann authored and David S. Miller committed Jan 9, 2007
1 parent f477756 commit b6e557f
Showing 1 changed file with 15 additions and 7 deletions.
22 changes: 15 additions & 7 deletions net/bluetooth/rfcomm/tty.c
Original file line number Diff line number Diff line change
Expand Up @@ -697,9 +697,13 @@ static int rfcomm_tty_write_room(struct tty_struct *tty)

BT_DBG("tty %p", tty);

if (!dev || !dev->dlc)
return 0;

room = rfcomm_room(dev->dlc) - atomic_read(&dev->wmem_alloc);
if (room < 0)
room = 0;

return room;
}

Expand Down Expand Up @@ -915,24 +919,27 @@ static void rfcomm_tty_unthrottle(struct tty_struct *tty)
static int rfcomm_tty_chars_in_buffer(struct tty_struct *tty)
{
struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
struct rfcomm_dlc *dlc = dev->dlc;

BT_DBG("tty %p dev %p", tty, dev);

if (!skb_queue_empty(&dlc->tx_queue))
return dlc->mtu;
if (!dev || !dev->dlc)
return 0;

if (!skb_queue_empty(&dev->dlc->tx_queue))
return dev->dlc->mtu;

return 0;
}

static void rfcomm_tty_flush_buffer(struct tty_struct *tty)
{
struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
if (!dev)
return;

BT_DBG("tty %p dev %p", tty, dev);

if (!dev || !dev->dlc)
return;

skb_queue_purge(&dev->dlc->tx_queue);

if (test_bit(TTY_DO_WRITE_WAKEUP, &tty->flags) && tty->ldisc.write_wakeup)
Expand All @@ -952,11 +959,12 @@ static void rfcomm_tty_wait_until_sent(struct tty_struct *tty, int timeout)
static void rfcomm_tty_hangup(struct tty_struct *tty)
{
struct rfcomm_dev *dev = (struct rfcomm_dev *) tty->driver_data;
if (!dev)
return;

BT_DBG("tty %p dev %p", tty, dev);

if (!dev)
return;

rfcomm_tty_flush_buffer(tty);

if (test_bit(RFCOMM_RELEASE_ONHUP, &dev->flags))
Expand Down

0 comments on commit b6e557f

Please sign in to comment.