You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mesos.apache.org by vi...@apache.org on 2014/08/16 19:35:50 UTC

git commit: Added missing stout/glog.hpp.

Repository: mesos
Updated Branches:
  refs/heads/master dd990c53c -> 0bc57b89a


Added missing stout/glog.hpp.


Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/0bc57b89
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/0bc57b89
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/0bc57b89

Branch: refs/heads/master
Commit: 0bc57b89a279df933439c075f929835db5404f34
Parents: dd990c5
Author: Vinod Kone <vi...@gmail.com>
Authored: Sat Aug 16 10:35:28 2014 -0700
Committer: Vinod Kone <vi...@gmail.com>
Committed: Sat Aug 16 10:35:28 2014 -0700

----------------------------------------------------------------------
 .../3rdparty/stout/include/stout/glog.hpp       | 94 ++++++++++++++++++++
 1 file changed, 94 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/mesos/blob/0bc57b89/3rdparty/libprocess/3rdparty/stout/include/stout/glog.hpp
----------------------------------------------------------------------
diff --git a/3rdparty/libprocess/3rdparty/stout/include/stout/glog.hpp b/3rdparty/libprocess/3rdparty/stout/include/stout/glog.hpp
new file mode 100644
index 0000000..5f763e5
--- /dev/null
+++ b/3rdparty/libprocess/3rdparty/stout/include/stout/glog.hpp
@@ -0,0 +1,94 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef __STOUT_GLOG_HPP__
+#define __STOUT_GLOG_HPP__
+
+#include <signal.h> // For sigaction(), sigemptyset().
+#include <string.h> // For strsignal().
+
+#include <glog/logging.h>
+#include <glog/raw_logging.h>
+
+#include <string>
+
+#include <glog/logging.h> // Includes LOG(*), PLOG(*), CHECK, etc.
+
+// NOTE: We use RAW_LOG instead of LOG because RAW_LOG doesn't
+// allocate any memory or grab locks. And according to
+// https://code.google.com/p/google-glog/issues/detail?id=161
+// it should work in 'most' cases in signal handlers.
+namespace internal {
+
+inline void handler(int signal)
+{
+  if (signal == SIGTERM) {
+    RAW_LOG(WARNING, "Received signal SIGTERM; exiting.");
+
+    // Setup the default handler for SIGTERM so that we don't print
+    // a stack trace.
+    struct sigaction action;
+    memset(&action, 0, sizeof(action));
+    sigemptyset(&action.sa_mask);
+    action.sa_handler = SIG_DFL;
+    sigaction(signal, &action, NULL);
+    raise(signal);
+  } else if (signal == SIGPIPE) {
+    RAW_LOG(WARNING, "Received signal SIGPIPE; escalating to SIGABRT");
+    raise(SIGABRT);
+  } else {
+    RAW_LOG(FATAL, "Unexpected signal in signal handler: %d", signal);
+  }
+}
+
+} // namespace internal {
+
+
+// Installs failure handlers for signals (SIGSEGV, SIGILL, SIGFPE, SIGABRT
+// and SIGBUS) to print stack traces.
+// NOTE: SIGPIPE is escalated to SIGABRT to get a stack trace.
+inline void installFailureSignalHandler()
+{
+  // Handles SIGSEGV, SIGILL, SIGFPE, SIGABRT, SIGBUS, SIGTERM
+  // by default.
+  google::InstallFailureSignalHandler();
+
+  // Set up our custom signal handlers.
+  struct sigaction action;
+  action.sa_handler = internal::handler;
+
+  // Do not block additional signals while in the handler.
+  sigemptyset(&action.sa_mask);
+  action.sa_flags = 0;
+
+  // Set up the SIGPIPE signal handler to escalate to SIGABRT
+  // in order to have the glog handler catch it and print all
+  // of its lovely information.
+  if (sigaction(SIGPIPE, &action, NULL) < 0) {
+    PLOG(FATAL) << "Failed to set sigaction";
+  }
+
+  // We also do not want SIGTERM to dump a stacktrace, as this
+  // can imply that we crashed, when we were in fact terminated
+  // by user request.
+  if (sigaction(SIGTERM, &action, NULL) < 0) {
+    PLOG(FATAL) << "Failed to set sigaction";
+  }
+}
+
+#endif // __STOUT_GLOG_HPP__