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

Unified Diff: net/base/file_stream_context.h

Issue 935333002: Update from https://crrev.com/316786 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 10 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/android/network_change_notifier_delegate_android.cc ('k') | net/base/file_stream_context.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/base/file_stream_context.h
diff --git a/net/base/file_stream_context.h b/net/base/file_stream_context.h
index 4f01d9d21c8b60d0b4389ad067acf026553ce046..cb1b7aa02d5400cc5b3668150a666203898dcafc 100644
--- a/net/base/file_stream_context.h
+++ b/net/base/file_stream_context.h
@@ -161,12 +161,19 @@ class FileStream::Context {
DWORD bytes_read,
DWORD error) override;
+ // Invokes the user callback.
+ void InvokeUserCallback();
+
+ // Deletes an orphaned context.
+ void DeleteOrphanedContext();
+
// The ReadFile call on Windows can execute synchonously at times.
// http://support.microsoft.com/kb/156932. This ends up blocking the calling
// thread which is undesirable. To avoid this we execute the ReadFile call
// on a worker thread.
- // The |context| parameter is a weak pointer instance passed to the worker
- // pool.
+ // The |context| parameter is a pointer to the current Context instance. It
+ // is safe to pass this as is to the pool as the Context instance should
+ // remain valid until the pending Read operation completes.
// The |file| parameter is the handle to the file being read.
// The |buf| parameter is the buffer where we want the ReadFile to read the
// data into.
@@ -176,7 +183,7 @@ class FileStream::Context {
// The |origin_thread_loop| is a MessageLoopProxy instance used to post tasks
// back to the originating thread.
static void ReadAsync(
- const base::WeakPtr<FileStream::Context>& context,
+ FileStream::Context* context,
HANDLE file,
scoped_refptr<net::IOBuffer> buf,
int buf_len,
@@ -185,9 +192,13 @@ class FileStream::Context {
// This callback executes on the main calling thread. It informs the caller
// about the result of the ReadFile call.
+ // The |read_file_ret| parameter contains the return value of the ReadFile
+ // call.
+ // The |bytes_read| contains the number of bytes read from the file, if
+ // ReadFile succeeds.
// The |os_error| parameter contains the value of the last error returned by
// the ReadFile API.
- void ReadAsyncResult(DWORD os_error);
+ void ReadAsyncResult(BOOL read_file_ret, DWORD bytes_read, DWORD os_error);
#elif defined(OS_POSIX)
// ReadFileImpl() is a simple wrapper around read() that handles EINTR
@@ -209,8 +220,18 @@ class FileStream::Context {
base::MessageLoopForIO::IOContext io_context_;
CompletionCallback callback_;
scoped_refptr<IOBuffer> in_flight_buf_;
- // WeakPtrFactory for posting tasks back to |this|.
- base::WeakPtrFactory<Context> weak_ptr_factory_;
+ // This flag is set to true when we receive a Read request which is queued to
+ // the thread pool.
+ bool async_read_initiated_;
+ // This flag is set to true when we receive a notification ReadAsyncResult()
+ // on the calling thread which indicates that the asynchronous Read
+ // operation is complete.
+ bool async_read_completed_;
+ // This flag is set to true when we receive an IO completion notification for
+ // an asynchonously initiated Read operaton. OnIOComplete().
+ bool io_complete_for_read_received_;
+ // Tracks the result of the IO completion operation. Set in OnIOComplete.
+ int result_;
#endif
DISALLOW_COPY_AND_ASSIGN(Context);
« no previous file with comments | « net/android/network_change_notifier_delegate_android.cc ('k') | net/base/file_stream_context.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698