/** * Free an mbox. */ void sys_mbox_free(sys_mbox_t mbox) { Assert(mbox != NULL); LWIPMutexDestroy(mbox->mutex); RTSemEventMultiDestroy(mbox->nonempty); RTSemEventMultiDestroy(mbox->nonfull); RTMemFree(mbox); }
/** * Create new mbox. */ err_t sys_mbox_new(sys_mbox_t *pvMbox, int size) { int rc; struct sys_mbox *mbox = NULL; if (pvMbox == NULL) return ERR_ARG; mbox = RTMemAllocZ(sizeof(struct sys_mbox)); Assert(mbox != NULL); if (!mbox) return ERR_MEM; rc = LWIPMutexCreate(&mbox->mutex); AssertRC(rc); if (RT_FAILURE(rc)) { RTMemFree(mbox); return ERR_VAL; } rc = RTSemEventMultiCreate(&mbox->nonempty); AssertRC(rc); if (RT_FAILURE(rc)) { rc = LWIPMutexDestroy(mbox->mutex); AssertRC(rc); RTMemFree(mbox); return ERR_VAL; } rc = RTSemEventMultiCreate(&mbox->nonfull); AssertRC(rc); if (RT_FAILURE(rc)) { rc = RTSemEventMultiDestroy(mbox->nonempty); AssertRC(rc); rc = LWIPMutexDestroy(mbox->mutex); AssertRC(rc); RTMemFree(mbox); return ERR_VAL; } mbox->valid = 1; *pvMbox = mbox; return ERR_OK; }
/** * Free an mbox. */ void sys_mbox_free(sys_mbox_t *pvMbox) { struct sys_mbox *mbox = NULL; Assert(pvMbox && *pvMbox); mbox = (struct sys_mbox*)*pvMbox; LWIPMutexDestroy((mbox)->mutex); RTSemEventMultiDestroy((mbox)->nonempty); RTSemEventMultiDestroy((mbox)->nonfull); RTMemFree(mbox); *pvMbox = NULL; }
/** * Create new mbox. */ sys_mbox_t sys_mbox_new(void) { int rc; struct sys_mbox *mbox; mbox = RTMemAllocZ(sizeof(*mbox)); Assert(mbox != NULL); if (!mbox) return mbox; rc = LWIPMutexCreate(&mbox->mutex); AssertRC(rc); if (RT_FAILURE(rc)) { RTMemFree(mbox); return NULL; } rc = RTSemEventMultiCreate(&mbox->nonempty); AssertRC(rc); if (RT_FAILURE(rc)) { rc = LWIPMutexDestroy(mbox->mutex); AssertRC(rc); RTMemFree(mbox); return NULL; } rc = RTSemEventMultiCreate(&mbox->nonfull); AssertRC(rc); if (RT_FAILURE(rc)) { rc = RTSemEventMultiDestroy(mbox->nonempty); AssertRC(rc); rc = LWIPMutexDestroy(mbox->mutex); AssertRC(rc); RTMemFree(mbox); return NULL; } return mbox; }