diff options
author | avi@chromium.org <avi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-07-29 19:57:46 +0000 |
---|---|---|
committer | avi@chromium.org <avi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-07-29 19:57:46 +0000 |
commit | a482bb0d7f453573dff897a4db0ad7e21e6d2e16 (patch) | |
tree | 1e3ecc7de81c1a20fea68509377bf10df18c4787 /net/socket | |
parent | 85ceb3d5b6403736abe9ba8d6a4bce5036e6bf81 (diff) | |
download | chromium_src-a482bb0d7f453573dff897a4db0ad7e21e6d2e16.zip chromium_src-a482bb0d7f453573dff897a4db0ad7e21e6d2e16.tar.gz chromium_src-a482bb0d7f453573dff897a4db0ad7e21e6d2e16.tar.bz2 |
If a write is pending, just add it to the buffer. Don't trigger a second concurrent write.
BUG=http://crbug.com/17991
TEST=as in bug
Review URL: http://codereview.chromium.org/160333
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@21981 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/socket')
-rw-r--r-- | net/socket/ssl_client_socket_mac.cc | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/net/socket/ssl_client_socket_mac.cc b/net/socket/ssl_client_socket_mac.cc index db42c1a..6061dde 100644 --- a/net/socket/ssl_client_socket_mac.cc +++ b/net/socket/ssl_client_socket_mac.cc @@ -736,10 +736,21 @@ OSStatus SSLClientSocketMac::SSLWriteCallback(SSLConnectionRef connection, return status; } + bool send_pending = !us->send_buffer_.empty(); + if (data) us->send_buffer_.insert(us->send_buffer_.end(), static_cast<const char*>(data), static_cast<const char*>(data) + *data_length); + + if (send_pending) { + // If we have I/O in flight, just add the data to the end of the buffer and + // return to our caller. The existing callback will trigger the write of the + // new data when it sees that data remains in the buffer after removing the + // sent data. As always, lie to our caller. + return noErr; + } + int rv; do { scoped_refptr<IOBuffer> buffer = new IOBuffer(us->send_buffer_.size()); |