diff options
author | sergeyu <sergeyu@chromium.org> | 2015-07-30 16:58:29 -0700 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-07-30 23:59:04 +0000 |
commit | 7e2c7b2f3fc93e1acd950e6dad14cf9f6919984f (patch) | |
tree | 7fda17f16a70bfd72f0dffb3d947aa7aa6e15bd8 /remoting/base | |
parent | 96bb0fdb968033261cc9d5a7b4906208fef61f26 (diff) | |
download | chromium_src-7e2c7b2f3fc93e1acd950e6dad14cf9f6919984f.zip chromium_src-7e2c7b2f3fc93e1acd950e6dad14cf9f6919984f.tar.gz chromium_src-7e2c7b2f3fc93e1acd950e6dad14cf9f6919984f.tar.bz2 |
Fix BufferedSocketWriter not to return any results from Write().
Previously BufferedSocketWriter was returning false from Write() if
the write fails synchronously. That's redundant because
BufferedSocketWriter also calls a callback after the failed write.
This also fixes a bug in Write() - it was using is_closed() method after
calling the callback, which is not allowed because the object may be
deleted by the callback. That problem was found by tests added in
https://codereview.chromium.org/1258323003 . The bug was introduced
recently in https://codereview.chromium.org/1197853003 .
Review URL: https://codereview.chromium.org/1250403003
Cr-Commit-Position: refs/heads/master@{#341229}
Diffstat (limited to 'remoting/base')
-rw-r--r-- | remoting/base/buffered_socket_writer.cc | 6 | ||||
-rw-r--r-- | remoting/base/buffered_socket_writer.h | 5 |
2 files changed, 4 insertions, 7 deletions
diff --git a/remoting/base/buffered_socket_writer.cc b/remoting/base/buffered_socket_writer.cc index c8a8302..827abca 100644 --- a/remoting/base/buffered_socket_writer.cc +++ b/remoting/base/buffered_socket_writer.cc @@ -57,7 +57,7 @@ void BufferedSocketWriter::Init( write_failed_callback_ = write_failed_callback; } -bool BufferedSocketWriter::Write( +void BufferedSocketWriter::Write( const scoped_refptr<net::IOBufferWithSize>& data, const base::Closure& done_task) { DCHECK(thread_checker_.CalledOnValidThread()); @@ -65,14 +65,12 @@ bool BufferedSocketWriter::Write( // Don't write after error. if (is_closed()) - return false; + return; queue_.push_back(new PendingPacket( new net::DrainableIOBuffer(data.get(), data->size()), done_task)); DoWrite(); - - return !is_closed(); } bool BufferedSocketWriter::is_closed() { diff --git a/remoting/base/buffered_socket_writer.h b/remoting/base/buffered_socket_writer.h index 255b2e5..dffed45 100644 --- a/remoting/base/buffered_socket_writer.h +++ b/remoting/base/buffered_socket_writer.h @@ -42,9 +42,8 @@ class BufferedSocketWriter { void Init(const WriteCallback& write_callback, const WriteFailedCallback& write_failed_callback); - // Puts a new data chunk in the buffer. Returns false if writing has stopped - // because of an error. - bool Write(const scoped_refptr<net::IOBufferWithSize>& buffer, + // Puts a new data chunk in the buffer. + void Write(const scoped_refptr<net::IOBufferWithSize>& buffer, const base::Closure& done_task); // Returns true when there is data waiting to be written. |