diff options
author | Tianjie Xu <xunchang@google.com> | 2017-06-09 02:56:38 +0200 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2017-06-09 02:56:39 +0200 |
commit | 8e5fb46e875e2e5c3656c4811d90408102ed3a96 (patch) | |
tree | a7bbca448c95438c9832fb8067feecd8c4197508 | |
parent | Merge "kill package_extract_dir" (diff) | |
parent | Fix a race condition for temperature_logger (diff) | |
download | android_bootable_recovery-8e5fb46e875e2e5c3656c4811d90408102ed3a96.tar android_bootable_recovery-8e5fb46e875e2e5c3656c4811d90408102ed3a96.tar.gz android_bootable_recovery-8e5fb46e875e2e5c3656c4811d90408102ed3a96.tar.bz2 android_bootable_recovery-8e5fb46e875e2e5c3656c4811d90408102ed3a96.tar.lz android_bootable_recovery-8e5fb46e875e2e5c3656c4811d90408102ed3a96.tar.xz android_bootable_recovery-8e5fb46e875e2e5c3656c4811d90408102ed3a96.tar.zst android_bootable_recovery-8e5fb46e875e2e5c3656c4811d90408102ed3a96.zip |
Diffstat (limited to '')
-rw-r--r-- | install.cpp | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/install.cpp b/install.cpp index a1f2e4fbd..db4ba9373 100644 --- a/install.cpp +++ b/install.cpp @@ -27,6 +27,7 @@ #include <unistd.h> #include <algorithm> +#include <atomic> #include <chrono> #include <condition_variable> #include <functional> @@ -294,11 +295,12 @@ int update_binary_command(const std::string& package, ZipArchiveHandle zip, } #endif // !AB_OTA_UPDATER -static void log_max_temperature(int* max_temperature) { +static void log_max_temperature(int* max_temperature, const std::atomic<bool>& logger_finished) { CHECK(max_temperature != nullptr); std::mutex mtx; std::unique_lock<std::mutex> lck(mtx); - while (finish_log_temperature.wait_for(lck, 20s) == std::cv_status::timeout) { + while (!logger_finished.load() && + finish_log_temperature.wait_for(lck, 20s) == std::cv_status::timeout) { *max_temperature = std::max(*max_temperature, GetMaxValueFromThermalZone()); } } @@ -403,7 +405,8 @@ static int try_update_binary(const std::string& package, ZipArchiveHandle zip, b } close(pipefd[1]); - std::thread temperature_logger(log_max_temperature, max_temperature); + std::atomic<bool> logger_finished(false); + std::thread temperature_logger(log_max_temperature, max_temperature, std::ref(logger_finished)); *wipe_cache = false; bool retry_update = false; @@ -467,6 +470,7 @@ static int try_update_binary(const std::string& package, ZipArchiveHandle zip, b int status; waitpid(pid, &status, 0); + logger_finished.store(true); finish_log_temperature.notify_one(); temperature_logger.join(); |