Prevent hang due to HandleUnexpectedSignal reentry

Change-Id: I0fe6a9b642e8d866aba893906c36bca6f1a4334e
diff --git a/src/logging.cc b/src/logging.cc
index 9dde963..12d1fa4 100644
--- a/src/logging.cc
+++ b/src/logging.cc
@@ -94,6 +94,15 @@
   }
 }
 
+LogMessageData::LogMessageData(const char* file, int line, LogSeverity severity, int error)
+    : file(file),
+      line_number(line),
+      severity(severity),
+      error(error) {
+  const char* last_slash = strrchr(file, '/');
+  file = (last_slash == NULL) ? file : last_slash + 1;
+}
+
 LogMessage::~LogMessage() {
   if (data_->severity < gMinimumLogSeverity) {
     return; // No need to format something we're not going to output.
@@ -109,14 +118,14 @@
   {
     MutexLock mu(Thread::Current(), *Locks::logging_lock_);
     if (msg.find('\n') == std::string::npos) {
-      LogLine(msg.c_str());
+      LogLine(*data_, msg.c_str());
     } else {
       msg += '\n';
       size_t i = 0;
       while (i < msg.size()) {
         size_t nl = msg.find('\n', i);
         msg[nl] = '\0';
-        LogLine(&msg[i]);
+        LogLine(*data_, &msg[i]);
         i = nl + 1;
       }
     }