return conn;
}
-bool io_timeout_(struct io_conn *conn, struct timespec ts,
+bool io_timeout_(struct io_conn *conn, struct timerel t,
struct io_plan (*cb)(struct io_conn *, void *), void *arg)
{
assert(cb);
conn->timeout->next = cb;
conn->timeout->next_arg = arg;
- backend_add_timeout(conn, ts);
+ backend_add_timeout(conn, t);
return true;
}
void io_close_other(struct io_conn *conn)
{
- conn->plan = io_close_();
- backend_plan_changed(conn);
+ /* Don't close if already closing! */
+ if (conn->plan.next) {
+ conn->plan = io_close_();
+ backend_plan_changed(conn);
+ }
}
/* Exit the loop, returning this (non-NULL) arg. */