diff options
author | ericu@chromium.org <ericu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-11 23:20:20 +0000 |
---|---|---|
committer | ericu@chromium.org <ericu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-11 23:20:20 +0000 |
commit | 20ad1df9f2ffb46fdbd0bb7a8062c1063922b686 (patch) | |
tree | e1a88fc346187a358c94e45e933b8817dad8b42d /third_party/leveldatabase | |
parent | b4499fa7591e1ddd88982b4aedfaba75345bccd4 (diff) | |
download | chromium_src-20ad1df9f2ffb46fdbd0bb7a8062c1063922b686.zip chromium_src-20ad1df9f2ffb46fdbd0bb7a8062c1063922b686.tar.gz chromium_src-20ad1df9f2ffb46fdbd0bb7a8062c1063922b686.tar.bz2 |
Call fdatasync even if fflush fails.
Review URL: https://chromiumcodereview.appspot.com/11507012
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@172452 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'third_party/leveldatabase')
-rw-r--r-- | third_party/leveldatabase/env_chromium.cc | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/third_party/leveldatabase/env_chromium.cc b/third_party/leveldatabase/env_chromium.cc index e8ffcfd..b612c17 100644 --- a/third_party/leveldatabase/env_chromium.cc +++ b/third_party/leveldatabase/env_chromium.cc @@ -286,9 +286,17 @@ class ChromiumWritableFile : public WritableFile { virtual Status Sync() { Status result; - if ((fflush_unlocked(file_) != 0) || - (fdatasync(fileno(file_)) != 0)) { - result = Status::IOError(filename_, strerror(errno)); + int error = 0; + + if (fflush_unlocked(file_)) + error = errno; + // Sync even if fflush gave an error; perhaps the data actually got out, + // even though something went wrong. + if (fdatasync(fileno(file_)) && !error) + error = errno; + // Report the first error we found. + if (error) { + result = Status::IOError(filename_, strerror(error)); LogToUMA(kWritableFileSync); } return result; |