… | |
… | |
299 | break; /* yippie */ |
299 | break; /* yippie */ |
300 | |
300 | |
301 | if (errno != EINVAL) |
301 | if (errno != EINVAL) |
302 | return -1; /* we failed */ |
302 | return -1; /* we failed */ |
303 | |
303 | |
|
|
304 | #if TODO |
|
|
305 | if ((~params.features) & (IORING_FEAT_NODROP | IORING_FEATURE_SINGLE_MMAP)) |
|
|
306 | return -1; /* we require the above features */ |
|
|
307 | #endif |
|
|
308 | |
304 | /* EINVAL: lots of possible reasons, but maybe |
309 | /* EINVAL: lots of possible reasons, but maybe |
305 | * it is because we hit the unqueryable hardcoded size limit |
310 | * it is because we hit the unqueryable hardcoded size limit |
306 | */ |
311 | */ |
307 | |
312 | |
308 | /* we hit the limit already, give up */ |
313 | /* we hit the limit already, give up */ |
… | |
… | |
449 | if (ecb_expect_false (gen != (uint32_t)anfds [fd].egen)) |
454 | if (ecb_expect_false (gen != (uint32_t)anfds [fd].egen)) |
450 | return; |
455 | return; |
451 | |
456 | |
452 | if (ecb_expect_false (res < 0)) |
457 | if (ecb_expect_false (res < 0)) |
453 | { |
458 | { |
454 | //TODO: EINVAL handling (was something failed with this fd) |
459 | /*TODO: EINVAL handling (was something failed with this fd)*/ |
455 | //TODO: EBUSY happens when? |
460 | /*TODO: EBUSY happens when?*/ |
456 | |
461 | |
457 | if (res == -EBADF) |
462 | if (res == -EBADF) |
458 | { |
463 | { |
459 | assert (("libev: event loop rejected bad fd", res != -EBADF)); |
464 | assert (("libev: event loop rejected bad fd", res != -EBADF)); |
460 | fd_kill (EV_A_ fd); |
465 | fd_kill (EV_A_ fd); |