summaryrefslogtreecommitdiffstats
path: root/debuggerd
diff options
context:
space:
mode:
authorTreehugger Robot <treehugger-gerrit@google.com>2018-10-31 06:05:28 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2018-10-31 06:05:28 +0000
commite26b8b0181337c436e0a2601b80c17dcdff96d0e (patch)
tree8aeee25543d83a015c37d29bcbb834de2725c08e /debuggerd
parent3e3797a947e9aaeeaffd333630080e3a32c6f1c6 (diff)
parent08163cb0321aef9a8a154025649f62b0ae3c43ff (diff)
downloadsystem_core-e26b8b0181337c436e0a2601b80c17dcdff96d0e.tar.gz
system_core-e26b8b0181337c436e0a2601b80c17dcdff96d0e.tar.bz2
system_core-e26b8b0181337c436e0a2601b80c17dcdff96d0e.zip
Merge "debuggerd_fallback: fix fd leak."
Diffstat (limited to 'debuggerd')
-rw-r--r--debuggerd/handler/debuggerd_fallback.cpp5
1 files changed, 3 insertions, 2 deletions
diff --git a/debuggerd/handler/debuggerd_fallback.cpp b/debuggerd/handler/debuggerd_fallback.cpp
index ed7423b37..15c02651c 100644
--- a/debuggerd/handler/debuggerd_fallback.cpp
+++ b/debuggerd/handler/debuggerd_fallback.cpp
@@ -250,11 +250,12 @@ static void trace_handler(siginfo_t* info, ucontext_t* ucontext) {
}
uint64_t expected = pack_thread_fd(-1, -1);
- if (!trace_output.compare_exchange_strong(expected,
- pack_thread_fd(tid, pipe_write.release()))) {
+ int sent_fd = pipe_write.release();
+ if (!trace_output.compare_exchange_strong(expected, pack_thread_fd(tid, sent_fd))) {
auto [tid, fd] = unpack_thread_fd(expected);
async_safe_format_log(ANDROID_LOG_ERROR, "libc",
"thread %d is already outputting to fd %d?", tid, fd);
+ close(sent_fd);
return false;
}