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

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: 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: net/curvecp/messenger.cc
diff --git a/net/curvecp/messenger.cc b/net/curvecp/messenger.cc
index 07f7d82cf1843c482ddf85a62450f5f54c12ee57..7e0f1540675f27331e56cdc63855f833b26c8919 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,24 @@ Messenger::~Messenger() {
int Messenger::Read(IOBuffer* buf, int buf_len, OldCompletionCallback* callback) {
DCHECK(CalledOnValidThread());
- DCHECK(!receive_complete_callback_);
+ DCHECK(!old_receive_complete_callback_);
csilv 2011/12/07 00:03:48 change this to match line 91
James Hawkins 2011/12/07 00:19:37 Done.
+
+ 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 +355,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);
+ }
}
}

Powered by Google App Engine
This is Rietveld 408576698