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

Side by Side Diff: mojo/common/handle_watcher.cc

Issue 781753004: Fix handle_watcher when start is called twice on the same handle. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Created 6 years 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 | « no previous file | mojo/common/handle_watcher_unittest.cc » ('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/common/handle_watcher.h" 5 #include "mojo/common/handle_watcher.h"
6 6
7 #include <map> 7 #include <map>
8 8
9 #include "base/atomic_sequence_num.h" 9 #include "base/atomic_sequence_num.h"
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 440 matching lines...) Expand 10 before | Expand all | Expand 10 after
451 HandleWatcher::~HandleWatcher() { 451 HandleWatcher::~HandleWatcher() {
452 } 452 }
453 453
454 void HandleWatcher::Start(const Handle& handle, 454 void HandleWatcher::Start(const Handle& handle,
455 MojoHandleSignals handle_signals, 455 MojoHandleSignals handle_signals,
456 MojoDeadline deadline, 456 MojoDeadline deadline,
457 const base::Callback<void(MojoResult)>& callback) { 457 const base::Callback<void(MojoResult)>& callback) {
458 DCHECK(handle.is_valid()); 458 DCHECK(handle.is_valid());
459 DCHECK_NE(MOJO_HANDLE_SIGNAL_NONE, handle_signals); 459 DCHECK_NE(MOJO_HANDLE_SIGNAL_NONE, handle_signals);
460 460
461 // Need to clear the state before creating a new one.
462 state_.reset();
viettrungluu 2014/12/08 18:10:01 I assume that this is because we need the dtor of
qsr 2014/12/09 10:02:23 The destructor remove the handler, and neither of
461 if (MessagePumpMojo::IsCurrent()) { 463 if (MessagePumpMojo::IsCurrent()) {
462 state_.reset(new SameThreadWatchingState( 464 state_.reset(new SameThreadWatchingState(
463 this, handle, handle_signals, deadline, callback)); 465 this, handle, handle_signals, deadline, callback));
464 } else { 466 } else {
465 state_.reset(new SecondaryThreadWatchingState( 467 state_.reset(new SecondaryThreadWatchingState(
466 this, handle, handle_signals, deadline, callback)); 468 this, handle, handle_signals, deadline, callback));
467 } 469 }
468 } 470 }
469 471
470 void HandleWatcher::Stop() { 472 void HandleWatcher::Stop() {
471 state_.reset(); 473 state_.reset();
472 } 474 }
473 475
474 } // namespace common 476 } // namespace common
475 } // namespace mojo 477 } // namespace mojo
OLDNEW
« no previous file with comments | « no previous file | mojo/common/handle_watcher_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698