From 29781f7a0fb3c9bc2461a670a954c61ef5646cd9 Mon Sep 17 00:00:00 2001 From: LoveSy Date: Sun, 16 Jan 2022 00:00:15 +0800 Subject: [PATCH] Fix endless loop after resetting log prop (#1536) --- daemon/src/main/cpp/logcat.cpp | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/daemon/src/main/cpp/logcat.cpp b/daemon/src/main/cpp/logcat.cpp index 527fba42..716577f9 100644 --- a/daemon/src/main/cpp/logcat.cpp +++ b/daemon/src/main/cpp/logcat.cpp @@ -14,11 +14,7 @@ using namespace std::string_view_literals; using namespace std::chrono_literals; constexpr size_t kMaxLogSize = 4 * 1024 * 1024; -#ifdef NDEBUG -constexpr size_t kLogBufferSize = 256 * 1024; -#else -constexpr size_t kLogBufferSize = 4 * 1024 * 1024; -#endif +constexpr size_t kLogBufferSize = 64 * 1024; namespace { constexpr std::array kLogChar = { @@ -265,16 +261,19 @@ void Logcat::EnsureLogWatchDog() { (logd_main_size != kErr && logd_main_size >= kLogBufferSize && logd_crash_size != kErr && logd_crash_size >= kLogBufferSize))) { - SetIntProp(kLogdSizeProp, kLogBufferSize); - SetIntProp(kLogdMainSizeProp, kLogBufferSize); - SetIntProp(kLogdCrashSizeProp, kLogBufferSize); + SetIntProp(kLogdSizeProp, std::max(kLogBufferSize, logd_size)); + SetIntProp(kLogdMainSizeProp, std::max(kLogBufferSize, logd_main_size)); + SetIntProp(kLogdCrashSizeProp, std::max(kLogBufferSize, logd_crash_size)); SetStrProp(kLogdTagProp, ""); SetStrProp("ctl.start", "logd-reinit"); - Log("Reset log settings\n"); } const auto *pi = __system_property_find(kLogdTagProp.data()); uint32_t serial; - if (!__system_property_wait(pi, 0, &serial, nullptr)) break; + __system_property_read_callback(pi, [](auto *c, auto, auto, auto s) { + *reinterpret_cast(c) = s; + }, &serial); + if (!__system_property_wait(pi, serial, &serial, nullptr)) break; + Log("\nResetting log settings\n"); } }).detach(); }