diff options
Diffstat (limited to 'runtime/signal_catcher.h')
| -rw-r--r-- | runtime/signal_catcher.h | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/runtime/signal_catcher.h b/runtime/signal_catcher.h index de6a212df4..8a2a7289de 100644 --- a/runtime/signal_catcher.h +++ b/runtime/signal_catcher.h @@ -17,6 +17,7 @@ #ifndef ART_RUNTIME_SIGNAL_CATCHER_H_ #define ART_RUNTIME_SIGNAL_CATCHER_H_ +#include "android-base/unique_fd.h" #include "base/mutex.h" namespace art { @@ -32,7 +33,17 @@ class Thread; */ class SignalCatcher { public: - explicit SignalCatcher(const std::string& stack_trace_file); + // If |use_tombstoned_stack_trace_fd| is |true|, traces will be + // written to a file descriptor provided by tombstoned. The process + // will communicate with tombstoned via a unix domain socket. This + // mode of stack trace dumping is only supported in an Android + // environment. + // + // If false, all traces will be dumped to |stack_trace_file| if it's + // non-empty. If |stack_trace_file| is empty, all traces will be written + // to the log buffer. + SignalCatcher(const std::string& stack_trace_file, + const bool use_tombstoned_stack_trace_fd); ~SignalCatcher(); void HandleSigQuit() REQUIRES(!Locks::mutator_lock_, !Locks::thread_list_lock_, @@ -43,6 +54,10 @@ class SignalCatcher { // NO_THREAD_SAFETY_ANALYSIS for static function calling into member function with excludes lock. static void* Run(void* arg) NO_THREAD_SAFETY_ANALYSIS; + // NOTE: We're using android::base::unique_fd here for easier + // interoperability with tombstoned client APIs. + bool OpenStackTraceFile(android::base::unique_fd* tombstone_fd, + android::base::unique_fd* output_fd); void HandleSigUsr1(); void Output(const std::string& s); void SetHaltFlag(bool new_value) REQUIRES(!lock_); @@ -50,6 +65,7 @@ class SignalCatcher { int WaitForSignal(Thread* self, SignalSet& signals) REQUIRES(!lock_); std::string stack_trace_file_; + const bool use_tombstoned_stack_trace_fd_; mutable Mutex lock_ DEFAULT_MUTEX_ACQUIRED_AFTER; ConditionVariable cond_ GUARDED_BY(lock_); |