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

Side by Side Diff: ppapi/proxy/udp_socket_filter.cc

Issue 2727093003: Fix ASAN ODR violation in ppapi/proxy in component mode (Closed)
Patch Set: simplify, no export Created 3 years, 9 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 unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ppapi/proxy/udp_socket_filter.h" 5 #include "ppapi/proxy/udp_socket_filter.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <cstring> 8 #include <cstring>
9 #include <utility> 9 #include <utility>
10 10
(...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after
146 if (TrackedCallback::IsPending(recvfrom_callback_)) 146 if (TrackedCallback::IsPending(recvfrom_callback_))
147 recvfrom_callback_->PostAbort(); 147 recvfrom_callback_->PostAbort();
148 } 148 }
149 149
150 void UDPSocketFilter::RecvQueue::DataReceivedOnIOThread( 150 void UDPSocketFilter::RecvQueue::DataReceivedOnIOThread(
151 int32_t result, 151 int32_t result,
152 const std::string& data, 152 const std::string& data,
153 const PP_NetAddress_Private& addr) { 153 const PP_NetAddress_Private& addr) {
154 DCHECK(PluginGlobals::Get()->ipc_task_runner()->RunsTasksOnCurrentThread()); 154 DCHECK(PluginGlobals::Get()->ipc_task_runner()->RunsTasksOnCurrentThread());
155 DCHECK_LT(recv_buffers_.size(), 155 DCHECK_LT(recv_buffers_.size(),
156 UDPSocketResourceConstants::kPluginReceiveBufferSlots); 156 static_cast<size_t>(
157 UDPSocketResourceConstants::kPluginReceiveBufferSlots));
157 158
158 if (!TrackedCallback::IsPending(recvfrom_callback_) || !read_buffer_) { 159 if (!TrackedCallback::IsPending(recvfrom_callback_) || !read_buffer_) {
159 recv_buffers_.push(RecvBuffer()); 160 recv_buffers_.push(RecvBuffer());
160 RecvBuffer& back = recv_buffers_.back(); 161 RecvBuffer& back = recv_buffers_.back();
161 back.result = result; 162 back.result = result;
162 back.data = data; 163 back.data = data;
163 back.addr = addr; 164 back.addr = addr;
164 return; 165 return;
165 } 166 }
166 DCHECK_EQ(recv_buffers_.size(), 0u); 167 DCHECK_EQ(recv_buffers_.size(), 0u);
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
206 PP_Resource* addr_out, 207 PP_Resource* addr_out,
207 const scoped_refptr<TrackedCallback>& callback) { 208 const scoped_refptr<TrackedCallback>& callback) {
208 ProxyLock::AssertAcquired(); 209 ProxyLock::AssertAcquired();
209 if (!buffer_out || num_bytes <= 0) 210 if (!buffer_out || num_bytes <= 0)
210 return PP_ERROR_BADARGUMENT; 211 return PP_ERROR_BADARGUMENT;
211 if (TrackedCallback::IsPending(recvfrom_callback_)) 212 if (TrackedCallback::IsPending(recvfrom_callback_))
212 return PP_ERROR_INPROGRESS; 213 return PP_ERROR_INPROGRESS;
213 214
214 if (recv_buffers_.empty()) { 215 if (recv_buffers_.empty()) {
215 read_buffer_ = buffer_out; 216 read_buffer_ = buffer_out;
216 bytes_to_read_ = 217 bytes_to_read_ = std::min(
217 std::min(num_bytes, UDPSocketResourceConstants::kMaxReadSize); 218 num_bytes,
219 static_cast<int32_t>(UDPSocketResourceConstants::kMaxReadSize));
218 recvfrom_addr_resource_ = addr_out; 220 recvfrom_addr_resource_ = addr_out;
219 recvfrom_callback_ = callback; 221 recvfrom_callback_ = callback;
220 return PP_OK_COMPLETIONPENDING; 222 return PP_OK_COMPLETIONPENDING;
221 } else { 223 } else {
222 RecvBuffer& front = recv_buffers_.front(); 224 RecvBuffer& front = recv_buffers_.front();
223 225
224 if (static_cast<size_t>(num_bytes) < front.data.size()) 226 if (static_cast<size_t>(num_bytes) < front.data.size())
225 return PP_ERROR_MESSAGE_TOO_BIG; 227 return PP_ERROR_MESSAGE_TOO_BIG;
226 228
227 int32_t result = static_cast<int32_t>(front.data.size()); 229 int32_t result = static_cast<int32_t>(front.data.size());
228 std::unique_ptr<std::string> data_to_pass(new std::string); 230 std::unique_ptr<std::string> data_to_pass(new std::string);
229 data_to_pass->swap(front.data); 231 data_to_pass->swap(front.data);
230 SetRecvFromOutput(pp_instance_, std::move(data_to_pass), front.addr, 232 SetRecvFromOutput(pp_instance_, std::move(data_to_pass), front.addr,
231 buffer_out, num_bytes, addr_out, PP_OK); 233 buffer_out, num_bytes, addr_out, PP_OK);
232 last_recvfrom_addr_ = front.addr; 234 last_recvfrom_addr_ = front.addr;
233 recv_buffers_.pop(); 235 recv_buffers_.pop();
234 slot_available_callback_.Run(); 236 slot_available_callback_.Run();
235 237
236 return result; 238 return result;
237 } 239 }
238 } 240 }
239 241
240 PP_NetAddress_Private UDPSocketFilter::RecvQueue::GetLastAddrPrivate() const { 242 PP_NetAddress_Private UDPSocketFilter::RecvQueue::GetLastAddrPrivate() const {
241 CHECK(private_api_); 243 CHECK(private_api_);
242 return last_recvfrom_addr_; 244 return last_recvfrom_addr_;
243 } 245 }
244 246
245 } // namespace proxy 247 } // namespace proxy
246 } // namespace ppapi 248 } // namespace ppapi
OLDNEW
« no previous file with comments | « ppapi/proxy/tcp_socket_resource_constants.cc ('k') | ppapi/proxy/udp_socket_resource_constants.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698