diff options
| author | Josh Gao <jmgao@google.com> | 2020-01-28 14:10:19 -0800 |
|---|---|---|
| committer | Josh Gao <jmgao@google.com> | 2020-01-30 13:55:11 -0800 |
| commit | 50955c461bbfb35b06ecc3f862e41e50a6eba409 (patch) | |
| tree | 59306c29d966f39b88729857147f5999695bc142 /libfdtrack | |
| parent | 759625072270f5b6940dae40c8039867a08eff12 (diff) | |
fdtrack: make actually async safe.
Test: setprop persist.sys.debug.fdtrack_enable_threshold; stop; start; logcat -c; killall -39 system_server; logcat -d | grep fdtrack
Change-Id: Id9baa54af9e5cfb6e1ee1026f71d7fb41b7c3ad0
Diffstat (limited to 'libfdtrack')
| -rw-r--r-- | libfdtrack/fdtrack.cpp | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/libfdtrack/fdtrack.cpp b/libfdtrack/fdtrack.cpp index 0b9963ff8..9506751c9 100644 --- a/libfdtrack/fdtrack.cpp +++ b/libfdtrack/fdtrack.cpp @@ -110,7 +110,11 @@ void fdtrack_dump() { continue; } - std::lock_guard<std::mutex> lock(entry->mutex); + if (!entry->mutex.try_lock()) { + async_safe_format_log(ANDROID_LOG_WARN, "fdtrack", "fd %d locked, skipping", fd); + continue; + } + if (entry->backtrace.empty()) { continue; } @@ -122,6 +126,8 @@ void fdtrack_dump() { async_safe_format_log(ANDROID_LOG_INFO, "fdtrack", " %zu: %s+%" PRIu64, i - frame_skip, frame.function_name.c_str(), frame.function_offset); } + + entry->mutex.unlock(); } android_fdtrack_set_enabled(prev); } |
