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

Unified Diff: net/curvecp/messenger.cc

Issue 8801005: base::Bind: Convert Socket::Read. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Review fixes. 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
« no previous file with comments | « net/curvecp/messenger.h ('k') | net/http/http_proxy_client_socket.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/curvecp/messenger.cc
diff --git a/net/curvecp/messenger.cc b/net/curvecp/messenger.cc
index 07f7d82cf1843c482ddf85a62450f5f54c12ee57..a99abda614d931246bb244582082badd035530a6 100644
--- a/net/curvecp/messenger.cc
+++ b/net/curvecp/messenger.cc
@@ -59,7 +59,7 @@ Messenger::Messenger(Packetizer* packetizer)
: packetizer_(packetizer),
send_buffer_(kSendBufferSize),
send_complete_callback_(NULL),
- receive_complete_callback_(NULL),
+ old_receive_complete_callback_(NULL),
pending_receive_length_(0),
send_message_in_progress_(false),
ALLOW_THIS_IN_INITIALIZER_LIST(
@@ -72,7 +72,25 @@ Messenger::~Messenger() {
int Messenger::Read(IOBuffer* buf, int buf_len, OldCompletionCallback* callback) {
DCHECK(CalledOnValidThread());
- DCHECK(!receive_complete_callback_);
+ DCHECK(!old_receive_complete_callback_ &&
+ receive_complete_callback_.is_null());
+
+ if (!received_list_.bytes_available()) {
+ old_receive_complete_callback_ = callback;
+ pending_receive_ = buf;
+ pending_receive_length_ = buf_len;
+ return ERR_IO_PENDING;
+ }
+
+ int bytes_read = InternalRead(buf, buf_len);
+ DCHECK_LT(0, bytes_read);
+ return bytes_read;
+}
+int Messenger::Read(IOBuffer* buf, int buf_len,
+ const CompletionCallback& callback) {
+ DCHECK(CalledOnValidThread());
+ DCHECK(!old_receive_complete_callback_ &&
+ receive_complete_callback_.is_null());
if (!received_list_.bytes_available()) {
receive_complete_callback_ = callback;
@@ -338,12 +356,20 @@ void Messenger::RecvMessage() {
}
// If we have data available, and a read is pending, notify the callback.
- if (received_list_.bytes_available() && receive_complete_callback_) {
+ if (received_list_.bytes_available() &&
+ (old_receive_complete_callback_ ||
+ !receive_complete_callback_.is_null())) {
// Pass the data up to the caller.
int bytes_read = InternalRead(pending_receive_, pending_receive_length_);
- OldCompletionCallback* callback = receive_complete_callback_;
- receive_complete_callback_ = NULL;
- callback->Run(bytes_read);
+ if (old_receive_complete_callback_) {
+ OldCompletionCallback* callback = old_receive_complete_callback_;
+ old_receive_complete_callback_ = NULL;
+ callback->Run(bytes_read);
+ } else {
+ CompletionCallback callback = receive_complete_callback_;
+ receive_complete_callback_.Reset();
+ callback.Run(bytes_read);
+ }
}
}
« no previous file with comments | « net/curvecp/messenger.h ('k') | net/http/http_proxy_client_socket.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698