summaryrefslogtreecommitdiffstats
path: root/third_party/leveldatabase
diff options
context:
space:
mode:
authorericu@chromium.org <ericu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-12-11 23:20:20 +0000
committerericu@chromium.org <ericu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-12-11 23:20:20 +0000
commit20ad1df9f2ffb46fdbd0bb7a8062c1063922b686 (patch)
treee1a88fc346187a358c94e45e933b8817dad8b42d /third_party/leveldatabase
parentb4499fa7591e1ddd88982b4aedfaba75345bccd4 (diff)
downloadchromium_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.cc14
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;