/*
 *  ======== 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);
}
Пример #2
0
/*
 *  ======== 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);
}