static void psostask_delete_hook(xnthread_t *thread) { /* The scheduler is locked while hooks are running */ psostask_t *task; psostm_t *tm; if (xnthread_get_magic(thread) != PSOS_SKIN_MAGIC) return; #ifdef CONFIG_XENO_OPT_REGISTRY if (xnthread_handle(thread) != XN_NO_HANDLE) xnregistry_remove(xnthread_handle(thread)); #endif /* CONFIG_XENO_OPT_REGISTRY */ task = thread2psostask(thread); removeq(&psostaskq, &task->link); while ((tm = (psostm_t *)getgq(&task->alarmq)) != NULL) tm_destroy_internal(tm); taskev_destroy(&task->evgroup); xnarch_delete_display(&task->threadbase); psos_mark_deleted(task); xnheap_schedule_free(&kheap, task, &task->link); }
static void __task_switch_hook(xnthread_t *thread) { if (xnthread_get_magic(thread) == RTAI_SKIN_MAGIC) { RT_TASK *task = thread2rtask(thread); if (task->sigfn) task->sigfn(); } }
static WIND_TCB *__wind_task_current(struct task_struct *curr) { xnthread_t *thread = xnshadow_thread(curr); if (!thread || xnthread_get_magic(thread) != VXWORKS_SKIN_MAGIC) return NULL; return thread2wind_task(thread); /* Convert TCB pointers. */ }
static void __task_delete_hook(xnthread_t *thread) { RT_TASK *task; if (xnthread_get_magic(thread) != RTAI_SKIN_MAGIC) return; task = thread2rtask(thread); removeq(&__rtai_task_q, &task->link); rtai_mark_deleted(task); if (xnthread_test_state(&task->thread_base, XNSHADOW)) xnheap_schedule_free(&kheap, task, &task->link); }
static void psostask_delete_hook(xnthread_t *thread) { /* The scheduler is locked while hooks are running */ psostask_t *task; psostm_t *tm; if (xnthread_get_magic(thread) != PSOS_SKIN_MAGIC) return; task = thread2psostask(thread); removeq(&psostaskq, &task->link); while ((tm = (psostm_t *)getgq(&task->alarmq)) != NULL) tm_destroy_internal(tm); taskev_destroy(&task->evgroup); xnarch_delete_display(&task->threadbase); psos_mark_deleted(task); xnheap_schedule_free(&kheap, task, &task->link); }
static void __shadow_delete_hook(xnthread_t *thread) { if (xnthread_get_magic(thread) == RTAI_SKIN_MAGIC && xnthread_test_state(thread, XNMAPPED)) xnshadow_unmap(thread); }