diff options
| author | Ajit Vaishya <ajitv@codeaurora.org> | 2019-04-19 15:16:37 +0530 |
|---|---|---|
| committer | Bruno Martins <bgcngm@gmail.com> | 2019-08-25 21:57:10 +0100 |
| commit | 3a10f7f16ce6db94f8a3012500203638eb956537 (patch) | |
| tree | 3755f10f5d7ff1324480167c3bb6aef48d61360f | |
| parent | aafcb970dbebaad9842ac4eb9f857093d53eecce (diff) | |
| download | android_hardware_interfaces-3a10f7f16ce6db94f8a3012500203638eb956537.tar.gz android_hardware_interfaces-3a10f7f16ce6db94f8a3012500203638eb956537.tar.bz2 android_hardware_interfaces-3a10f7f16ce6db94f8a3012500203638eb956537.zip | |
Wifi: Syncronization on reading and writing ringbuffer
Currently on receiving driver Event, wifi-hal triggered
framework callback to write WLAN driver/firmware logs to
respective ringbuffer and while reading this ringbuffer
from Wifi framework their is no syncronization , so with
this way ring buffer goes to inappropriate state.
This commit introduces to add syncronization between
read and write of ring buffer.
Change-Id: I44c3bdcd43e2bbc3b431fd788ff4887b64145776
CRs-Fixed: 2424315
| -rw-r--r-- | wifi/1.2/default/wifi_chip.cpp | 6 | ||||
| -rw-r--r-- | wifi/1.2/default/wifi_chip.h | 2 |
2 files changed, 8 insertions, 0 deletions
diff --git a/wifi/1.2/default/wifi_chip.cpp b/wifi/1.2/default/wifi_chip.cpp index 1f15fe475..857415e7d 100644 --- a/wifi/1.2/default/wifi_chip.cpp +++ b/wifi/1.2/default/wifi_chip.cpp @@ -1177,6 +1177,8 @@ WifiStatus WifiChip::registerDebugRingBufferCallback() { LOG(ERROR) << "Error converting ring buffer status"; return; } + { + std::unique_lock<std::mutex> lk(shared_ptr_this->lock_t); const auto& target = shared_ptr_this->ringbuffer_map_.find(name); if (target != shared_ptr_this->ringbuffer_map_.end()) { Ringbuffer& cur_buffer = target->second; @@ -1185,6 +1187,7 @@ WifiStatus WifiChip::registerDebugRingBufferCallback() { LOG(ERROR) << "Ringname " << name << " not found"; return; } + } }; legacy_hal::wifi_error legacy_status = legacy_hal_.lock()->registerRingBufferCallbackHandler( @@ -1452,6 +1455,8 @@ bool WifiChip::writeRingbufferFilesInternal() { return false; } // write ringbuffers to file + { + std::unique_lock<std::mutex> lk(lock_t); for (const auto& item : ringbuffer_map_) { const Ringbuffer& cur_buffer = item.second; if (cur_buffer.getData().empty()) { @@ -1472,6 +1477,7 @@ bool WifiChip::writeRingbufferFilesInternal() { } } } + } return true; } diff --git a/wifi/1.2/default/wifi_chip.h b/wifi/1.2/default/wifi_chip.h index 230874775..6a389a4df 100644 --- a/wifi/1.2/default/wifi_chip.h +++ b/wifi/1.2/default/wifi_chip.h @@ -19,6 +19,7 @@ #include <list> #include <map> +#include <mutex> #include <android-base/macros.h> #include <android/hardware/wifi/1.2/IWifiChip.h> @@ -231,6 +232,7 @@ class WifiChip : public V1_2::IWifiChip { bool is_valid_; // Members pertaining to chip configuration. uint32_t current_mode_id_; + std::mutex lock_t; std::vector<IWifiChip::ChipMode> modes_; // The legacy ring buffer callback API has only a global callback // registration mechanism. Use this to check if we have already |
