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

Unified Diff: ppapi/proxy/udp_socket_resource_base.cc

Issue 632113003: Pepper: Allow plugins to call PPB_UDP_Socket::SendTo multiple times. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add a separate test for parallel SendTo. Created 6 years, 2 months 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: ppapi/proxy/udp_socket_resource_base.cc
diff --git a/ppapi/proxy/udp_socket_resource_base.cc b/ppapi/proxy/udp_socket_resource_base.cc
index 521a6e2f4e284220d649e8d49934f503b6245127..7c5a4c55941b90d1c8b66554bb9285d76d68f699 100644
--- a/ppapi/proxy/udp_socket_resource_base.cc
+++ b/ppapi/proxy/udp_socket_resource_base.cc
@@ -28,6 +28,7 @@ const int32_t UDPSocketResourceBase::kMaxSendBufferSize =
const int32_t UDPSocketResourceBase::kMaxReceiveBufferSize =
1024 * UDPSocketResourceBase::kMaxReadSize;
const size_t UDPSocketResourceBase::kPluginReceiveBufferSlots = 32u;
+const size_t UDPSocketResourceBase::kPluginSendBufferSlots = 8u;
UDPSocketResourceBase::UDPSocketResourceBase(Connection connection,
PP_Instance instance,
@@ -184,13 +185,13 @@ int32_t UDPSocketResourceBase::SendToImpl(
return PP_ERROR_BADARGUMENT;
if (!bound_)
return PP_ERROR_FAILED;
- if (TrackedCallback::IsPending(sendto_callback_))
+ if (sendto_callbacks_.size() == kPluginSendBufferSlots)
return PP_ERROR_INPROGRESS;
if (num_bytes > kMaxWriteSize)
num_bytes = kMaxWriteSize;
- sendto_callback_ = callback;
+ sendto_callbacks_.push(callback);
// Send the request, the browser will call us back via SendToReply.
Call<PpapiPluginMsg_UDPSocket_SendToReply>(
@@ -213,7 +214,11 @@ void UDPSocketResourceBase::CloseImpl() {
PostAbortIfNecessary(&bind_callback_);
PostAbortIfNecessary(&recvfrom_callback_);
- PostAbortIfNecessary(&sendto_callback_);
+ while (!sendto_callbacks_.empty()) {
+ scoped_refptr<TrackedCallback> callback = sendto_callbacks_.front();
+ sendto_callbacks_.pop();
+ PostAbortIfNecessary(&callback);
+ }
read_buffer_ = NULL;
bytes_to_read_ = -1;
@@ -306,13 +311,15 @@ void UDPSocketResourceBase::OnPluginMsgPushRecvResult(
void UDPSocketResourceBase::OnPluginMsgSendToReply(
const ResourceMessageReplyParams& params,
int32_t bytes_written) {
- if (!TrackedCallback::IsPending(sendto_callback_))
+ scoped_refptr<TrackedCallback> callback = sendto_callbacks_.front();
+ sendto_callbacks_.pop();
+ if (!TrackedCallback::IsPending(callback))
return;
if (params.result() == PP_OK)
- RunCallback(sendto_callback_, bytes_written);
+ RunCallback(callback, bytes_written);
else
- RunCallback(sendto_callback_, params.result());
+ RunCallback(callback, params.result());
}
void UDPSocketResourceBase::RunCallback(scoped_refptr<TrackedCallback> callback,

Powered by Google App Engine
This is Rietveld 408576698