|
|
| version 1.2.2.6, 2011/11/30 23:44:57 | version 1.4.2.4, 2012/01/23 10:09:07 |
|---|---|
| Line 51 SUCH DAMAGE. | Line 51 SUCH DAMAGE. |
| #include <sys/queue.h> | #include <sys/queue.h> |
| #include <sys/uio.h> | #include <sys/uio.h> |
| #include <stdint.h> | #include <stdint.h> |
| #include <pthread.h> | |
| /* criteria type */ | /* criteria type */ |
| Line 70 typedef enum { | Line 71 typedef enum { |
| taskWRITE, | taskWRITE, |
| taskTIMER, | taskTIMER, |
| taskEVENT, | taskEVENT, |
| taskEVENTLO, | |
| taskREADY, | taskREADY, |
| taskUNUSE, | taskUNUSE, |
| taskMAX | taskMAX |
| Line 114 typedef struct sched_HooksTask hooks_task_t; | Line 116 typedef struct sched_HooksTask hooks_task_t; |
| /* task callback, like pthread callback! */ | /* task callback, like pthread callback! */ |
| typedef void *(*sched_task_func_t)(sched_task_t * /* current task data*/); | typedef void *(*sched_task_func_t)(sched_task_t * /* current task data*/); |
| /* task lock helpers */ | |
| #define TASK_LOCK(x) ((x)->task_lock++) | |
| #define TASK_UNLOCK(x) ((x)->task_lock ^= (x)->task_lock) | |
| #define TASK_ISLOCKED(x) ((x)->task_lock) | |
| /* task & queue */ | /* task & queue */ |
| struct sched_Task { | struct sched_Task { |
| volatile int task_lock; | |
| unsigned int task_id; | unsigned int task_id; |
| sched_task_type_t task_type; | sched_task_type_t task_type; |
| #define TASK_TYPE(x) (x)->task_type | |
| sched_root_task_t *task_root; | sched_root_task_t *task_root; |
| #define TASK_ROOT(x) (x)->task_root | #define TASK_ROOT(x) (x)->task_root |
| Line 141 struct sched_Task { | Line 150 struct sched_Task { |
| TAILQ_ENTRY(sched_Task) task_node; | TAILQ_ENTRY(sched_Task) task_node; |
| }; | }; |
| typedef TAILQ_HEAD(, sched_Task) sched_queue_t; | typedef TAILQ_HEAD(, sched_Task) sched_queue_t; |
| #define TASK_DATA_SET(x, _dp, _dl) do { \ | |
| if ((x)) { \ | |
| (x)->task_data.iov_base = (_dp); \ | |
| (x)->task_data.iov_len = _dl; \ | |
| } \ | |
| while (0) | |
| /* root task */ | /* root task */ |
| struct sched_RootTask { | struct sched_RootTask { |
| int root_kq; | int root_kq; |
| struct timeval root_wait; | struct timeval root_wait; |
| pthread_mutex_t root_mtx[taskMAX]; | |
| sched_queue_t root_read; | sched_queue_t root_read; |
| sched_queue_t root_write; | sched_queue_t root_write; |
| Line 215 int schedCancel(sched_task_t * __restrict task); | Line 231 int schedCancel(sched_task_t * __restrict task); |
| /* | /* |
| * schedCancelby() - Cancel task from scheduler by criteria | * schedCancelby() - Cancel task from scheduler by criteria |
| * @root = root task | * @root = root task |
| * @queue = cancel from queue, if =NULL cancel same task from all queues | * @type = cancel from queue type, if =taskMAX cancel same task from all queues |
| * @criteria = find task by criteria [CRITERIA_CALL|CRITERIA_ARG|CRITERIA_FD|CRITERIA_VAL|CRITERIA_TV] | * @criteria = find task by criteria [CRITERIA_CALL|CRITERIA_ARG|CRITERIA_FD|CRITERIA_VAL|CRITERIA_TV] |
| * @param = search parameter | * @param = search parameter |
| * @hook = custom cleanup hook function, may be NULL | * @hook = custom cleanup hook function, may be NULL |
| * return: -1 error or 0 ok | * return: -1 error, -2 error in sub-stage cancel execution, -3 error from custom hook or 0 ok |
| */ | */ |
| int schedCancelby(sched_root_task_t * __restrict root, sched_queue_t * __restrict queue, | int schedCancelby(sched_root_task_t * __restrict root, sched_task_type_t type, |
| u_char criteria, void *param, sched_hook_func_t hook); | u_char criteria, void *param, sched_hook_func_t hook); |