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

Unified Diff: remoting/protocol/buffered_socket_writer.cc

Issue 7218061: Close all writers before JingleSession is destroyed. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix tests Created 9 years, 6 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 | « remoting/protocol/buffered_socket_writer.h ('k') | remoting/protocol/client_control_sender.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: remoting/protocol/buffered_socket_writer.cc
diff --git a/remoting/protocol/buffered_socket_writer.cc b/remoting/protocol/buffered_socket_writer.cc
index db069b2ef8c3c8b500ad22f77199566b4ffdd6f7..4da41d776d73c4c859ff8998bcbe86792e7b1220 100644
--- a/remoting/protocol/buffered_socket_writer.cc
+++ b/remoting/protocol/buffered_socket_writer.cc
@@ -56,11 +56,11 @@ void BufferedSocketWriterBase::Init(net::Socket* socket,
bool BufferedSocketWriterBase::Write(
scoped_refptr<net::IOBufferWithSize> data, Task* done_task) {
- base::AutoLock auto_lock(lock_);
- if (!socket_)
- return false;
- queue_.push_back(new PendingPacket(data, done_task));
- buffer_size_ += data->size();
+ {
+ base::AutoLock auto_lock(lock_);
+ queue_.push_back(new PendingPacket(data, done_task));
+ buffer_size_ += data->size();
+ }
message_loop_->PostTask(
FROM_HERE, NewRunnableMethod(this, &BufferedSocketWriterBase::DoWrite));
return true;
@@ -75,11 +75,8 @@ void BufferedSocketWriterBase::DoWrite() {
return;
// Don't write after Close().
- {
- base::AutoLock auto_lock(lock_);
- if (closed_)
- return;
- }
+ if (closed_)
+ return;
while (true) {
net::IOBuffer* current_packet;
@@ -133,8 +130,11 @@ void BufferedSocketWriterBase::OnWritten(int result) {
}
void BufferedSocketWriterBase::HandleError(int result) {
- base::AutoLock auto_lock(lock_);
+ DCHECK_EQ(message_loop_, MessageLoop::current());
+
closed_ = true;
+
+ base::AutoLock auto_lock(lock_);
STLDeleteElements(&queue_);
// Notify subclass that an error is received.
@@ -152,7 +152,7 @@ int BufferedSocketWriterBase::GetBufferChunks() {
}
void BufferedSocketWriterBase::Close() {
- base::AutoLock auto_lock(lock_);
+ DCHECK_EQ(message_loop_, MessageLoop::current());
closed_ = true;
}
« no previous file with comments | « remoting/protocol/buffered_socket_writer.h ('k') | remoting/protocol/client_control_sender.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698