| 448 | } |
| 449 | |
| 450 | void StartAbort(const Status& status) override { |
| 451 | CHECK(!status.ok()); |
| 452 | Table table; |
| 453 | { |
| 454 | mutex_lock l(mu_); |
| 455 | status_.Update(status); |
| 456 | table_.swap(table); |
| 457 | } |
| 458 | for (auto& p : table) { |
| 459 | for (Item* item : p.second) { |
| 460 | if (!item->IsSendValue()) { |
| 461 | if (item->ref_value != nullptr && item->ref_mutex != nullptr) { |
| 462 | item->ref_waiter(status, Args(), Args(), nullptr, nullptr, false); |
| 463 | } else { |
| 464 | item->waiter(status, Args(), Args(), Tensor(), false); |
| 465 | } |
| 466 | } |
| 467 | delete item; |
| 468 | } |
| 469 | } |
| 470 | } |
| 471 | |
| 472 | private: |
| 473 | typedef LocalRendezvousImpl ME; |