--- libaitsched/src/tasks.c 2011/08/05 15:52:00 1.1.1.1 +++ libaitsched/src/tasks.c 2011/08/11 22:55:28 1.1.1.1.2.1 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: tasks.c,v 1.1.1.1 2011/08/05 15:52:00 misho Exp $ +* $Id: tasks.c,v 1.1.1.1.2.1 2011/08/11 22:55:28 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -47,19 +47,18 @@ SUCH DAMAGE. /* - * schedRead() - Add READ task to scheduler queue + * schedRead() - Add READ I/O task to scheduler queue * @root = root task * @func = task execution function * @arg = 1st func argument - * @... = next func arguments, like fd handle + * @fd = fd handle * return: NULL error or !=NULL new queued task */ sched_task_t * -schedRead(sched_root_task_t * __restrict root, sched_task_func_t func, void *arg, ...) +schedRead(sched_root_task_t * __restrict root, sched_task_func_t func, void *arg, int fd) { sched_task_t *task; void *ptr; - va_list lst; if (!root || !func) return NULL; @@ -82,9 +81,7 @@ schedRead(sched_root_task_t * __restrict root, sched_t task->task_func = func; TASK_ARG(task) = arg; - va_start(lst, arg); - TASK_FD(task) = va_arg(lst, int); - va_end(lst); + TASK_FD(task) = fd; if (root->root_hooks.hook_add.read) ptr = root->root_hooks.hook_add.read(task, NULL); @@ -103,19 +100,18 @@ schedRead(sched_root_task_t * __restrict root, sched_t } /* - * schedWrite() - Add WRITE task to scheduler queue + * schedWrite() - Add WRITE I/O task to scheduler queue * @root = root task * @func = task execution function * @arg = 1st func argument - * @... = next func arguments, like fd handle + * @fd = fd handle * return: NULL error or !=NULL new queued task */ sched_task_t * -schedWrite(sched_root_task_t * __restrict root, sched_task_func_t func, void *arg, ...) +schedWrite(sched_root_task_t * __restrict root, sched_task_func_t func, void *arg, int fd) { sched_task_t *task; void *ptr; - va_list lst; if (!root || !func) return NULL; @@ -138,9 +134,7 @@ schedWrite(sched_root_task_t * __restrict root, sched_ task->task_func = func; TASK_ARG(task) = arg; - va_start(lst, arg); - TASK_FD(task) = va_arg(lst, int); - va_end(lst); + TASK_FD(task) = fd; if (root->root_hooks.hook_add.write) ptr = root->root_hooks.hook_add.write(task, NULL); @@ -163,18 +157,16 @@ schedWrite(sched_root_task_t * __restrict root, sched_ * @root = root task * @func = task execution function * @arg = 1st func argument - * @... = next func arguments in microSecs, define period 1sec == 1000000 + * @ms = arguments in microSecs, define period 1sec == 1000000 * return: NULL error or !=NULL new queued task */ sched_task_t * -schedTimer(sched_root_task_t * __restrict root, sched_task_func_t func, void *arg, ...) +schedTimer(sched_root_task_t * __restrict root, sched_task_func_t func, void *arg, u_int ms) { sched_task_t *task, *t = NULL; void *ptr; - va_list lst; struct timeval now; struct timespec nw; - u_int tim; if (!root || !func) return NULL; @@ -197,14 +189,11 @@ schedTimer(sched_root_task_t * __restrict root, sched_ task->task_func = func; TASK_ARG(task) = arg; - va_start(lst, arg); - tim = va_arg(lst, u_int); - va_end(lst); /* calculate timeval structure */ clock_gettime(CLOCK_MONOTONIC, &nw); - now.tv_sec = nw.tv_sec + tim / 1000000; - now.tv_usec = nw.tv_nsec / 1000 + (tim % 1000000); + now.tv_sec = nw.tv_sec + ms / 1000000; + now.tv_usec = nw.tv_nsec / 1000 + (ms % 1000000); if (now.tv_usec >= 1000000) { now.tv_sec++; now.tv_usec -= 1000000; @@ -245,15 +234,14 @@ schedTimer(sched_root_task_t * __restrict root, sched_ * @root = root task * @func = task execution function * @arg = 1st func argument - * @... = next func arguments, like u_long + * @val = additional func argument * return: NULL error or !=NULL new queued task */ sched_task_t * -schedEvent(sched_root_task_t * __restrict root, sched_task_func_t func, void *arg, ...) +schedEvent(sched_root_task_t * __restrict root, sched_task_func_t func, void *arg, u_long val) { sched_task_t *task; void *ptr; - va_list lst; if (!root || !func) return NULL; @@ -276,9 +264,7 @@ schedEvent(sched_root_task_t * __restrict root, sched_ task->task_func = func; TASK_ARG(task) = arg; - va_start(lst, arg); - TASK_VAL(task) = va_arg(lst, u_long); - va_end(lst); + TASK_VAL(task) = val; if (root->root_hooks.hook_add.event) ptr = root->root_hooks.hook_add.event(task, NULL); @@ -302,15 +288,14 @@ schedEvent(sched_root_task_t * __restrict root, sched_ * @root = root task * @func = task execution function * @arg = 1st func argument - * @... = next func arguments, like u_long + * @val = additional func argument * return: NULL error or !=NULL new queued task */ sched_task_t * -schedEventLo(sched_root_task_t * __restrict root, sched_task_func_t func, void *arg, ...) +schedEventLo(sched_root_task_t * __restrict root, sched_task_func_t func, void *arg, u_long val) { sched_task_t *task; void *ptr; - va_list lst; if (!root || !func) return NULL; @@ -333,9 +318,7 @@ schedEventLo(sched_root_task_t * __restrict root, sche task->task_func = func; TASK_ARG(task) = arg; - va_start(lst, arg); - TASK_VAL(task) = va_arg(lst, u_long); - va_end(lst); + TASK_VAL(task) = val; if (root->root_hooks.hook_add.eventlo) ptr = root->root_hooks.hook_add.eventlo(task, NULL); @@ -358,14 +341,14 @@ schedEventLo(sched_root_task_t * __restrict root, sche * @root = root task * @func = task execution function * @arg = 1st func argument - * @... = next func arguments, like u_long - * return: NULL error or !=NULL new queued task + * @val = additional func argument + * return: return value from called func */ sched_task_t * -schedCallOnce(sched_root_task_t * __restrict root, sched_task_func_t func, void *arg, ...) +schedCallOnce(sched_root_task_t * __restrict root, sched_task_func_t func, void *arg, u_long val) { sched_task_t *task; - va_list lst; + void *ret; if (!root || !func) return NULL; @@ -388,15 +371,11 @@ schedCallOnce(sched_root_task_t * __restrict root, sch task->task_func = func; TASK_ARG(task) = arg; - va_start(lst, arg); - TASK_VAL(task) = va_arg(lst, u_long); - va_end(lst); + TASK_VAL(task) = val; - if (schedCall(task)) { - task->task_type = taskUNUSE; - TAILQ_INSERT_TAIL(&root->root_unuse, task, task_node); - task = NULL; - } + ret = schedCall(task); - return task; + task->task_type = taskUNUSE; + TAILQ_INSERT_TAIL(&root->root_unuse, task, task_node); + return ret; }