aboutsummaryrefslogtreecommitdiff
path: root/libfdtrack
diff options
context:
space:
mode:
authorJosh Gao <jmgao@google.com>2020-01-28 14:10:19 -0800
committerJosh Gao <jmgao@google.com>2020-01-30 13:55:11 -0800
commit50955c461bbfb35b06ecc3f862e41e50a6eba409 (patch)
tree59306c29d966f39b88729857147f5999695bc142 /libfdtrack
parent759625072270f5b6940dae40c8039867a08eff12 (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.cpp8
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);
}