#include <unistd.h>
-void Poller::add_fd(int fd, std::function<int(int)> handler) {
- pfds.emplace_back(pollfd{.fd = fd, .events = POLLIN, .revents = 0});
- handlers.emplace_back(std::move(handler));
-}
-
-int Poller::check_events() {
- int ret = 0;
- if ((ret = poll(this->pfds.data(), this->pfds.size(), -1)) != -1 &&
- errno != EINTR) {
- for (unsigned i = 0; i < pfds.size(); i++) {
- if ((pfds[i].revents & POLLIN) != 0) {
- if (handlers[i](pfds[i].fd) == -1) {
- return -1;
- }
- pfds[i].revents = 0;
- pfds[i].events = POLLIN;
- }
- }
- }
- return ret;
+#ifdef SCOPE_TRACING
+thread_local int ScopeTrace::indent = 0;
+ScopeTrace::ScopeTrace(char const *func) : f(func) {
+ fprintf(stderr, "%lu %*s%s -->\n", pthread_self(), 2 * indent++, "", this->f);
}
+ScopeTrace::~ScopeTrace() { fprintf(stderr, "%lu %*s%s <--\n", pthread_self(), 2 * --indent, "", this->f); }
+#endif
unique_fd::~unique_fd() {
if (this->fd != -1) {