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

Side by Side Diff: mojo/system/channel.cc

Issue 570773002: Mojo: Add thread assertions to various private Channel methods. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 3 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
« no previous file with comments | « mojo/system/channel.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "mojo/system/channel.h" 5 #include "mojo/system/channel.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/compiler_specific.h" 10 #include "base/compiler_specific.h"
(...skipping 257 matching lines...) Expand 10 before | Expand all | Expand 10 after
268 } 268 }
269 269
270 Channel::~Channel() { 270 Channel::~Channel() {
271 // The channel should have been shut down first. 271 // The channel should have been shut down first.
272 DCHECK(!is_running_); 272 DCHECK(!is_running_);
273 } 273 }
274 274
275 void Channel::OnReadMessage( 275 void Channel::OnReadMessage(
276 const MessageInTransit::View& message_view, 276 const MessageInTransit::View& message_view,
277 embedder::ScopedPlatformHandleVectorPtr platform_handles) { 277 embedder::ScopedPlatformHandleVectorPtr platform_handles) {
278 DCHECK(creation_thread_checker_.CalledOnValidThread());
279
278 switch (message_view.type()) { 280 switch (message_view.type()) {
279 case MessageInTransit::kTypeMessagePipeEndpoint: 281 case MessageInTransit::kTypeMessagePipeEndpoint:
280 case MessageInTransit::kTypeMessagePipe: 282 case MessageInTransit::kTypeMessagePipe:
281 OnReadMessageForDownstream(message_view, platform_handles.Pass()); 283 OnReadMessageForDownstream(message_view, platform_handles.Pass());
282 break; 284 break;
283 case MessageInTransit::kTypeChannel: 285 case MessageInTransit::kTypeChannel:
284 OnReadMessageForChannel(message_view, platform_handles.Pass()); 286 OnReadMessageForChannel(message_view, platform_handles.Pass());
285 break; 287 break;
286 default: 288 default:
287 HandleRemoteError( 289 HandleRemoteError(
288 base::StringPrintf("Received message of invalid type %u", 290 base::StringPrintf("Received message of invalid type %u",
289 static_cast<unsigned>(message_view.type()))); 291 static_cast<unsigned>(message_view.type())));
290 break; 292 break;
291 } 293 }
292 } 294 }
293 295
294 void Channel::OnError(Error error) { 296 void Channel::OnError(Error error) {
297 DCHECK(creation_thread_checker_.CalledOnValidThread());
298
295 switch (error) { 299 switch (error) {
296 case ERROR_READ_SHUTDOWN: 300 case ERROR_READ_SHUTDOWN:
297 // The other side was cleanly closed, so this isn't actually an error. 301 // The other side was cleanly closed, so this isn't actually an error.
298 DVLOG(1) << "RawChannel read error (shutdown)"; 302 DVLOG(1) << "RawChannel read error (shutdown)";
299 break; 303 break;
300 case ERROR_READ_BROKEN: { 304 case ERROR_READ_BROKEN: {
301 base::AutoLock locker(lock_); 305 base::AutoLock locker(lock_);
302 LOG_IF(ERROR, !is_shutting_down_) 306 LOG_IF(ERROR, !is_shutting_down_)
303 << "RawChannel read error (connection broken)"; 307 << "RawChannel read error (connection broken)";
304 break; 308 break;
(...skipping 11 matching lines...) Expand all
316 // normal operation (but maybe the other side crashed). 320 // normal operation (but maybe the other side crashed).
317 LOG(WARNING) << "RawChannel write error"; 321 LOG(WARNING) << "RawChannel write error";
318 break; 322 break;
319 } 323 }
320 Shutdown(); 324 Shutdown();
321 } 325 }
322 326
323 void Channel::OnReadMessageForDownstream( 327 void Channel::OnReadMessageForDownstream(
324 const MessageInTransit::View& message_view, 328 const MessageInTransit::View& message_view,
325 embedder::ScopedPlatformHandleVectorPtr platform_handles) { 329 embedder::ScopedPlatformHandleVectorPtr platform_handles) {
330 DCHECK(creation_thread_checker_.CalledOnValidThread());
326 DCHECK(message_view.type() == MessageInTransit::kTypeMessagePipeEndpoint || 331 DCHECK(message_view.type() == MessageInTransit::kTypeMessagePipeEndpoint ||
327 message_view.type() == MessageInTransit::kTypeMessagePipe); 332 message_view.type() == MessageInTransit::kTypeMessagePipe);
328 333
329 MessageInTransit::EndpointId local_id = message_view.destination_id(); 334 MessageInTransit::EndpointId local_id = message_view.destination_id();
330 if (local_id == MessageInTransit::kInvalidEndpointId) { 335 if (local_id == MessageInTransit::kInvalidEndpointId) {
331 HandleRemoteError("Received message with no destination ID"); 336 HandleRemoteError("Received message with no destination ID");
332 return; 337 return;
333 } 338 }
334 339
335 ChannelEndpoint::State state = ChannelEndpoint::STATE_NORMAL; 340 ChannelEndpoint::State state = ChannelEndpoint::STATE_NORMAL;
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
395 "Failed to enqueue message to local ID %u (result %d)", 400 "Failed to enqueue message to local ID %u (result %d)",
396 static_cast<unsigned>(local_id), 401 static_cast<unsigned>(local_id),
397 static_cast<int>(result))); 402 static_cast<int>(result)));
398 return; 403 return;
399 } 404 }
400 } 405 }
401 406
402 void Channel::OnReadMessageForChannel( 407 void Channel::OnReadMessageForChannel(
403 const MessageInTransit::View& message_view, 408 const MessageInTransit::View& message_view,
404 embedder::ScopedPlatformHandleVectorPtr platform_handles) { 409 embedder::ScopedPlatformHandleVectorPtr platform_handles) {
410 DCHECK(creation_thread_checker_.CalledOnValidThread());
405 DCHECK_EQ(message_view.type(), MessageInTransit::kTypeChannel); 411 DCHECK_EQ(message_view.type(), MessageInTransit::kTypeChannel);
406 412
407 // Currently, no channel messages take platform handles. 413 // Currently, no channel messages take platform handles.
408 if (platform_handles) { 414 if (platform_handles) {
409 HandleRemoteError( 415 HandleRemoteError(
410 "Received invalid channel message (has platform handles)"); 416 "Received invalid channel message (has platform handles)");
411 NOTREACHED(); 417 NOTREACHED();
412 return; 418 return;
413 } 419 }
414 420
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
446 default: 452 default:
447 HandleRemoteError("Received invalid channel message"); 453 HandleRemoteError("Received invalid channel message");
448 NOTREACHED(); 454 NOTREACHED();
449 break; 455 break;
450 } 456 }
451 } 457 }
452 458
453 bool Channel::RemoveMessagePipeEndpoint( 459 bool Channel::RemoveMessagePipeEndpoint(
454 MessageInTransit::EndpointId local_id, 460 MessageInTransit::EndpointId local_id,
455 MessageInTransit::EndpointId remote_id) { 461 MessageInTransit::EndpointId remote_id) {
462 DCHECK(creation_thread_checker_.CalledOnValidThread());
463
456 scoped_refptr<MessagePipe> message_pipe; 464 scoped_refptr<MessagePipe> message_pipe;
457 unsigned port; 465 unsigned port;
458 { 466 {
459 base::AutoLock locker(lock_); 467 base::AutoLock locker(lock_);
460 468
461 IdToEndpointMap::iterator it = local_id_to_endpoint_map_.find(local_id); 469 IdToEndpointMap::iterator it = local_id_to_endpoint_map_.find(local_id);
462 if (it == local_id_to_endpoint_map_.end()) { 470 if (it == local_id_to_endpoint_map_.end()) {
463 DVLOG(2) << "Remove message pipe error: not found"; 471 DVLOG(2) << "Remove message pipe error: not found";
464 return false; 472 return false;
465 } 473 }
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
519 // TODO(vtl): Is this how we really want to handle this? 527 // TODO(vtl): Is this how we really want to handle this?
520 // Sometimes we'll want to propagate the error back to the message pipe 528 // Sometimes we'll want to propagate the error back to the message pipe
521 // (endpoint), and notify it that the remote is (effectively) closed. 529 // (endpoint), and notify it that the remote is (effectively) closed.
522 // Sometimes we'll want to kill the channel (and notify all the endpoints that 530 // Sometimes we'll want to kill the channel (and notify all the endpoints that
523 // their remotes are dead. 531 // their remotes are dead.
524 LOG(WARNING) << error_message; 532 LOG(WARNING) << error_message;
525 } 533 }
526 534
527 } // namespace system 535 } // namespace system
528 } // namespace mojo 536 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/system/channel.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698