Chromium Code Reviews| 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); |