Index: net/base/file_stream_win.cc |
=================================================================== |
--- net/base/file_stream_win.cc (revision 16872) |
+++ net/base/file_stream_win.cc (working copy) |
@@ -50,7 +50,7 @@ |
class FileStream::AsyncContext : public MessageLoopForIO::IOHandler { |
public: |
AsyncContext(FileStream* owner) |
- : owner_(owner), context_(), callback_(NULL) { |
+ : owner_(owner), context_(), callback_(NULL), is_closing_(false) { |
context_.handler = this; |
} |
~AsyncContext(); |
@@ -67,9 +67,11 @@ |
FileStream* owner_; |
MessageLoopForIO::IOContext context_; |
CompletionCallback* callback_; |
+ bool is_closing_; |
}; |
FileStream::AsyncContext::~AsyncContext() { |
+ is_closing_ = true; |
bool waited = false; |
base::Time start = base::Time::Now(); |
while (callback_) { |
@@ -93,6 +95,11 @@ |
DCHECK(&context_ == context); |
DCHECK(callback_); |
+ if (is_closing_) { |
brettw
2009/06/03 23:43:04
Can you add a comment why this is here and what ba
|
+ callback_ = NULL; |
+ return; |
+ } |
+ |
int result = static_cast<int>(bytes_read); |
if (error && error != ERROR_HANDLE_EOF) |
result = MapErrorCode(error); |