Re: [PATCH 2/2] Bluetooth: Remove wait for delayed work to finish
From: Ulisses Furquim <hidden>
Date: 2012-01-18 19:40:15
Hi Andre, On Wed, Jan 18, 2012 at 5:34 PM, Andre Guedes [off-list ref] wrote:
Hi Ulisses, On Wed, Jan 18, 2012 at 9:48 AM, Ulisses Furquim [off-list ref] wrote:quoted
Do not wait for delayed work to finish where it's not needed. In the case of adv_work the handler is already protected by the hdev lock and removing the wait we also avoid introducing deadlocks involving the delayed work lock. Signed-off-by: Ulisses Furquim <redacted> --- net/bluetooth/hci_core.c | 2 +- net/bluetooth/hci_event.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)diff --git a/net/bluetooth/hci_core.c b/net/bluetooth/hci_core.c index a7b7200..b4041be 100644 --- a/net/bluetooth/hci_core.c +++ b/net/bluetooth/hci_core.c@@ -1731,7 +1731,7 @@ void hci_unregister_dev(struct hci_dev *hdev)hci_del_sysfs(hdev); - cancel_delayed_work_sync(&hdev->adv_work); + cancel_delayed_work(&hdev->adv_work);I'm afraid we'll introduce a race condition if we don't use the _sync variant at hci_unregister_dev. If we don't wait adv_work finish it may be running after hdev object is freed.
Indeed, you're right. And I was going through the uses of _sync() and skipped those in paths where we free the object but didn't see this one. Regards, -- Ulisses Furquim ProFUSION embedded systems http://profusion.mobi Mobile: +55 19 9250 0942 Skype: ulissesffs