Add check for events_ not containing the event we are waiting on because it has already completed
PiperOrigin-RevId: 337185599 Change-Id: I9c73388c0a99c2abbc52aef4e7bf2c61656e8199
This commit is contained in:
parent
465aeca042
commit
82f4f50f4f
@ -736,24 +736,38 @@ class PodTpuDriver : public TpuDriver {
|
||||
|
||||
auto done = [this, event_id]() {
|
||||
mu_.AssertHeld();
|
||||
if (events_.count(event_id) == 0) {
|
||||
LOG(ERROR) << "Cannot find event id " << event_id
|
||||
<< " in WaitForEvent.";
|
||||
}
|
||||
return events_[event_id]->underlying_event != nullptr &&
|
||||
events_[event_id]->underlying_event.use_count() != 0;
|
||||
// The event was either completed and erased from the map or we have
|
||||
// an underlying event available to us.
|
||||
return events_.count(event_id) == 0 ||
|
||||
(events_[event_id]->underlying_event != nullptr &&
|
||||
events_[event_id]->underlying_event.use_count() != 0);
|
||||
};
|
||||
|
||||
auto status = mu_.AwaitWithTimeout(absl::Condition(&done), duration);
|
||||
if (!status) {
|
||||
return absl::nullopt;
|
||||
}
|
||||
underlying_event = events_[event_id]->underlying_event;
|
||||
|
||||
if (events_.count(event_id) > 0) {
|
||||
underlying_event = events_[event_id]->underlying_event;
|
||||
} else {
|
||||
underlying_event = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
// Wait for the underlying event without holding on to the event_lock_, or
|
||||
// else incoming events will not be processed.
|
||||
return underlying_event->AwaitWithTimeout(duration);
|
||||
if (underlying_event != nullptr) {
|
||||
return underlying_event->AwaitWithTimeout(duration);
|
||||
} else {
|
||||
absl::MutexLock l(&mu_);
|
||||
auto event_status = abnormal_event_status_.find(event_id);
|
||||
if (event_status == abnormal_event_status_.end()) {
|
||||
return Status::OK();
|
||||
} else {
|
||||
return event_status->second;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void AddCallbackForEvent(int64_t event_id, std::function<void(Status)> fn)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user