From 6d243ebf79640525a94fab280efeb5a46c994af6 Mon Sep 17 00:00:00 2001 From: "jorlow@chromium.org" Date: Tue, 22 Mar 2011 19:07:54 +0000 Subject: [PATCH] Make GetTestDirectory threadsafe within Chromium and make it work on Windows. git-svn-id: https://leveldb.googlecode.com/svn/trunk@13 62dab493-f737-651d-591e-8d6aee1b9529 --- util/env_chromium.cc | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/util/env_chromium.cc b/util/env_chromium.cc index 49666f6..fb700ae 100644 --- a/util/env_chromium.cc +++ b/util/env_chromium.cc @@ -60,6 +60,9 @@ namespace { class Thread; +static const ::FilePath::CharType kLevelDBTestDirectoryPrefix[] + = FILE_PATH_LITERAL("leveldb-test-"); + ::FilePath CreateFilePath(const std::string& file_path) { #if defined(OS_WIN) return FilePath(UTF8ToUTF16(file_path)); @@ -391,12 +394,16 @@ class ChromiumEnv : public Env { } virtual Status GetTestDirectory(std::string* path) { + mu_.Acquire(); if (test_directory_.empty()) { - if (!::file_util::CreateNewTempDirectory("leveldb-", &test_directory_)) { + if (!::file_util::CreateNewTempDirectory(kLevelDBTestDirectoryPrefix, + &test_directory_)) { + mu_.Release(); return Status::IOError("Could not create temp directory."); } } *path = FilePathToString(test_directory_); + mu_.Release(); return Status::OK(); }