|
|
| version 1.4, 2012/01/08 00:51:17 | version 1.4.2.1, 2012/01/08 02:01:41 |
|---|---|
| Line 122 schedInit(void ** __restrict data, size_t datlen) | Line 122 schedInit(void ** __restrict data, size_t datlen) |
| { | { |
| sched_root_task_t *root = NULL; | sched_root_task_t *root = NULL; |
| int (*func)(sched_root_task_t *); | int (*func)(sched_root_task_t *); |
| #ifdef HAVE_LIBPTHREAD | |
| register int i; | |
| #endif | |
| root = malloc(sizeof(sched_root_task_t)); | root = malloc(sizeof(sched_root_task_t)); |
| if (!root) { | if (!root) { |
| LOGERR; | LOGERR; |
| } else { | } else { |
| memset(root, 0, sizeof(sched_root_task_t)); | memset(root, 0, sizeof(sched_root_task_t)); |
| #ifdef HAVE_LIBPTHREAD | |
| for (i = 0; i < taskMAX; i++) | |
| if (pthread_mutex_init(&root->root_mtx[i], NULL)) { | |
| LOGERR; | |
| while (i) | |
| pthread_mutex_destroy(&root->root_mtx[--i]); | |
| free(root); | |
| return NULL; | |
| } | |
| for (i = 0; i < taskMAX; i++) | |
| ROOT_QLOCK(root, i); | |
| #endif | |
| TAILQ_INIT(&root->root_read); | TAILQ_INIT(&root->root_read); |
| TAILQ_INIT(&root->root_write); | TAILQ_INIT(&root->root_write); |
| TAILQ_INIT(&root->root_timer); | TAILQ_INIT(&root->root_timer); |
| Line 136 schedInit(void ** __restrict data, size_t datlen) | Line 154 schedInit(void ** __restrict data, size_t datlen) |
| TAILQ_INIT(&root->root_ready); | TAILQ_INIT(&root->root_ready); |
| TAILQ_INIT(&root->root_unuse); | TAILQ_INIT(&root->root_unuse); |
| #ifdef HAVE_LIBPTHREAD | |
| for (i = 0; i < taskMAX; i++) | |
| ROOT_QUNLOCK(root, i); | |
| #endif | |
| if (data && *data) { | if (data && *data) { |
| if (datlen) { | if (datlen) { |
| root->root_data.iov_base = *data; | root->root_data.iov_base = *data; |
| Line 163 int | Line 186 int |
| schedEnd(sched_root_task_t ** __restrict root) | schedEnd(sched_root_task_t ** __restrict root) |
| { | { |
| sched_task_t *task; | sched_task_t *task; |
| #ifdef HAVE_LIBPTHREAD | |
| register int i; | |
| #endif | |
| if (!root || !*root) | if (!root || !*root) |
| return -1; | return -1; |
| #ifdef HAVE_LIBPTHREAD | |
| for (i = 0; i < taskMAX; i++) | |
| ROOT_QLOCK(*root, i); | |
| #endif | |
| TAILQ_FOREACH(task, &(*root)->root_read, task_node) { | TAILQ_FOREACH(task, &(*root)->root_read, task_node) { |
| schedCancel(task); | schedCancel(task); |
| } | } |
| Line 187 schedEnd(sched_root_task_t ** __restrict root) | Line 217 schedEnd(sched_root_task_t ** __restrict root) |
| TAILQ_REMOVE(&(*root)->root_unuse, task, task_node); | TAILQ_REMOVE(&(*root)->root_unuse, task, task_node); |
| free(task); | free(task); |
| } | } |
| #ifdef HAVE_LIBPTHREAD | |
| for (i = 0; i < taskMAX; i++) | |
| ROOT_QUNLOCK(*root, i); | |
| #endif | |
| if ((*root)->root_hooks.hook_root.fini) | if ((*root)->root_hooks.hook_root.fini) |
| (*root)->root_hooks.hook_root.fini(*root, NULL); | (*root)->root_hooks.hook_root.fini(*root, NULL); |
| #ifdef HAVE_LIBPTHREAD | |
| for (i = 0; i < taskMAX; i++) | |
| pthread_mutex_destroy(&(*root)->root_mtx[i]); | |
| #endif | |
| free(*root); | free(*root); |
| *root = NULL; | *root = NULL; |