--- libaitsched/src/tasks.c 2022/10/17 22:45:06 1.29 +++ libaitsched/src/tasks.c 2022/11/29 20:15:18 1.30 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: tasks.c,v 1.29 2022/10/17 22:45:06 misho Exp $ +* $Id: tasks.c,v 1.30 2022/11/29 20:15:18 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -133,6 +133,25 @@ sched_task_t * schedRead(sched_root_task_t * __restrict root, sched_task_func_t func, void *arg, int fd, void *opt_data, size_t opt_dlen) { + return schedReadExt(root, func, arg, fd, opt_data, opt_dlen, 0); +} + +/* + * schedReadExt() - Add READ I/O task to scheduler queue with custom event mask + * + * @root = root task + * @func = task execution function + * @arg = 1st func argument + * @fd = fd handle + * @opt_data = Optional data + * @opt_dlen = Optional data length + * @mask = Event mask + * return: NULL error or !=NULL new queued task + */ +sched_task_t * +schedReadExt(sched_root_task_t * __restrict root, sched_task_func_t func, void *arg, int fd, + void *opt_data, size_t opt_dlen, u_long mask) +{ sched_task_t *task; void *ptr; @@ -153,8 +172,11 @@ schedRead(sched_root_task_t * __restrict root, sched_t TASK_DATA(task) = opt_data; TASK_DATLEN(task) = opt_dlen; + TASK_HARG(task) = mask; + if (root->root_hooks.hook_add.read) - ptr = root->root_hooks.hook_add.read(task, NULL); + ptr = root->root_hooks.hook_add.read(task, + (void*) task->task_harg); else ptr = NULL; @@ -181,6 +203,25 @@ sched_task_t * schedWrite(sched_root_task_t * __restrict root, sched_task_func_t func, void *arg, int fd, void *opt_data, size_t opt_dlen) { + return schedWriteExt(root, func, arg, fd, opt_data, opt_dlen, 0); +} + +/* + * schedWriteExt() - Add WRITE I/O task to scheduler queue with custom event mask + * + * @root = root task + * @func = task execution function + * @arg = 1st func argument + * @fd = fd handle + * @opt_data = Optional data + * @opt_dlen = Optional data length + * @mask = Event mask + * return: NULL error or !=NULL new queued task + */ +sched_task_t * +schedWriteExt(sched_root_task_t * __restrict root, sched_task_func_t func, void *arg, int fd, + void *opt_data, size_t opt_dlen, u_long mask) +{ sched_task_t *task; void *ptr; @@ -201,8 +242,11 @@ schedWrite(sched_root_task_t * __restrict root, sched_ TASK_DATA(task) = opt_data; TASK_DATLEN(task) = opt_dlen; + TASK_HARG(task) = mask; + if (root->root_hooks.hook_add.write) - ptr = root->root_hooks.hook_add.write(task, NULL); + ptr = root->root_hooks.hook_add.write(task, + (void*) task->task_harg); else ptr = NULL;