diff --git a/universal7885-common/apps/aidl-support/fm/default/FMDevControl.cpp b/universal7885-common/apps/aidl-support/fm/default/FMDevControl.cpp index 24157ad..25e5470 100644 --- a/universal7885-common/apps/aidl-support/fm/default/FMDevControl.cpp +++ b/universal7885-common/apps/aidl-support/fm/default/FMDevControl.cpp @@ -123,9 +123,10 @@ namespace aidl::vendor::eureka::hardware::fmradio { svc->setParam(value ? "routing=2": "routing=8"); break; case SetType::SET_TYPE_FM_SEARCH_START: + lock.unlock(); search_thread = std::thread([this] { + const std::lock_guard guard(lock); freqs_list = fm_radio_slsi::get_freqs(fd); - lock.unlock(); }); break; default: diff --git a/universal7885-common/apps/aidl-support/fm/default/FMSupport.cpp b/universal7885-common/apps/aidl-support/fm/default/FMSupport.cpp index b7b3693..0f22ad0 100644 --- a/universal7885-common/apps/aidl-support/fm/default/FMSupport.cpp +++ b/universal7885-common/apps/aidl-support/fm/default/FMSupport.cpp @@ -99,14 +99,15 @@ constexpr const char *FM_FREQ_SEEK = FM_SYSFS_BASE "/radio_freq_seek"; case SetType::SET_TYPE_FM_SPEAKER_ROUTE: NOT_SUPPORTED; case SetType::SET_TYPE_FM_SEARCH_START: + lock.unlock(); search_thread = std::thread([this] { + const std::lock_guard guard(lock); for (int i = 0; i < TRACK_SIZE; i++) { FileIO::writeline(FM_FREQ_SEEK, "1 " + std::to_string(SYSFS_SPACING * 10)); int freq = FileIO::readline(FM_FREQ_CTL); if (std::find(freqs_list.begin(), freqs_list.end(), freq) != freqs_list.end()) continue; freqs_list.push_back(freq); } - lock.unlock(); }); break; default: