ER ini_pdq(ID pdqid) { PDQCB *p_pdqcb; ER ercd; LOG_INI_PDQ_ENTER(pdqid); CHECK_TSKCTX_UNL(); CHECK_ID(VALID_PDQID(pdqid)); p_pdqcb = get_pdqcb(pdqid); lock_cpu(); init_wait_queue(&(p_pdqcb->swait_queue)); init_wait_queue(&(p_pdqcb->rwait_queue)); p_pdqcb->count = 0U; p_pdqcb->p_head = NULL; p_pdqcb->unused = 0U; p_pdqcb->p_freelist = NULL; if (p_runtsk != p_schedtsk) { dispatch(); } ercd = E_OK; unlock_cpu(); error_exit: LOG_INI_PDQ_LEAVE(ercd); return(ercd); }
ER ini_pdq(ID pdqid) { PDQCB *p_pdqcb; bool_t dspreq; ER ercd; LOG_INI_PDQ_ENTER(pdqid); CHECK_TSKCTX_UNL(); CHECK_PDQID(pdqid); p_pdqcb = get_pdqcb(pdqid); t_lock_cpu(); if (p_pdqcb->p_pdqinib->pdqatr == TA_NOEXS) { ercd = E_NOEXS; } else if (VIOLATE_ACPTN(p_pdqcb->p_pdqinib->acvct.acptn3)) { ercd = E_OACV; } else { dspreq = init_wait_queue(&(p_pdqcb->swait_queue)); if (init_wait_queue(&(p_pdqcb->rwait_queue))) { dspreq = true; } p_pdqcb->count = 0U; p_pdqcb->p_head = NULL; p_pdqcb->unused = 0U; p_pdqcb->p_freelist = NULL; if (dspreq) { dispatch(); } ercd = E_OK; } t_unlock_cpu(); error_exit: LOG_INI_PDQ_LEAVE(ercd); return(ercd); }