summaryrefslogtreecommitdiffstats
path: root/third_party
diff options
context:
space:
mode:
authordgrogan@chromium.org <dgrogan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-09-23 04:15:09 +0000
committerdgrogan@chromium.org <dgrogan@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-09-23 04:15:09 +0000
commitd34e683c837a2e48a19c576b768ea516b2dfca1f (patch)
tree6f031cd9393542b110bdad1f37cf35984600ef5c /third_party
parent0664b5ab48235d28d61918085c4e7e5cf17251e8 (diff)
downloadchromium_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.cc50
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.