starrocks/thirdparty/patches/glog-0.4.0-add-handler-afte...

49 lines
1.7 KiB
Diff

diff --git a/src/glog/logging.h.in b/src/glog/logging.h.in
index ff7c1c2..3a1df70 100644
--- a/src/glog/logging.h.in
+++ b/src/glog/logging.h.in
@@ -1662,6 +1662,8 @@ GOOGLE_GLOG_DLL_DECL void InstallFailureSignalHandler();
GOOGLE_GLOG_DLL_DECL void InstallFailureWriter(
void (*writer)(const char* data, int size));
+GOOGLE_GLOG_DLL_DECL void InstallFailureHandlerAfterOutputLog(void (*handler)());
+
@ac_google_end_namespace@
#endif // _LOGGING_H_
diff --git a/src/signalhandler.cc b/src/signalhandler.cc
index 961ee96..ec31c06 100644
--- a/src/signalhandler.cc
+++ b/src/signalhandler.cc
@@ -154,6 +154,8 @@ void WriteToStderr(const char* data, int size) {
// The writer function can be changed by InstallFailureWriter().
void (*g_failure_writer)(const char* data, int size) = WriteToStderr;
+void (*g_failure_handler_after_output_log)() = nullptr;
+
// Dumps time information. We don't dump human-readable time information
// as localtime() is not guaranteed to be async signal safe.
void DumpTimeInfo() {
@@ -347,6 +349,10 @@ void FailureSignalHandler(int signal_number,
// causes problems.
FlushLogFilesUnsafe(0);
+ if (g_failure_handler_after_output_log != nullptr) {
+ (*g_failure_handler_after_output_log)();
+ }
+
// Kill ourself by the default signal handler.
InvokeDefaultSignalHandler(signal_number);
}
@@ -400,4 +406,10 @@ void InstallFailureWriter(void (*writer)(const char* data, int size)) {
#endif // HAVE_SIGACTION
}
+void InstallFailureHandlerAfterOutputLog(void (*handler)()) {
+#if defined(HAVE_SIGACTION) || defined(OS_WINDOWS)
+ g_failure_handler_after_output_log = handler;
+#endif // HAVE_SIGACTION
+}
+
_END_GOOGLE_NAMESPACE_