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

Unified Diff: jingle/glue/channel_socket_adapter.cc

Issue 8801005: base::Bind: Convert Socket::Read. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years 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
Index: jingle/glue/channel_socket_adapter.cc
diff --git a/jingle/glue/channel_socket_adapter.cc b/jingle/glue/channel_socket_adapter.cc
index 64cfa7f6588a656d98e2b56b28c19cde0acad7c8..c8f4588e830d79fb372c3e5292dc4613116dbea8 100644
--- a/jingle/glue/channel_socket_adapter.cc
+++ b/jingle/glue/channel_socket_adapter.cc
@@ -18,7 +18,7 @@ TransportChannelSocketAdapter::TransportChannelSocketAdapter(
cricket::TransportChannel* channel)
: message_loop_(MessageLoop::current()),
channel_(channel),
- read_callback_(NULL),
+ old_read_callback_(NULL),
write_callback_(NULL),
closed_error_code_(net::OK) {
DCHECK(channel_);
@@ -39,7 +39,26 @@ int TransportChannelSocketAdapter::Read(
DCHECK_EQ(MessageLoop::current(), message_loop_);
DCHECK(buf);
DCHECK(callback);
- CHECK(!read_callback_);
+ CHECK(!old_read_callback_);
csilv 2011/12/07 00:03:48 make same as line 61
James Hawkins 2011/12/07 00:19:37 Done.
+
+ if (!channel_) {
+ DCHECK(closed_error_code_ != net::OK);
+ return closed_error_code_;
+ }
+
+ old_read_callback_ = callback;
+ read_buffer_ = buf;
+ read_buffer_size_ = buffer_size;
+
+ return net::ERR_IO_PENDING;
+}
+int TransportChannelSocketAdapter::Read(
+ net::IOBuffer* buf, int buffer_size,
+ const net::CompletionCallback& callback) {
+ DCHECK_EQ(MessageLoop::current(), message_loop_);
+ DCHECK(buf);
+ DCHECK(!callback.is_null());
+ CHECK(!old_read_callback_ && read_callback_.is_null());
csilv 2011/12/07 00:03:48 Do we want this to be a CHECK instead of DCHECK?
csilv 2011/12/07 00:06:42 You can probably disregard this as we do use CHECK
if (!channel_) {
DCHECK(closed_error_code_ != net::OK);
@@ -110,11 +129,16 @@ void TransportChannelSocketAdapter::Close(int error_code) {
channel_->SignalDestroyed.disconnect(this);
channel_ = NULL;
- if (read_callback_) {
- net::OldCompletionCallback* callback = read_callback_;
- read_callback_ = NULL;
+ if (old_read_callback_) {
+ net::OldCompletionCallback* callback = old_read_callback_;
+ old_read_callback_ = NULL;
read_buffer_ = NULL;
callback->Run(error_code);
+ } else if (read_callback_.is_null()) {
James Hawkins 2011/12/06 23:44:23 This should be else if (!read_callback_.is_null())
James Hawkins 2011/12/06 23:45:04 Done.
+ net::CompletionCallback callback = read_callback_;
+ read_callback_.Reset();
+ read_buffer_ = NULL;
+ callback.Run(error_code);
}
if (write_callback_) {
@@ -129,7 +153,7 @@ void TransportChannelSocketAdapter::OnNewPacket(
cricket::TransportChannel* channel, const char* data, size_t data_size) {
DCHECK_EQ(MessageLoop::current(), message_loop_);
DCHECK_EQ(channel, channel_);
- if (read_callback_) {
+ if (old_read_callback_ || !read_callback_.is_null()) {
DCHECK(read_buffer_);
CHECK_LT(data_size, static_cast<size_t>(std::numeric_limits<int>::max()));
@@ -141,11 +165,17 @@ void TransportChannelSocketAdapter::OnNewPacket(
memcpy(read_buffer_->data(), data, data_size);
- net::OldCompletionCallback* callback = read_callback_;
- read_callback_ = NULL;
- read_buffer_ = NULL;
-
- callback->Run(data_size);
+ if (old_read_callback_) {
+ net::OldCompletionCallback* callback = old_read_callback_;
+ old_read_callback_ = NULL;
+ read_buffer_ = NULL;
+ callback->Run(data_size);
+ } else {
+ net::CompletionCallback callback = read_callback_;
+ read_callback_.Reset();
+ read_buffer_ = NULL;
+ callback.Run(data_size);
+ }
} else {
LOG(WARNING)
<< "Data was received without a callback. Dropping the packet.";

Powered by Google App Engine
This is Rietveld 408576698