Fix a deadlock in event/command interaction
authorVinit Deshpande <vinitd@google.com>
Thu, 31 Jul 2014 18:05:14 +0000 (11:05 -0700)
committerVinit Deshpande <vinitd@google.com>
Thu, 31 Jul 2014 18:05:14 +0000 (11:05 -0700)
commit28237f92de2634ec1d529c63b2d61d80e7485c83
tree3ef87f26bdfba13375edb76118750937a6585fee
parent18d4cad266ebda5f90092afd7e4f92e72533f637
Fix a deadlock in event/command interaction

There are two locks, one in HAL which takes care of adding/removing event
handlers from a common data structure; and another in the Framework
which synchronizes access to WifiNative. Commands and events grab these
locks in opposite order, and hence can cause deadlock.

This change fixes the deadlock by holding on to the HAL lock only for
a short time. This is achieved by refcounting the commands so they
don't have to be destroyed while holding locks.

Bug: 16660861

Change-Id: I35f9f688c8c1ddb2116b228c52e0bb1125df0568
bcmdhd/wifi_hal/common.cpp
bcmdhd/wifi_hal/cpp_bindings.h
bcmdhd/wifi_hal/gscan.cpp
bcmdhd/wifi_hal/rtt.cpp
bcmdhd/wifi_hal/wifi_hal.cpp