+static void check_bad_fds(event_loop_t *loop) {
+ // Just call all registered callbacks and have them check their fds
+
+ do {
+ loop->deletion = false;
+
+ for splay_each(io_t, io, &loop->ios) {
+ if(io->flags & IO_WRITE) {
+ io->cb(loop, io->data, IO_WRITE);
+ }
+
+ if(loop->deletion) {
+ break;
+ }
+
+ if(io->flags & IO_READ) {
+ io->cb(loop, io->data, IO_READ);
+ }
+
+ if(loop->deletion) {
+ break;
+ }
+ }
+ } while(loop->deletion);
+
+ // Rebuild the fdsets
+
+ memset(&loop->readfds, 0, sizeof(loop->readfds));
+ memset(&loop->writefds, 0, sizeof(loop->writefds));
+
+ for splay_each(io_t, io, &loop->ios) {
+ if(io->flags & IO_READ) {
+ FD_SET(io->fd, &loop->readfds);
+ io->cb(loop, io->data, IO_READ);
+ }
+
+ if(io->flags & IO_WRITE) {
+ FD_SET(io->fd, &loop->writefds);
+ io->cb(loop, io->data, IO_WRITE);
+ }
+
+ }
+}
+