diff --git a/selfdrive/logcatd/logcatd_android.cc b/selfdrive/logcatd/logcatd_android.cc index 5579dc0a32..95a0c7b708 100644 --- a/selfdrive/logcatd/logcatd_android.cc +++ b/selfdrive/logcatd/logcatd_android.cc @@ -7,14 +7,17 @@ int main() { ExitHandler do_exit; - log_time last_log_time = {}; PubMaster pm({"androidLog"}); + + log_time last_log_time = {}; + logger_list *logger_list = android_logger_list_alloc(ANDROID_LOG_RDONLY | ANDROID_LOG_NONBLOCK, 0, 0); + while (!do_exit) { // setup android logging - logger_list *logger_list = last_log_time.tv_sec == 0 ? - android_logger_list_alloc(ANDROID_LOG_RDONLY | ANDROID_LOG_NONBLOCK, 0, 0) : - android_logger_list_alloc_time(ANDROID_LOG_RDONLY | ANDROID_LOG_NONBLOCK, last_log_time, 0); + if (!logger_list) { + logger_list = android_logger_list_alloc_time(ANDROID_LOG_RDONLY | ANDROID_LOG_NONBLOCK, last_log_time, 0); + } assert(logger_list); struct logger *main_logger = android_logger_open(logger_list, LOG_ID_MAIN); @@ -53,7 +56,13 @@ int main() { } android_logger_list_free(logger_list); + logger_list = NULL; util::sleep_for(500); } + + if (logger_list) { + android_logger_list_free(logger_list); + } + return 0; } diff --git a/selfdrive/logcatd/tests/test_logcatd_android.py b/selfdrive/logcatd/tests/test_logcatd_android.py index 552cea5384..a1ca0e2da1 100755 --- a/selfdrive/logcatd/tests/test_logcatd_android.py +++ b/selfdrive/logcatd/tests/test_logcatd_android.py @@ -18,28 +18,30 @@ class TestLogcatdAndroid(unittest.TestCase): time.sleep(1) messaging.drain_sock(sock) - # write some log messages - sent_msgs = {} - for _ in range(random.randint(5, 50)): - msg = ''.join([random.choice(string.ascii_letters) for _ in range(random.randrange(2, 200))]) - sent_msgs[msg] = ''.join([random.choice(string.ascii_letters) for _ in range(random.randrange(2, 20))]) - os.system(f"log -t {sent_msgs[msg]} {msg}") - + for _ in range(random.randint(2, 10)): + # write some log messages + sent_msgs = {} + for __ in range(random.randint(5, 50)): + msg = ''.join([random.choice(string.ascii_letters) for _ in range(random.randrange(2, 200))]) + sent_msgs[msg] = ''.join([random.choice(string.ascii_letters) for _ in range(random.randrange(2, 20))]) + os.system(f"log -t {sent_msgs[msg]} {msg}") + + time.sleep(1) + msgs = messaging.drain_sock(sock) + for m in msgs: + self.assertTrue(m.valid) + self.assertLess(time.monotonic() - (m.logMonoTime / 1e9), 30) + + recv_msg = m.androidLog.message.strip() + if recv_msg not in sent_msgs: + continue + + self.assertEqual(m.androidLog.tag, sent_msgs[recv_msg]) + del sent_msgs[recv_msg] + + # ensure we received all the logs we sent + self.assertEqual(len(sent_msgs), 0) time.sleep(1) - msgs = messaging.drain_sock(sock) - for m in msgs: - self.assertTrue(m.valid) - self.assertLess(time.monotonic() - (m.logMonoTime / 1e9), 30) - - recv_msg = m.androidLog.message.strip() - if recv_msg not in sent_msgs: - continue - - self.assertEqual(m.androidLog.tag, sent_msgs[recv_msg]) - del sent_msgs[recv_msg] - - # ensure we received all the logs we sent - self.assertEqual(len(sent_msgs), 0) if __name__ == "__main__":