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
diff --git a/libfdtrack/fdtrack.cpp b/libfdtrack/fdtrack.cpp
index 0b9963f..9506751 100644
--- a/libfdtrack/fdtrack.cpp
+++ b/libfdtrack/fdtrack.cpp
@@ -110,7 +110,11 @@
       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 @@
       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);
 }