ER del_flg(ID flgid) { uiflag_t *flag; spl_t s; if (xnpod_asynch_p()) return EN_CTXID; if (flgid <= 0 || flgid > uITRON_MAX_FLAGID) return E_ID; xnlock_get_irqsave(&nklock, s); flag = xnmap_fetch(ui_flag_idmap, flgid); if (!flag) { xnlock_put_irqrestore(&nklock, s); return E_NOEXS; } xnmap_remove(ui_flag_idmap, flag->id); ui_mark_deleted(flag); xnregistry_remove(flag->handle); xnfree(flag); if (xnsynch_destroy(&flag->synchbase) == XNSYNCH_RESCHED) xnpod_schedule(); xnlock_put_irqrestore(&nklock, s); return E_OK; }
ER del_mbx(ID mbxid) { uimbx_t *mbx; spl_t s; if (xnpod_asynch_p()) return EN_CTXID; if (mbxid <= 0 || mbxid > uITRON_MAX_MBXID) return E_ID; xnlock_get_irqsave(&nklock, s); mbx = xnmap_fetch(ui_mbx_idmap, mbxid); if (!mbx) { xnlock_put_irqrestore(&nklock, s); return E_NOEXS; } xnmap_remove(ui_mbx_idmap, mbx->id); ui_mark_deleted(mbx); #ifdef CONFIG_XENO_OPT_REGISTRY xnregistry_remove(mbx->handle); #endif /* CONFIG_XENO_OPT_REGISTRY */ xnfree(mbx->ring); xnfree(mbx); if (xnsynch_destroy(&mbx->synchbase) == XNSYNCH_RESCHED) xnpod_schedule(); xnlock_put_irqrestore(&nklock, s); return E_OK; }
int mx_destroy_internal(vrtxmx_t *mx) { int s = xnsynch_destroy(&mx->synchbase); xnmap_remove(vrtx_mx_idmap, mx->mid); removeq(&vrtx_mx_q, &mx->link); xnregistry_remove(mx->handle); xnfree(mx); return s; }
static int sem_destroy_internal(vrtxsem_t *sem) { int s; removeq(&vrtx_sem_q, &sem->link); xnmap_remove(vrtx_sem_idmap, sem->semid); s = xnsynch_destroy(&sem->synchbase); xnregistry_remove(sem->handle); vrtx_mark_deleted(sem); xnfree(sem); return s; }
static int sem_destroy_internal(vrtxsem_t *sem) { int s; removeq(&vrtx_sem_q, &sem->link); xnmap_remove(vrtx_sem_idmap, sem->semid); s = xnsynch_destroy(&sem->synchbase); #ifdef CONFIG_XENO_OPT_REGISTRY xnregistry_remove(sem->handle); #endif /* CONFIG_XENO_OPT_REGISTRY */ vrtx_mark_deleted(sem); xnfree(sem); return s; }