--- libaitsched/src/aitsched.c 2012/08/21 12:54:39 1.15 +++ libaitsched/src/aitsched.c 2012/08/22 10:33:45 1.15.2.1 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: aitsched.c,v 1.15 2012/08/21 12:54:39 misho Exp $ +* $Id: aitsched.c,v 1.15.2.1 2012/08/22 10:33:45 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -215,6 +215,7 @@ schedEnd(sched_root_task_t ** __restrict root) sched_task_t *task, *tmp; #ifdef HAVE_LIBPTHREAD register int i; + pthread_t tid; #endif if (!root || !*root) @@ -242,13 +243,19 @@ schedEnd(sched_root_task_t ** __restrict root) schedCancel(task); TAILQ_FOREACH_SAFE(task, &(*root)->root_event, task_node, tmp) schedCancel(task); - TAILQ_FOREACH_SAFE(task, &(*root)->root_task, task_node, tmp) - schedCancel(task); TAILQ_FOREACH_SAFE(task, &(*root)->root_suspend, task_node, tmp) schedCancel(task); TAILQ_FOREACH_SAFE(task, &(*root)->root_ready, task_node, tmp) 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); +#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) schedCancel(task); #ifdef HAVE_LIBPTHREAD