| Index: mojo/edk/system/awakable_list.cc
|
| diff --git a/mojo/edk/system/awakable_list.cc b/mojo/edk/system/awakable_list.cc
|
| index 6af305b4420e2799ede060085e9ae914c03d22e4..e74e2c02869f5648b3a385db92c01b19f7d031c5 100644
|
| --- a/mojo/edk/system/awakable_list.cc
|
| +++ b/mojo/edk/system/awakable_list.cc
|
| @@ -19,12 +19,18 @@ AwakableList::~AwakableList() {
|
| }
|
|
|
| void AwakableList::AwakeForStateChange(const HandleSignalsState& state) {
|
| - for (AwakeInfoList::iterator it = awakables_.begin(); it != awakables_.end();
|
| - ++it) {
|
| + for (AwakeInfoList::iterator it = awakables_.begin();
|
| + it != awakables_.end();) {
|
| + bool keep = true;
|
| if (state.satisfies(it->signals))
|
| - it->awakable->Awake(MOJO_RESULT_OK, it->context);
|
| + keep = it->awakable->Awake(MOJO_RESULT_OK, it->context);
|
| else if (!state.can_satisfy(it->signals))
|
| - it->awakable->Awake(MOJO_RESULT_FAILED_PRECONDITION, it->context);
|
| + keep = it->awakable->Awake(MOJO_RESULT_FAILED_PRECONDITION, it->context);
|
| + AwakeInfoList::iterator maybe_delete = it;
|
| + ++it;
|
| +
|
| + if (!keep)
|
| + awakables_.erase(maybe_delete);
|
| }
|
| }
|
|
|
|
|