diff --git a/universal7885-common/apps/aidl-support/fm/default/FMDevControl.cpp b/universal7885-common/apps/aidl-support/fm/default/FMDevControl.cpp index 63ebe79..56bd42c 100644 --- a/universal7885-common/apps/aidl-support/fm/default/FMDevControl.cpp +++ b/universal7885-common/apps/aidl-support/fm/default/FMDevControl.cpp @@ -138,15 +138,14 @@ namespace aidl::vendor::eureka::hardware::fmradio { } case SetType::SET_TYPE_FM_SEARCH_START: lock.unlock(); - search_thread = std::thread([this] { + search_thread = new std::thread([this] { const std::lock_guard guard(lock); freqs_list = fm_radio_slsi::get_freqs(fd); std::sort(freqs_list.begin(), freqs_list.end(), std::less()); }); - search_thread.detach(); break; case SetType::SET_TYPE_FM_APP_PID: { - client_observe_thread = std::thread([=] { + client_observe_thread = new std::thread([=] { pid_t pid = value; LOG_D("FM_APP_PID: received value %d", pid); @@ -158,7 +157,6 @@ namespace aidl::vendor::eureka::hardware::fmradio { fm_radio_slsi::fm_thread_set(fd, 0); close(); }); - client_observe_thread.detach(); break; } default: diff --git a/universal7885-common/apps/aidl-support/fm/default/FMDevControl.h b/universal7885-common/apps/aidl-support/fm/default/FMDevControl.h index 12a03dc..e9028c6 100644 --- a/universal7885-common/apps/aidl-support/fm/default/FMDevControl.h +++ b/universal7885-common/apps/aidl-support/fm/default/FMDevControl.h @@ -38,7 +38,7 @@ struct FMDevControl : public BnFMDevControl { int fd; unsigned int index; std::timed_mutex lock; - std::thread search_thread, client_observe_thread; + std::thread *search_thread, *client_observe_thread; std::vector freqs_list; middlestate_t *kMiddleState; }; diff --git a/universal7885-common/apps/aidl-support/fm/default/FMSupport.cpp b/universal7885-common/apps/aidl-support/fm/default/FMSupport.cpp index e5d297e..ae958d3 100644 --- a/universal7885-common/apps/aidl-support/fm/default/FMSupport.cpp +++ b/universal7885-common/apps/aidl-support/fm/default/FMSupport.cpp @@ -101,7 +101,7 @@ constexpr const char *FM_FREQ_SEEK = FM_SYSFS_BASE "/radio_freq_seek"; NOT_SUPPORTED; case SetType::SET_TYPE_FM_SEARCH_START: lock.unlock(); - search_thread = std::thread([this] { + search_thread = new 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)); @@ -111,7 +111,6 @@ constexpr const char *FM_FREQ_SEEK = FM_SYSFS_BASE "/radio_freq_seek"; } std::sort(freqs_list.begin(), freqs_list.end(), std::less()); }); - search_thread.detach(); break; default: break; diff --git a/universal7885-common/apps/aidl-support/fm/default/FMSupport.h b/universal7885-common/apps/aidl-support/fm/default/FMSupport.h index 78879c7..177ddf9 100644 --- a/universal7885-common/apps/aidl-support/fm/default/FMSupport.h +++ b/universal7885-common/apps/aidl-support/fm/default/FMSupport.h @@ -35,7 +35,7 @@ public: ::ndk::ScopedAStatus close(void) override; private: std::timed_mutex lock; - std::thread search_thread; + std::thread *search_thread; std::vector freqs_list; unsigned int index; middlestate_t *kMiddleState; diff --git a/universal7885-common/apps/aidl-support/fm/default/libfm_slsi-impl/FMDeviceControl.cpp b/universal7885-common/apps/aidl-support/fm/default/libfm_slsi-impl/FMDeviceControl.cpp index 847d84e..016e91c 100644 --- a/universal7885-common/apps/aidl-support/fm/default/libfm_slsi-impl/FMDeviceControl.cpp +++ b/universal7885-common/apps/aidl-support/fm/default/libfm_slsi-impl/FMDeviceControl.cpp @@ -18,6 +18,7 @@ namespace fm_radio_slsi { static bool FMThread = false; +static std::thread *poll_thread = nullptr; constexpr const char *FM_DEV_PATH = "/dev/radio0"; @@ -227,8 +228,9 @@ static void fm_thread(int fd) { void fm_thread_set(const int fd, const bool enable) { FMThread = enable; if (enable) { - std::thread thread = std::thread(fm_thread, fd); - thread.detach(); + poll_thread = new std::thread(fm_thread, fd); + } else { + poll_thread = nullptr; } }