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

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

Issue 227133013: Mojo: Dispatcher::MessageInTransitAccess functions don't need to take the lock. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 8 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 | Annotate | Revision Log
« no previous file with comments | « mojo/system/dispatcher.h ('k') | mojo/system/message_in_transit.h » ('j') | 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/dispatcher.h" 5 #include "mojo/system/dispatcher.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "mojo/system/constants.h" 8 #include "mojo/system/constants.h"
9 #include "mojo/system/message_pipe_dispatcher.h" 9 #include "mojo/system/message_pipe_dispatcher.h"
10 10
(...skipping 335 matching lines...) Expand 10 before | Expand all | Expand 10 after
346 346
347 void Dispatcher::RemoveWaiterImplNoLock(Waiter* /*waiter*/) { 347 void Dispatcher::RemoveWaiterImplNoLock(Waiter* /*waiter*/) {
348 lock_.AssertAcquired(); 348 lock_.AssertAcquired();
349 DCHECK(!is_closed_); 349 DCHECK(!is_closed_);
350 // By default, waiting isn't supported. Only dispatchers that can be waited on 350 // By default, waiting isn't supported. Only dispatchers that can be waited on
351 // will do something nontrivial. 351 // will do something nontrivial.
352 } 352 }
353 353
354 size_t Dispatcher::GetMaximumSerializedSizeImplNoLock( 354 size_t Dispatcher::GetMaximumSerializedSizeImplNoLock(
355 const Channel* /*channel*/) const { 355 const Channel* /*channel*/) const {
356 lock_.AssertAcquired(); 356 DCHECK(HasOneRef()); // Only one ref => no need to take the lock.
357 DCHECK(!is_closed_); 357 DCHECK(!is_closed_);
358 // By default, serializing isn't supported. 358 // By default, serializing isn't supported.
359 return 0; 359 return 0;
360 } 360 }
361 361
362 bool Dispatcher::SerializeAndCloseImplNoLock(Channel* /*channel*/, 362 bool Dispatcher::SerializeAndCloseImplNoLock(Channel* /*channel*/,
363 void* /*destination*/, 363 void* /*destination*/,
364 size_t* /*actual_size*/) { 364 size_t* /*actual_size*/) {
365 lock_.AssertAcquired(); 365 DCHECK(HasOneRef()); // Only one ref => no need to take the lock.
366 DCHECK(is_closed_); 366 DCHECK(is_closed_);
367 // By default, serializing isn't supported, so just close. 367 // By default, serializing isn't supported, so just close.
368 CloseImplNoLock(); 368 CloseImplNoLock();
369 return 0; 369 return 0;
370 } 370 }
371 371
372 bool Dispatcher::IsBusyNoLock() const { 372 bool Dispatcher::IsBusyNoLock() const {
373 lock_.AssertAcquired(); 373 lock_.AssertAcquired();
374 DCHECK(!is_closed_); 374 DCHECK(!is_closed_);
375 // Most dispatchers support only "atomic" operations, so they are never busy 375 // Most dispatchers support only "atomic" operations, so they are never busy
(...skipping 15 matching lines...) Expand all
391 lock_.AssertAcquired(); 391 lock_.AssertAcquired();
392 DCHECK(!is_closed_); 392 DCHECK(!is_closed_);
393 393
394 is_closed_ = true; 394 is_closed_ = true;
395 CancelAllWaitersNoLock(); 395 CancelAllWaitersNoLock();
396 return CreateEquivalentDispatcherAndCloseImplNoLock(); 396 return CreateEquivalentDispatcherAndCloseImplNoLock();
397 } 397 }
398 398
399 size_t Dispatcher::GetMaximumSerializedSize(const Channel* channel) const { 399 size_t Dispatcher::GetMaximumSerializedSize(const Channel* channel) const {
400 DCHECK(channel); 400 DCHECK(channel);
401 DCHECK(HasOneRef()); 401 DCHECK(HasOneRef()); // Only one ref => no need to take the lock.
402
403 base::AutoLock locker(lock_);
404 DCHECK(!is_closed_); 402 DCHECK(!is_closed_);
405 return GetMaximumSerializedSizeImplNoLock(channel); 403 return GetMaximumSerializedSizeImplNoLock(channel);
406 } 404 }
407 405
408 bool Dispatcher::SerializeAndClose(Channel* channel, 406 bool Dispatcher::SerializeAndClose(Channel* channel,
409 void* destination, 407 void* destination,
410 size_t* actual_size) { 408 size_t* actual_size) {
411 DCHECK(destination); 409 DCHECK(destination);
412 DCHECK(channel); 410 DCHECK(channel);
413 DCHECK(actual_size); 411 DCHECK(actual_size);
414 DCHECK(HasOneRef()); 412 DCHECK(HasOneRef()); // Only one ref => no need to take the lock.
415
416 base::AutoLock locker(lock_);
417 DCHECK(!is_closed_); 413 DCHECK(!is_closed_);
418 414
419 // We have to call |GetMaximumSerializedSizeImplNoLock()| first, because we 415 // We have to call |GetMaximumSerializedSizeImplNoLock()| first, because we
420 // leave it to |SerializeAndCloseImplNoLock()| to close the thing. 416 // leave it to |SerializeAndCloseImplNoLock()| to close the thing.
421 #if DCHECK_IS_ON 417 #if DCHECK_IS_ON
422 size_t max_size = GetMaximumSerializedSizeImplNoLock(channel); 418 size_t max_size = GetMaximumSerializedSizeImplNoLock(channel);
423 #else 419 #else
424 size_t max_size = static_cast<size_t>(-1); 420 size_t max_size = static_cast<size_t>(-1);
425 #endif 421 #endif
426 422
(...skipping 13 matching lines...) Expand all
440 // DispatcherTransport --------------------------------------------------------- 436 // DispatcherTransport ---------------------------------------------------------
441 437
442 void DispatcherTransport::End() { 438 void DispatcherTransport::End() {
443 DCHECK(dispatcher_); 439 DCHECK(dispatcher_);
444 dispatcher_->lock_.Release(); 440 dispatcher_->lock_.Release();
445 dispatcher_ = NULL; 441 dispatcher_ = NULL;
446 } 442 }
447 443
448 } // namespace system 444 } // namespace system
449 } // namespace mojo 445 } // namespace mojo
OLDNEW
« no previous file with comments | « mojo/system/dispatcher.h ('k') | mojo/system/message_in_transit.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698