| 332 | |
| 333 | protected: |
| 334 | void ReadUntilEof() { |
| 335 | while (true) { |
| 336 | auto maybe_payload = self_pipe_->Wait(); |
| 337 | std::lock_guard<std::mutex> lock(mutex_); |
| 338 | if (maybe_payload.ok()) { |
| 339 | payloads_.push_back(*maybe_payload); |
| 340 | } else if (maybe_payload.status().IsInvalid()) { |
| 341 | // EOF |
| 342 | break; |
| 343 | } else { |
| 344 | status_ = maybe_payload.status(); |
| 345 | // Since we got an error, we may not be able to ever detect EOF, |
| 346 | // so bail out? |
| 347 | break; |
| 348 | } |
| 349 | } |
| 350 | } |
| 351 | |
| 352 | static void HandleSignal(int signum) { |
| 353 | instance_->signal_received_.store(signum); |