Test SQ poll threads. Unstable and in fact slower :(

This commit is contained in:
Vitaliy Filippov
2020-03-03 17:23:39 +03:00
parent c9f3654905
commit eabfe4faac
18 changed files with 215 additions and 59 deletions
+5 -2
View File
@@ -21,6 +21,7 @@ timerfd_interval::timerfd_interval(ring_loop_t *ringloop, int seconds, std::func
}
consumer.loop = [this]() { loop(); };
ringloop->register_consumer(consumer);
timerfd_index = ringloop->register_fd(timerfd);
this->ringloop = ringloop;
this->callback = cb;
}
@@ -44,10 +45,12 @@ void timerfd_interval::loop()
return;
}
struct ring_data_t *data = ((ring_data_t*)sqe->user_data);
my_uring_prep_poll_add(sqe, timerfd, POLLIN);
my_uring_prep_poll_add(sqe, timerfd_index, POLLIN);
sqe->flags |= IOSQE_FIXED_FILE;
data->allow_cancel = true;
data->callback = [&](ring_data_t *data)
{
if (data->res < 0)
if (data->res < 0 && data->res != -ECANCELED)
{
throw std::runtime_error(std::string("waiting for timer failed: ") + strerror(-data->res));
}