Browse Source

fix memory leak in fixed btusb_close

If the waker is killed before it can replay outstanding URBs, these URBs
won't be freed or will be replayed at the next open.  This patch closes
the window by explicitely discarding outstanding URBs.

Signed-off-by: Oliver Neukum <oliver@neukum.org>
Acked-by: Marcel Holtmann <marcel@holtmann.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Oliver Neukum 15 years ago
parent
commit
7b8e2c1db0
1 changed files with 3 additions and 1 deletions
  1. 3 1
      drivers/bluetooth/btusb.c

+ 3 - 1
drivers/bluetooth/btusb.c

@@ -600,11 +600,13 @@ static int btusb_close(struct hci_dev *hdev)
 	btusb_stop_traffic(data);
 	btusb_stop_traffic(data);
 	err = usb_autopm_get_interface(data->intf);
 	err = usb_autopm_get_interface(data->intf);
 	if (err < 0)
 	if (err < 0)
-		return 0;
+		goto failed;
 
 
 	data->intf->needs_remote_wakeup = 0;
 	data->intf->needs_remote_wakeup = 0;
 	usb_autopm_put_interface(data->intf);
 	usb_autopm_put_interface(data->intf);
 
 
+failed:
+	usb_scuttle_anchored_urbs(&data->deferred);
 	return 0;
 	return 0;
 }
 }