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

Unified Diff: net/curvecp/messenger.cc

Issue 8831001: base::Bind: Convert Socket::Write. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix alignment. 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 a99abda614d931246bb244582082badd035530a6..fc9adf5bc6c805eb73289fc0406b265c9c2fefd9 100644
--- a/net/curvecp/messenger.cc
+++ b/net/curvecp/messenger.cc
@@ -58,7 +58,7 @@ static const size_t kReceiveBufferSize = (128 * 1024);
Messenger::Messenger(Packetizer* packetizer)
: packetizer_(packetizer),
send_buffer_(kSendBufferSize),
- send_complete_callback_(NULL),
+ old_send_complete_callback_(NULL),
old_receive_complete_callback_(NULL),
pending_receive_length_(0),
send_message_in_progress_(false),
@@ -104,10 +104,31 @@ int Messenger::Read(IOBuffer* buf, int buf_len,
return bytes_read;
}
-int Messenger::Write(IOBuffer* buf, int buf_len, OldCompletionCallback* callback) {
+int Messenger::Write(
+ IOBuffer* buf, int buf_len, OldCompletionCallback* callback) {
DCHECK(CalledOnValidThread());
DCHECK(!pending_send_.get()); // Already a write pending!
- DCHECK(!send_complete_callback_);
+ DCHECK(!old_send_complete_callback_ && send_complete_callback_.is_null());
+ DCHECK_LT(0, buf_len);
+
+ int len = send_buffer_.write(buf->data(), buf_len);
+ if (!send_timer_.IsRunning())
+ send_timer_.Start(FROM_HERE, base::TimeDelta(),
+ this, &Messenger::OnSendTimer);
+ if (len)
+ return len;
+
+ // We couldn't add data to the send buffer, so block the application.
+ pending_send_ = buf;
+ pending_send_length_ = buf_len;
+ old_send_complete_callback_ = callback;
+ return ERR_IO_PENDING;
+}
+int Messenger::Write(
+ IOBuffer* buf, int buf_len, const CompletionCallback& callback) {
+ DCHECK(CalledOnValidThread());
+ DCHECK(!pending_send_.get()); // Already a write pending!
+ DCHECK(!old_send_complete_callback_ && send_complete_callback_.is_null());
DCHECK_LT(0, buf_len);
int len = send_buffer_.write(buf->data(), buf_len);
@@ -168,15 +189,21 @@ IOBufferWithSize* Messenger::CreateBufferFromSendQueue() {
DCHECK_EQ(bytes, length);
// We consumed data, check to see if someone is waiting to write more data.
- if (send_complete_callback_) {
+ if (old_send_complete_callback_ || !send_complete_callback_.is_null()) {
DCHECK(pending_send_.get());
int len = send_buffer_.write(pending_send_->data(), pending_send_length_);
if (len) {
pending_send_ = NULL;
- OldCompletionCallback* callback = send_complete_callback_;
- send_complete_callback_ = NULL;
- callback->Run(len);
+ if (old_send_complete_callback_) {
+ OldCompletionCallback* callback = old_send_complete_callback_;
+ old_send_complete_callback_ = NULL;
+ callback->Run(len);
+ } else {
+ CompletionCallback callback = send_complete_callback_;
+ send_complete_callback_.Reset();
+ callback.Run(len);
+ }
}
}
« 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