--- libaitsched/src/tasks.c 2012/08/22 10:33:45 1.13.2.1 +++ libaitsched/src/tasks.c 2012/08/22 23:43:36 1.13.2.3 @@ -3,7 +3,7 @@ * by Michael Pounov * * $Author: misho $ -* $Id: tasks.c,v 1.13.2.1 2012/08/22 10:33:45 misho Exp $ +* $Id: tasks.c,v 1.13.2.3 2012/08/22 23:43:36 misho Exp $ * ************************************************************************** The ELWIX and AITNET software is distributed under the following @@ -106,6 +106,8 @@ sched_unuseTask(sched_task_t * __restrict task) return task; } +#pragma GCC visibility push(hidden) + void * _sched_threadJoin(sched_task_t *task) { @@ -115,12 +117,19 @@ _sched_threadJoin(sched_task_t *task) return NULL; #ifdef HAVE_LIBPTHREAD - pthread_join((pthread_t) TASK_VAL(task), &ret); - TASK_ROOT(task)->root_ret = ret; + if (pthread_kill((pthread_t) TASK_VAL(task), 0)) { + pthread_join((pthread_t) TASK_VAL(task), &ret); + TASK_ROOT(task)->root_ret = ret; + } else { + usleep(10000); + schedTaskSelf(task); + } #endif return NULL; } + +#pragma GCC visibility pop /* * sched_taskExit() - Exit routine for scheduler task, explicit required for thread tasks