Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(77)

Unified Diff: net/base/file_stream_posix.cc

Issue 11030044: Merge 159454 - Flush at the end of local file writing in FileWriter API. (Closed) Base URL: svn://svn.chromium.org/chrome/branches/1271/src/
Patch Set: Created 8 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/base/file_stream_posix.h ('k') | net/base/file_stream_win.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/base/file_stream_posix.cc
===================================================================
--- net/base/file_stream_posix.cc (revision 160294)
+++ net/base/file_stream_posix.cc (working copy)
@@ -231,6 +231,16 @@
return res;
}
+// Flushes a file using FlushFile() and signals the completion.
+void FlushFileAndSignal(base::PlatformFile file,
+ int* result,
+ bool record_uma,
+ base::WaitableEvent* on_io_complete,
+ const net::BoundNetLog& bound_net_log) {
+ *result = FlushFile(file, record_uma, bound_net_log);
+ on_io_complete->Signal();
+}
+
// Called when Read(), Write() or Seek() is completed.
// |result| contains the result or a network error code.
template <typename R>
@@ -588,10 +598,35 @@
bound_net_log_);
}
-int FileStreamPosix::Flush() {
+int FileStreamPosix::Flush(const CompletionCallback& callback) {
if (!IsOpen())
return ERR_UNEXPECTED;
+ // Make sure we're async and we have no other in-flight async operations.
+ DCHECK(open_flags_ & base::PLATFORM_FILE_ASYNC);
+ DCHECK(!weak_ptr_factory_.HasWeakPtrs());
+ DCHECK(!on_io_complete_.get());
+
+ on_io_complete_.reset(new base::WaitableEvent(
+ false /* manual_reset */, false /* initially_signaled */));
+
+ int* result = new int(OK);
+ const bool posted = base::WorkerPool::PostTaskAndReply(
+ FROM_HERE,
+ base::Bind(&FlushFileAndSignal, file_, result,
+ record_uma_, on_io_complete_.get(), bound_net_log_),
+ base::Bind(&OnIOComplete<int>,
+ weak_ptr_factory_.GetWeakPtr(),
+ callback, base::Owned(result)),
+ true /* task is slow */);
+ DCHECK(posted);
+ return ERR_IO_PENDING;
+}
+
+int FileStreamPosix::FlushSync() {
+ if (!IsOpen())
+ return ERR_UNEXPECTED;
+
return FlushFile(file_, record_uma_, bound_net_log_);
}
« no previous file with comments | « net/base/file_stream_posix.h ('k') | net/base/file_stream_win.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698