|
|
| version 1.15.2.1, 2012/08/22 10:33:45 | version 1.15.2.3, 2012/08/23 00:31:41 |
|---|---|
| Line 121 schedRegisterHooks(sched_root_task_t * __restrict root | Line 121 schedRegisterHooks(sched_root_task_t * __restrict root |
| return 0; | return 0; |
| } | } |
| #ifdef HAVE_LIBPTHREAD | |
| static void | |
| _sched_threadChild() | |
| { | |
| pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, NULL); | |
| pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, NULL); | |
| pthread_testcancel(); | |
| } | |
| #endif | |
| /* | /* |
| * schedInit() - Init scheduler | * schedInit() - Init scheduler |
| * | * |
| Line 181 schedInit(void ** __restrict data, size_t datlen) | Line 191 schedInit(void ** __restrict data, size_t datlen) |
| TAILQ_INIT(&root->root_thread); | TAILQ_INIT(&root->root_thread); |
| #ifdef HAVE_LIBPTHREAD | #ifdef HAVE_LIBPTHREAD |
| pthread_atfork(NULL, NULL, _sched_threadChild); | |
| for (i = 0; i < taskMAX; i++) | for (i = 0; i < taskMAX; i++) |
| pthread_mutex_unlock(&root->root_mtx[i]); | pthread_mutex_unlock(&root->root_mtx[i]); |
| #endif | #endif |
| Line 215 schedEnd(sched_root_task_t ** __restrict root) | Line 227 schedEnd(sched_root_task_t ** __restrict root) |
| sched_task_t *task, *tmp; | sched_task_t *task, *tmp; |
| #ifdef HAVE_LIBPTHREAD | #ifdef HAVE_LIBPTHREAD |
| register int i; | register int i; |
| pthread_t tid; | |
| #endif | #endif |
| if (!root || !*root) | if (!root || !*root) |
| Line 247 schedEnd(sched_root_task_t ** __restrict root) | Line 258 schedEnd(sched_root_task_t ** __restrict root) |
| schedCancel(task); | schedCancel(task); |
| TAILQ_FOREACH_SAFE(task, &(*root)->root_ready, task_node, tmp) | TAILQ_FOREACH_SAFE(task, &(*root)->root_ready, task_node, tmp) |
| schedCancel(task); | schedCancel(task); |
| TAILQ_FOREACH_SAFE(task, &(*root)->root_thread, task_node, tmp) { | TAILQ_FOREACH_SAFE(task, &(*root)->root_thread, task_node, tmp) |
| tid = (pthread_t) TASK_VAL(task); | |
| schedCancel(task); | schedCancel(task); |
| #ifdef HAVE_LIBPTHREAD | |
| if (TASK_FLAG(task) == PTHREAD_CREATE_JOINABLE) | |
| pthread_join(tid, NULL); | |
| #endif | |
| } | |
| TAILQ_FOREACH_SAFE(task, &(*root)->root_task, task_node, tmp) | TAILQ_FOREACH_SAFE(task, &(*root)->root_task, task_node, tmp) |
| schedCancel(task); | schedCancel(task); |