MCPcopy Create free account
hub / github.com/catboost/catboost / Wait

Method Wait

library/cpp/coroutine/engine/poller.cpp:235–304  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

233 }
234
235 void Wait(TEvents& events, TInstant deadLine) {
236 T_.clear();
237 T_.reserve(Size());
238
239 for (TFds::TConstIterator it = S_.Begin(); it != S_.End(); ++it) {
240 const pollfd pfd = {
241 it->Fd,
242 PollFlags(it->Flags),
243 0,
244 };
245
246 T_.push_back(pfd);
247 }
248
249 const ssize_t ret = PollD(T_.data(), (nfds_t) T_.size(), deadLine);
250
251 if (ret <= 0) {
252 return;
253 }
254
255 events.reserve(T_.size());
256
257 for (size_t i = 0; i < T_.size(); ++i) {
258 const pollfd& pfd = T_[i];
259 const short ev = pfd.revents;
260
261 if (!ev) {
262 continue;
263 }
264
265 int status = 0;
266 ui16 filter = 0;
267
268 // We are perfectly fine with an EOF while reading a pipe or a unix socket
269 if ((ev & POLLIN) || (ev & POLLHUP) && (pfd.events & POLLIN)) {
270 filter |= CONT_POLL_READ;
271 }
272
273 if (ev & POLLOUT) {
274 filter |= CONT_POLL_WRITE;
275 }
276
277#if defined(_linux_)
278 if (ev & POLLRDHUP) {
279 filter |= CONT_POLL_RDHUP;
280 }
281#endif
282
283 if (ev & POLLERR) {
284 status = EIO;
285 } else if (ev & POLLHUP && pfd.events & POLLOUT) {
286 // Only write operations may cause EPIPE
287 status = EPIPE;
288 } else if (ev & POLLNVAL) {
289 status = EINVAL;
290 }
291
292 if (status) {

Callers

nothing calls this directly

Calls 10

PollFlagsFunction · 0.85
PollDFunction · 0.70
SizeFunction · 0.50
clearMethod · 0.45
reserveMethod · 0.45
BeginMethod · 0.45
EndMethod · 0.45
push_backMethod · 0.45
dataMethod · 0.45
sizeMethod · 0.45

Tested by

no test coverage detected