-struct io_op *io_break(void *arg, struct io_next *next);
-
-/**
- * io_next - indicate what callback to call next.
- * @conn: this connection.
- * @next: the next function to call once queued IO is complete.
- * @arg: the argument to @next.
- *
- * Every @next (or @start) function should "return io_next(...);" once
- * they have indicated what io to perform (eg. io_write, io_idle).
- * The exception is io_close(), which can be used instead of io_next().
- *
- * Note that as an optimization, the next function may be called
- * immediately, which is why this should be the last statement in your
- * function.
- */
-#define io_next(conn, next, arg) \
- io_next_((conn), \
- typesafe_cb_preargs(struct io_op *, void *, \
- (next), (arg), struct io_conn *), \
- (arg))
-struct io_next *io_next_(struct io_conn *conn,
- struct io_op *(*next)(struct io_conn *, void *arg),
- void *arg);
+#define io_break(ret, plan) (io_plan_other(), io_break_((ret), (plan)))
+struct io_plan io_break_(void *ret, struct io_plan plan);