diff options
author | dgrogan@chromium.org <dgrogan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-09-23 04:15:09 +0000 |
---|---|---|
committer | dgrogan@chromium.org <dgrogan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-09-23 04:15:09 +0000 |
commit | d34e683c837a2e48a19c576b768ea516b2dfca1f (patch) | |
tree | 6f031cd9393542b110bdad1f37cf35984600ef5c /third_party | |
parent | 0664b5ab48235d28d61918085c4e7e5cf17251e8 (diff) | |
download | chromium_src-d34e683c837a2e48a19c576b768ea516b2dfca1f.zip chromium_src-d34e683c837a2e48a19c576b768ea516b2dfca1f.tar.gz chromium_src-d34e683c837a2e48a19c576b768ea516b2dfca1f.tar.bz2 |
Remove locks from leveldb's stdio on linux/CrOS.
After being in stable for a few weeks it has not found any unsafe thread
usage.
BUG=230154
Review URL: https://chromiumcodereview.appspot.com/23440039
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@224649 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'third_party')
-rw-r--r-- | third_party/leveldatabase/env_chromium.cc | 50 |
1 files changed, 7 insertions, 43 deletions
diff --git a/third_party/leveldatabase/env_chromium.cc b/third_party/leveldatabase/env_chromium.cc index ed0acfd..f36d691 100644 --- a/third_party/leveldatabase/env_chromium.cc +++ b/third_party/leveldatabase/env_chromium.cc @@ -51,15 +51,15 @@ namespace { #if (defined(OS_POSIX) && !defined(OS_LINUX)) || defined(OS_WIN) // The following are glibc-specific -size_t fread_wrapper(void *ptr, size_t size, size_t n, FILE *file) { +size_t fread_unlocked(void *ptr, size_t size, size_t n, FILE *file) { return fread(ptr, size, n, file); } -size_t fwrite_wrapper(const void *ptr, size_t size, size_t n, FILE *file) { +size_t fwrite_unlocked(const void *ptr, size_t size, size_t n, FILE *file) { return fwrite(ptr, size, n, file); } -int fflush_wrapper(FILE *file) { +int fflush_unlocked(FILE *file) { return fflush(file); } @@ -73,42 +73,6 @@ int fdatasync(int fildes) { } #endif -#else - -class TryToLockFILE { - // This class should be deleted if it doesn't turn up anything useful after - // going to stable (chrome 29). - public: - TryToLockFILE(FILE* file) : file_to_unlock_(NULL) { - if (ftrylockfile(file) == 0) - file_to_unlock_ = file; - else - UMA_HISTOGRAM_BOOLEAN("LevelDBEnv.All.SafeThreadAccess", false); - } - ~TryToLockFILE() { - if (file_to_unlock_) - funlockfile(file_to_unlock_); - } - - private: - FILE* file_to_unlock_; -}; - -size_t fread_wrapper(void *ptr, size_t size, size_t n, FILE *file) { - TryToLockFILE lock(file); - return fread_unlocked(ptr, size, n, file); -} - -size_t fwrite_wrapper(const void *ptr, size_t size, size_t n, FILE *file) { - TryToLockFILE lock(file); - return fwrite_unlocked(ptr, size, n, file); -} - -int fflush_wrapper(FILE *file) { - TryToLockFILE lock(file); - return fflush_unlocked(file); -} - #endif // Wide-char safe fopen wrapper. @@ -188,7 +152,7 @@ class ChromiumSequentialFile: public SequentialFile { virtual Status Read(size_t n, Slice* result, char* scratch) { Status s; - size_t r = fread_wrapper(scratch, 1, n, file_); + size_t r = fread_unlocked(scratch, 1, n, file_); *result = Slice(scratch, r); if (r < n) { if (feof(file_)) { @@ -474,7 +438,7 @@ Status ChromiumWritableFile::Append(const Slice& data) { tracker_->DidSyncDir(filename_); } - size_t r = fwrite_wrapper(data.data(), 1, data.size(), file_); + size_t r = fwrite_unlocked(data.data(), 1, data.size(), file_); if (r != data.size()) { int saved_errno = errno; uma_logger_->RecordOSError(kWritableFileAppend, saved_errno); @@ -496,7 +460,7 @@ Status ChromiumWritableFile::Close() { Status ChromiumWritableFile::Flush() { Status result; - if (HANDLE_EINTR(fflush_wrapper(file_))) { + if (HANDLE_EINTR(fflush_unlocked(file_))) { int saved_errno = errno; result = MakeIOError( filename_, strerror(saved_errno), kWritableFileFlush, saved_errno); @@ -510,7 +474,7 @@ Status ChromiumWritableFile::Sync() { Status result; int error = 0; - if (HANDLE_EINTR(fflush_wrapper(file_))) + if (HANDLE_EINTR(fflush_unlocked(file_))) error = errno; // Sync even if fflush gave an error; perhaps the data actually got out, // even though something went wrong. |