/* * ======== doCmd ======== */ static Int doCmd(Int cmdId, Processor_Handle proc) { Int result; IArg key; Log_print2(Diags_ENTRY, "[+E] doCmd> Enter (cmdId=%d, proc=0x%x)", (IArg)cmdId, (IArg)proc); //pthread_mutex_lock(&dcmd.gate); key = GateThread_enter(dcmd.gate); dcmd.proc = proc; dcmd.cmdId = cmdId; //pthread_cond_signal(&dcmd.cmdPresent); SemThread_post(dcmd.cmdPresent, NULL); //while (dcmd.reply == NONE) { // pthread_cond_wait(&dcmd.replyPresent, &dcmd.gate); //} SemThread_pend(dcmd.replyPresent, SemThread_FOREVER, NULL); result = dcmd.reply; dcmd.reply = NONE; //pthread_mutex_unlock(&dcmd.gate); GateThread_leave(dcmd.gate, key); Log_print1(Diags_EXIT, "[+X] doCmd> Exit (result=%d)", (IArg)result); return (result); }
/* * ======== RcmClient_genMsgId_P ======== */ UInt16 RcmClient_genMsgId_P(RcmClient_Object *obj) { GateThread_Handle gateH; IArg key; UInt16 msgId; gateH = GateThread_handle(&obj->gate); key = GateThread_enter(gateH); msgId = (obj->msgId == 0xFFFF ? obj->msgId = 1 : ++(obj->msgId)); GateThread_leave(gateH, key); return(msgId); }