From 0ba4f18ea6981b4d2b4eded11b2da4b2a2192d5b Mon Sep 17 00:00:00 2001 From: David Härdeman Date: Sun, 21 Jun 2020 21:39:15 +0200 Subject: Finish up the assert conversion --- uring.c | 158 ++++++++++++++++++++++++++++++---------------------------------- 1 file changed, 74 insertions(+), 84 deletions(-) (limited to 'uring.c') diff --git a/uring.c b/uring.c index c38c028..f08ba9e 100644 --- a/uring.c +++ b/uring.c @@ -32,8 +32,7 @@ get_sqe(struct cfg *cfg, struct uring_task *task) { struct io_uring_sqe *sqe; - if (!cfg || !task) - die("invalid parameters"); + assert_die(cfg && task, "invalid arguments"); sqe = io_uring_get_sqe(&cfg->uev->uring); if (!sqe) { @@ -54,6 +53,8 @@ uring_task_refdump(struct uring_task *task) char buf[4096]; struct uring_task *tmp; + assert_return(task); + buf[0] = '\0'; for (tmp = task; tmp; tmp = tmp->parent) { size_t prefix; @@ -87,14 +88,11 @@ uring_task_refdump(struct uring_task *task) void uring_task_destroy(struct cfg *cfg, struct uring_task *task) { + assert_return(cfg && task); + debug(DBG_UR, "task %s (%p), fd %i, refcount %u", task->name, task, task->fd, task->refcount); - if (!task) { - error("called with no task"); - return; - } - if (task->fd >= 0) { struct io_uring_sqe *sqe; @@ -110,7 +108,9 @@ uring_task_destroy(struct cfg *cfg, struct uring_task *task) void uring_task_put(struct cfg *cfg, struct uring_task *task) { - struct uring_task *parent = task->parent; + struct uring_task *parent; + + assert_return(cfg && task); debug(DBG_REF, "task %s (%p), refcount %u", task->name, task, task->refcount); @@ -129,20 +129,21 @@ uring_task_put(struct cfg *cfg, struct uring_task *task) return; } - if (parent) - debug(DBG_REF, "putting parent %s (%p)", - task->parent->name, task->parent); - + parent = task->parent; if (task->free) task->free(task); - if (parent) + if (parent) { + debug(DBG_REF, "putting parent %s (%p)", parent->name, parent); uring_task_put(cfg, parent); + } } void uring_task_get(struct cfg *cfg, struct uring_task *task) { + assert_return(cfg && task); + debug(DBG_REF, "task %s (%p), refcount %u", task->name, task, task->refcount); @@ -155,25 +156,27 @@ uring_task_get(struct cfg *cfg, struct uring_task *task) void uring_task_set_buf(struct uring_task *task, struct uring_task_buf *tbuf) { + assert_return(task && tbuf); + debug(DBG_UR, "task %s (%p), buf %p, refcount %u", task->name, task, tbuf, task->refcount); - if (tbuf) { - /* iov_len and msg_namelen are set at send/receive time */ - tbuf->iov.iov_base = tbuf->buf; - tbuf->msg.msg_name = &task->saddr.storage; - tbuf->msg.msg_iov = &tbuf->iov; - tbuf->msg.msg_iovlen = 1; - tbuf->msg.msg_control = NULL; - tbuf->msg.msg_controllen = 0; - tbuf->msg.msg_flags = 0; - } + /* iov_len and msg_namelen are set at send/receive time */ + tbuf->iov.iov_base = tbuf->buf; + tbuf->msg.msg_name = &task->saddr.storage; + tbuf->msg.msg_iov = &tbuf->iov; + tbuf->msg.msg_iovlen = 1; + tbuf->msg.msg_control = NULL; + tbuf->msg.msg_controllen = 0; + tbuf->msg.msg_flags = 0; task->tbuf = tbuf; } void uring_task_set_fd(struct uring_task *task, int fd) { + assert_return(task); + debug(DBG_UR, "task %s (%p), fd %i, refcount %u", task->name, task, fd, task->refcount); @@ -183,6 +186,8 @@ uring_task_set_fd(struct uring_task *task, int fd) void uring_task_close_fd(struct cfg *cfg, struct uring_task *task) { + assert_return(cfg && task); + debug(DBG_UR, "task %s (%p), fd %i, refcount %u", task->name, task, task->fd, task->refcount); @@ -196,28 +201,23 @@ uring_task_close_fd(struct cfg *cfg, struct uring_task *task) struct uring_task * uring_parent(struct cfg *cfg) { - if (!cfg) - die("called with null cfg"); - - if (!cfg->uev) - die("called with uninitialized uring"); + assert_die(cfg && cfg->uev, "invalid arguments"); return &cfg->uev->task; } void -uring_task_init(struct uring_task *task, const char *name, +uring_task_init(struct cfg *cfg, struct uring_task *task, const char *name, struct uring_task *parent, void (*free)(struct uring_task *)) { static bool first = true; + assert_die(cfg && task && !empty_str(name) && free, "invalid arguments"); + if (first) first = false; - else if (!parent) - die("called without a parent"); - - if (!free) - die("called without destructor"); + else + assert_die(parent, "called without a parent task"); task->refcount = 1; task->fd = -1; @@ -232,7 +232,7 @@ uring_task_init(struct uring_task *task, const char *name, "getting parent %s (%p), refcount %u", task->name, task, task->refcount, task->parent->name, task->parent, task->parent->refcount); - uring_task_get(NULL, task->parent); + uring_task_get(cfg, task->parent); } } @@ -241,14 +241,11 @@ uring_close(struct cfg *cfg, struct uring_task *task, int fd) { struct io_uring_sqe *sqe; + assert_return(cfg && task && fd >= 0); + debug(DBG_UR, "task %s (%p), fd %i, refcount %u", task->name, task, task->fd, task->refcount); - if (!task || fd < 0) { - error("invalid parameters (task: %p (%s), fd: %i)", task, task->name, fd); - return; - } - sqe = get_sqe(cfg, task); io_uring_prep_close(sqe, fd); io_uring_sqe_set_data(sqe, (void *)((uintptr_t)task | CQE_TYPE_CLOSE)); @@ -259,8 +256,7 @@ uring_tbuf_write_cb(struct cfg *cfg, struct uring_task *task, int res) { int r; - if (!task || !task->tbuf || !task->final_cb) - die("missing parameters"); + assert_return(cfg && task && task->tbuf && task->final_cb); debug(DBG_UR, "task %s (%p), fd %i, refcount %u", task->name, task, task->fd, task->refcount); @@ -289,10 +285,7 @@ finished: void uring_tbuf_write(struct cfg *cfg, struct uring_task *task, utask_cb_t final_cb) { - if (!task || task->fd < 0 || !task->tbuf || task->tbuf->len < 0) { - error("invalid parameters"); - return; - } + assert_return(cfg && task && task->fd >= 0 && task->tbuf && task->tbuf->len > 0); debug(DBG_UR, "task %s (%p), fd %i, refcount %u", task->name, task, task->fd, task->refcount); @@ -307,10 +300,7 @@ uring_write(struct cfg *cfg, struct uring_task *task, void *buf, size_t len, uta { struct io_uring_sqe *sqe; - if (task->fd < 0) { - error("no fd set"); - return; - } + assert_return(cfg && task && buf && len > 0 && cb && task->fd >= 0); debug(DBG_UR, "task %s (%p), fd %i, refcount %u", task->name, task, task->fd, task->refcount); @@ -326,10 +316,7 @@ uring_tbuf_read_until_cb(struct cfg *cfg, struct uring_task *task, int res) { int r; - if (!task || !task->tbuf || !task->final_cb || !task->is_complete_cb) { - error("invalid parameters"); - return; - } + assert_return(cfg && task && task->tbuf && task->final_cb && task->is_complete_cb); debug(DBG_UR, "task %s (%p), fd %i, refcount %u", task->name, task, task->fd, task->refcount); @@ -368,10 +355,7 @@ void uring_tbuf_read_until(struct cfg *cfg, struct uring_task *task, rutask_cb_t is_complete_cb, utask_cb_t final_cb) { - if (!task || task->fd < 0 || !task->tbuf || !is_complete_cb || !final_cb) { - error("%s: invalid parameters", __func__); - return; - } + assert_return(cfg && task && task->fd >= 0 && task->tbuf && is_complete_cb && final_cb); debug(DBG_UR, "task %s (%p), fd %i, refcount %u", task->name, task, task->fd, task->refcount); @@ -386,6 +370,7 @@ uring_tbuf_read_until(struct cfg *cfg, struct uring_task *task, static int uring_tbuf_eof(struct cfg *cfg, struct uring_task *task, int res) { + assert_return(cfg && task && task->tbuf, -EINVAL); assert_task_alive_or(DBG_UR, task, return -EINTR); if (task->tbuf->len + 1 >= sizeof(task->tbuf->buf)) @@ -403,12 +388,16 @@ void uring_tbuf_read_until_eof(struct cfg *cfg, struct uring_task *task, utask_cb_t final_cb) { + assert_return(cfg && task && task->tbuf && final_cb); + uring_tbuf_read_until(cfg, task, uring_tbuf_eof, final_cb); } static int uring_tbuf_have_data(struct cfg *cfg, struct uring_task *task, int res) { + assert_return(cfg && task, -EINVAL); + if (res < 0) return res; else @@ -418,6 +407,8 @@ uring_tbuf_have_data(struct cfg *cfg, struct uring_task *task, int res) void uring_tbuf_read(struct cfg *cfg, struct uring_task *task, utask_cb_t final_cb) { + assert_return(cfg && task && final_cb); + uring_tbuf_read_until(cfg, task, uring_tbuf_have_data, final_cb); } @@ -426,10 +417,7 @@ uring_read_offset(struct cfg *cfg, struct uring_task *task, void *buf, size_t le { struct io_uring_sqe *sqe; - if (task->fd < 0) { - error("uring_read called with no fd set"); - return; - } + assert_return(cfg && task && buf && len > 0 && task->fd >= 0); debug(DBG_UR, "task %s (%p), fd %i, refcount %u", task->name, task, task->fd, task->refcount); @@ -445,6 +433,8 @@ uring_openat(struct cfg *cfg, struct uring_task *task, const char *path, utask_c { struct io_uring_sqe *sqe; + assert_return(cfg && task && !empty_str(path) && cb); + debug(DBG_UR, "task %s (%p), fd %i, refcount %u", task->name, task, task->fd, task->refcount); @@ -459,10 +449,7 @@ uring_tbuf_recvmsg(struct cfg *cfg, struct uring_task *task, utask_cb_t cb) { struct io_uring_sqe *sqe; - if (!task->tbuf) { - error("called with no tbuf set"); - return; - } + assert_return(cfg && task && task->fd >= 0 && task->tbuf && cb); debug(DBG_UR, "task %s (%p), fd %i, refcount %u", task->name, task, task->fd, task->refcount); @@ -482,10 +469,7 @@ uring_tbuf_sendmsg(struct cfg *cfg, struct uring_task *task, utask_cb_t cb) { struct io_uring_sqe *sqe; - if (!task->tbuf) { - error("%s: called with no tbuf set", __func__); - return; - } + assert_return(cfg && task && task->fd >= 0 && task->tbuf && cb); debug(DBG_UR, "task %s (%p), fd %i, refcount %u", task->name, task, task->fd, task->refcount); @@ -504,10 +488,7 @@ uring_connect(struct cfg *cfg, struct uring_task *task, struct saddr *saddr, uta { struct io_uring_sqe *sqe; - if (task->fd < 0) { - error("no fd set"); - return; - } + assert_return(cfg && task && task->fd >= 0 && saddr && cb); debug(DBG_UR, "task %s (%p), fd %i, refcount %u", task->name, task, task->fd, task->refcount); @@ -523,10 +504,7 @@ uring_accept(struct cfg *cfg, struct uring_task *task, struct saddr *saddr, utas { struct io_uring_sqe *sqe; - if (task->fd < 0) { - error("no fd set"); - return; - } + assert_return(cfg && task && task->fd >= 0 && saddr && cb); debug(DBG_UR, "task %s (%p), fd %i, refcount %u", task->name, task, task->fd, task->refcount); @@ -543,10 +521,7 @@ uring_poll(struct cfg *cfg, struct uring_task *task, short poll_mask, utask_cb_t { struct io_uring_sqe *sqe; - if (task->fd < 0) { - error("uring_poll called with no fd set"); - return; - } + assert_return(cfg && task && task->fd >= 0 && poll_mask && cb); debug(DBG_UR, "task %s (%p), fd %i, refcount %u", task->name, task, task->fd, task->refcount); @@ -562,6 +537,8 @@ uring_poll_cancel(struct cfg *cfg, struct uring_task *task) { struct io_uring_sqe *sqe; + assert_return(cfg && task); + if (task->fd < 0) { /* not an error, no need to print error msg */ return; @@ -581,6 +558,8 @@ uring_free(struct uring_task *task) { struct uring_ev *uev = container_of(task, struct uring_ev, task); + assert_return(task); + debug(DBG_UR, "task %s (%p), fd %i, refcount %u", task->name, task, task->fd, task->refcount); @@ -592,14 +571,19 @@ uring_free(struct uring_task *task) void uring_refdump(struct uring_ev *uev) { + assert_return(uev); + uring_task_refdump(&uev->task); } void uring_delete(struct cfg *cfg) { - struct uring_task *task = &cfg->uev->task; + struct uring_task *task; + + assert_return(cfg && cfg->uev); + task = &cfg->uev->task; debug(DBG_UR, "task %s (%p), fd %i, refcount %u", task->name, task, task->fd, task->refcount); @@ -611,6 +595,8 @@ uring_init(struct cfg *cfg) { struct uring_ev *uev; + assert_return(cfg); + uev = zmalloc(sizeof(*uev)); if (!uev) die("malloc: %m"); @@ -621,7 +607,7 @@ uring_init(struct cfg *cfg) debug(DBG_UR, "uring initialized, features: 0x%08x", uev->uring_params.features); - uring_task_init(&uev->task, "uev", &cfg->task, uring_free); + uring_task_init(cfg, &uev->task, "uev", &cfg->task, uring_free); cfg->uev = uev; uev->cfg = cfg; } @@ -630,6 +616,8 @@ static inline void uring_print_cqe(struct cfg *cfg, const char *type, struct uring_task *task, struct io_uring_cqe *cqe) { + assert_return(cfg && !empty_str(type) && task && cqe); + debug(DBG_UR, "got CQE " "(type: %s, res: %i (%s), task: %s (%p), fd: %i, cb: %p)", type, @@ -644,6 +632,8 @@ uring_print_cqe(struct cfg *cfg, const char *type, struct uring_task *task, void uring_event_loop(struct cfg *cfg) { + assert_return(cfg); + while (true) { struct io_uring_cqe *cqe; unsigned nr, head; -- cgit v1.2.3