diff --git a/lib/Support/LockFileManager.cpp b/lib/Support/LockFileManager.cpp
index b1ff22c..eeec274 100644
--- a/lib/Support/LockFileManager.cpp
+++ b/lib/Support/LockFileManager.cpp
@@ -38,14 +38,16 @@
   // Read the owning host and PID out of the lock file. If it appears that the
   // owning process is dead, the lock file is invalid.
   OwningPtr<MemoryBuffer> MB;
-  if (MemoryBuffer::getFile(LockFileName, MB)) {
-    StringRef Hostname;
-    StringRef PIDStr;
-    tie(Hostname, PIDStr) = getToken(MB->getBuffer(), " ");
-    int PID;
-    if (PIDStr.getAsInteger(10, PID))
-      return std::make_pair(std::string(Hostname), PID);
-  }
+  if (MemoryBuffer::getFile(LockFileName, MB))
+    return None;
+
+  StringRef Hostname;
+  StringRef PIDStr;
+  tie(Hostname, PIDStr) = getToken(MB->getBuffer(), " ");
+  PIDStr = PIDStr.substr(PIDStr.find_first_not_of(" "));
+  int PID;
+  if (!PIDStr.getAsInteger(10, PID))
+    return std::make_pair(std::string(Hostname), PID);
 
   // Delete the lock file. It's invalid anyway.
   sys::fs::remove(LockFileName);
diff --git a/unittests/Support/CMakeLists.txt b/unittests/Support/CMakeLists.txt
index 5f26d5d..197561e 100644
--- a/unittests/Support/CMakeLists.txt
+++ b/unittests/Support/CMakeLists.txt
@@ -20,6 +20,7 @@
   IntegersSubsetTest.cpp
   LeakDetectorTest.cpp
   LocaleTest.cpp
+  LockFileManagerTest.cpp
   ManagedStatic.cpp
   MathExtrasTest.cpp
   MD5Test.cpp
diff --git a/unittests/Support/LockFileManagerTest.cpp b/unittests/Support/LockFileManagerTest.cpp
new file mode 100644
index 0000000..5c73b9f
--- /dev/null
+++ b/unittests/Support/LockFileManagerTest.cpp
@@ -0,0 +1,48 @@
+//===- unittests/LockFileManagerTest.cpp - LockFileManager tests ----------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+
+#include "llvm/Support/LockFileManager.h"
+#include "llvm/Support/FileSystem.h"
+#include "llvm/Support/Path.h"
+
+#include "gtest/gtest.h"
+
+#include <memory>
+
+using namespace llvm;
+
+namespace {
+
+TEST(LockFileManagerTest, Basic) {
+  SmallString<64> TmpDir;
+  error_code EC;
+  EC = sys::fs::createUniqueDirectory("LockFileManagerTestDir", TmpDir);
+  ASSERT_FALSE(EC);
+
+  SmallString<64> LockedFile(TmpDir);
+  sys::path::append(LockedFile, "file.lock");
+
+  {
+    // The lock file should not exist, so we should successfully acquire it.
+    LockFileManager Locked1(LockedFile);
+    EXPECT_EQ(LockFileManager::LFS_Owned, Locked1.getState());
+
+    // Attempting to reacquire the lock should fail.  Waiting on it would cause
+    // deadlock, so don't try that.
+    LockFileManager Locked2(LockedFile);
+    EXPECT_NE(LockFileManager::LFS_Owned, Locked2.getState());
+  }
+
+  // Now that the lock is out of scope, the file should be gone.
+  EXPECT_FALSE(sys::fs::exists(StringRef(LockedFile)));
+
+  sys::fs::remove_all(StringRef(TmpDir));
+}
+
+} // end anonymous namespace
