diff options
| -rw-r--r-- | cmds/lshal/Timeout.h | 10 | ||||
| -rw-r--r-- | cmds/lshal/main.cpp | 1 |
2 files changed, 8 insertions, 3 deletions
diff --git a/cmds/lshal/Timeout.h b/cmds/lshal/Timeout.h index e8d22d9b58..012a5d54aa 100644 --- a/cmds/lshal/Timeout.h +++ b/cmds/lshal/Timeout.h @@ -72,10 +72,14 @@ bool timeout(std::chrono::duration<R, P> delay, std::function<void(void)> &&func return false; } bool success = state.wait(now + delay); - if (!success) { - pthread_kill(thread, SIGINT); + if (success) { + pthread_join(thread, nullptr); + } else { + // b/311143089: Abandon this background thread. Resources for a detached + // thread are cleaned up when it is terminated. If the background thread + // is stalled, it will be terminated when returning from main(). + pthread_detach(thread); } - pthread_join(thread, nullptr); return success; } diff --git a/cmds/lshal/main.cpp b/cmds/lshal/main.cpp index 366c9383a2..a44f467bb1 100644 --- a/cmds/lshal/main.cpp +++ b/cmds/lshal/main.cpp @@ -18,5 +18,6 @@ int main(int argc, char **argv) { using namespace ::android::lshal; + // Background pthreads from timeout() are destroyed upon returning from main(). return Lshal{}.main(Arg{argc, argv}); } |