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_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); }