Avoid start multiple log watchdog threads
It is observed that `enableWatchDog` might be called after the manager activity is resumed without user's interaction, due to some unknown mechanism of preference refreshing.
This commit is contained in:
parent
e7a5835d8f
commit
583aa30393
|
|
@ -113,7 +113,7 @@ private:
|
|||
|
||||
static size_t PrintLogLine(const AndroidLogEntry &entry, FILE *out);
|
||||
|
||||
void EnsureLogWatchDog();
|
||||
void StartLogWatchDog();
|
||||
|
||||
JNIEnv *env_;
|
||||
jobject thiz_;
|
||||
|
|
@ -243,9 +243,9 @@ void Logcat::ProcessBuffer(struct log_msg *buf) {
|
|||
} else if (msg == "!!refresh_verbose!!"sv) {
|
||||
RefreshFd(true);
|
||||
} else if (msg == "!!start_watchdog!!"sv) {
|
||||
if (!enable_watchdog) StartLogWatchDog();
|
||||
enable_watchdog = true;
|
||||
enable_watchdog.notify_one();
|
||||
EnsureLogWatchDog();
|
||||
} else if (msg == "!!stop_watchdog!!"sv) {
|
||||
enable_watchdog = false;
|
||||
enable_watchdog.notify_one();
|
||||
|
|
@ -260,20 +260,21 @@ void Logcat::ProcessBuffer(struct log_msg *buf) {
|
|||
}
|
||||
}
|
||||
|
||||
void Logcat::EnsureLogWatchDog() {
|
||||
void Logcat::StartLogWatchDog() {
|
||||
constexpr static auto kLogdSizeProp = "persist.logd.size"sv;
|
||||
constexpr static auto kLogdTagProp = "persist.log.tag"sv;
|
||||
constexpr static auto kLogdMainSizeProp = "persist.logd.size.main"sv;
|
||||
constexpr static auto kLogdCrashSizeProp = "persist.logd.size.crash"sv;
|
||||
constexpr static long kErr = -1;
|
||||
std::thread watchdog([this] {
|
||||
Log("[LogWatchDog started]\n");
|
||||
while (true) {
|
||||
enable_watchdog.wait(false); // Blocking current thread until enable_watchdog is true;
|
||||
auto logd_size = GetByteProp(kLogdSizeProp);
|
||||
auto logd_tag = GetStrProp(kLogdTagProp);
|
||||
auto logd_main_size = GetByteProp(kLogdMainSizeProp);
|
||||
auto logd_crash_size = GetByteProp(kLogdCrashSizeProp);
|
||||
Log("[LogWatchDog started] log.tag: " + logd_tag +
|
||||
Log("[LogWatchDog running] log.tag: " + logd_tag +
|
||||
"; logd.[default, main, crash].size: [" + std::to_string(logd_size) + "," +
|
||||
std::to_string(logd_main_size) + "," + std::to_string(logd_crash_size) + "]\n");
|
||||
if (!logd_tag.empty() ||
|
||||
|
|
|
|||
Loading…
Reference in New Issue