亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ss_task.c

?? 中國石油二期加油站IC系統后臺通訊軟件
?? C
?? 第 1 頁 / 共 4 頁
字號:

#if (ERRCLASS & ERRCLS_INT_PAR)

    /* check entity and instance ranges */
    if (ent >= SS_MAX_ENT ||  inst >= SS_MAX_INST)
    {
        SSLOGERROR(ERRCLS_INT_PAR, ESS502, ERRZERO, "Invalid entity/instance");
        RETVALUE(RFAILED);
    }
#endif


    /* Lock the system task table. We do this to prevent
     *  the system task from being destroyed and confusing
     *  matters before we detach.
     */
    ret = SLock(&osCp.sTskTblLock);
    if (ret != ROK)
    {

#if (ERRCLASS & ERRCLS_DEBUG)
        SSLOGERROR(ERRCLS_DEBUG, ESS503, (ErrVal) ret,
                   "Could not lock system task table");
#endif

        RETVALUE(RFAILED);
    }


    /* lock the TAPA task table */
    SS_ACQUIRE_ALL_SEMA(&osCp.tTskTblSem, ret);
    if (ret != ROK)
    {
        SUnlock(&osCp.sTskTblLock);

#if (ERRCLASS & ERRCLS_DEBUG)
        SSLOGERROR(ERRCLS_DEBUG, ESS504, ERRZERO,
                   "Could not lock TAPA task table");
#endif

        RETVALUE(RFAILED);
    }


#if (ERRCLASS & ERRCLS_INT_PAR)
    /* Check this TAPA task. We do this with the TAPA task table
     *  locked, coz we don't want the task to be found, but then
     *  be deregistered before we lock
     */
    if (osCp.tTskIds[ent][inst] == SS_TSKNC)
    {
        SS_RELEASE_ALL_SEMA(&osCp.tTskTblSem);
        SUnlock(&osCp.sTskTblLock);

        SSLOGERROR(ERRCLS_INT_PAR, ESS505, ERRZERO, "Unknown task");
        RETVALUE(RFAILED);
    }
#endif


    idx = osCp.tTskIds[ent][inst];
    tTsk = &osCp.tTskTbl[idx];


    /* check if this TAPA task is attached to anyone */
    if (tTsk->sTsk == NULLP)
    {
        SS_RELEASE_ALL_SEMA(&osCp.tTskTblSem);
        SUnlock(&osCp.sTskTblLock);
        RETVALUE(ROK);
    }


    /* we get the system task entry out */
    sTsk = tTsk->sTsk;


    /* We unlock the TAPA task table here, and then re-lock it later
     *  because of lock sequencing--we have to lock the system task
     *  entry first, and then the TAPA task table. Note, the system
     *  task table is locked, so nobody can sneak in and destroy the
     *  system task while we're doing this.
     */
    SS_RELEASE_ALL_SEMA(&osCp.tTskTblSem);


    /* lock the system task entry */
    if (!SS_CHECK_CUR_STSK(sTsk))
    {
        ret = SLock(&sTsk->lock);
        if (ret != ROK)
        {
            SUnlock(&osCp.sTskTblLock);

#if (ERRCLASS & ERRCLS_DEBUG)
            SSLOGERROR(ERRCLS_DEBUG, ESS506, (ErrVal) ret,
                       "Could not lock system task entry");
#endif

            RETVALUE(RFAILED);
        }
    }


    /* now we lock the TAPA task table */
    SS_ACQUIRE_ALL_SEMA(&osCp.tTskTblSem, ret);
    if (ret != ROK)
    {
        SUnlock(&sTsk->lock);
        SUnlock(&osCp.sTskTblLock);

#if (ERRCLASS & ERRCLS_DEBUG)
        SSLOGERROR(ERRCLS_DEBUG, ESS507, ERRZERO,
                   "Could not lock TAPA task table");
#endif

        RETVALUE(RFAILED);
    }


    /* Now, we can safely update both the system task entry
     *  and the TAPA task entry. First, we update the TAPA
     *  task entry--nobody is running it now.
     */
    tTsk->sTsk = NULLP;


    /*  Remove this TAPA task from the system task's list of
     *  TAPA tasks to run.
     */
    for (i = 0;  i < SS_MAX_TTSKS;  i++)
    {
        if (sTsk->tTsks[i] == idx)
        {
            sTsk->tTsks[i] = SS_INVALID_IDX;
            sTsk->numTTsks--;
            break;
        }
    }


    /* call the implementation to do anything it needs to */
    ret = ssdDetachTTsk(tTsk);


    /* unlock the TAPA task table */
    SS_RELEASE_ALL_SEMA(&osCp.tTskTblSem);

    /* unlock the system task entry */
    if (!SS_CHECK_CUR_STSK(sTsk))
    {
        SUnlock(&sTsk->lock);
    }

    /* unlock the system task table */
    SUnlock(&osCp.sTskTblLock);


    /* If the implementation couldn't detach the task, we just
     *  return an error, nothing else we can do.
     */
    if (ret != ROK)
    {
        RETVALUE(RFAILED);
    }


    RETVALUE(ROK);
} /* SDetachTTsk */


/*
*
*       Fun:   Post a message to a task
*
*       Desc:  This function is used to post a message to a TAPA
*              task. The message is delivered to the demand queue
*              of the system task that is running the specified
*              destination task.
*
*       Ret:   ROK      - ok
*              RFAILED  - failed, general (optional)
*
*       Notes:
*
*       File:  ss_task.c
*
*/
#ifdef ANSI
PUBLIC S16 SPstTsk
(
Pst *pst,                       /* post information */
Buffer *mBuf                    /* message to post */
)
#else
PUBLIC S16 SPstTsk(pst, mBuf)
Pst *pst;                       /* post information */
Buffer *mBuf;                   /* message to post */
#endif
{
    S16 r;
    S16 i;
    S16 j;
    SsIdx dstIdx;
    SsIdx srcIdx;
    Prior prior;
    SsTTskEntry *tTsk;
    SsMsgInfo *msgInfo;
#if (defined(SS_DRVR_SUPPORT)  ||  defined(SS_RTR_SUPPORT))
    Pst nPst;
    Bool nPstUsed = FALSE;
#endif
#if (defined(SS_RTR_SUPPORT))
    Route rte;
#endif


    TRC1(SPstTsk);
    UNUSED(j);

#if (ERRCLASS & ERRCLS_INT_PAR)

    /* check the message buffer */
    if (mBuf == NULLP)
    {
        SSLOGERROR(ERRCLS_INT_PAR, ESS508, ERRZERO, "Invalid message buffer");
        RETVALUE(RFAILED);
    }

    /* check the pst structure */
    if (pst == NULLP)
    {
        SPutMsg(mBuf);
        SSLOGERROR(ERRCLS_INT_PAR, ESS509, ERRZERO, "Null pointer");
        RETVALUE(RFAILED);
    }
#endif


    /* lock the TAPA task table */
    SS_ACQUIRE_SEMA(&osCp.tTskTblSem, r);
    if (r != ROK)
    {
        SPutMsg(mBuf);

#if (ERRCLASS & ERRCLS_DEBUG)
        SSLOGERROR(ERRCLS_DEBUG, ESS510, ERRZERO,
                   "Could not lock TAPA task table");
#endif

        RETVALUE(RFAILED);
    }


#if (ERRCLASS & ERRCLS_INT_PAR)
    if (pst->srcEnt >= SS_MAX_ENT  ||  pst->srcInst >= SS_MAX_INST
        ||  pst->dstEnt >= SS_MAX_ENT  ||  pst->dstInst >= SS_MAX_INST)
    {
        SS_RELEASE_SEMA(&osCp.tTskTblSem);
        SPutMsg(mBuf);

        SSLOGERROR(ERRCLS_INT_PAR, ESS511, ERRZERO,
                   "Invalid source/destination entity/instance");

        RETVALUE(RFAILED);
    }
#endif


    /* get the src and destination task */
    srcIdx = osCp.tTskIds[pst->srcEnt][pst->srcInst];
    dstIdx = osCp.tTskIds[pst->dstEnt][pst->dstInst];


    /* If the source/destination processor ID is local, the
     *  source/destination TAPA task must be local.
     */
    if ((pst->srcProcId == osCp.procId  &&  srcIdx == SS_TSKNC) 
        ||  (pst->dstProcId == osCp.procId  &&  dstIdx == SS_TSKNC))
    {
        SS_RELEASE_SEMA(&osCp.tTskTblSem);
        SPutMsg(mBuf);

#if (ERRCLASS & ERRCLS_DEBUG)
        SSLOGERROR(ERRCLS_DEBUG, ESS512, ERRZERO, "Unknown task");
		printf("srcEnt=%d, srcProcId=%d, dstEnt=%d, dstProcId=%d, \n \
			Event=%d, Selector=%d\n",
			pst->srcEnt, pst->srcProcId, pst->dstEnt, pst->dstProcId,pst->event,
			pst->selector
			);

#endif

        RETVALUE(RFAILED);
    }


#ifdef SS_RTR_SUPPORT
    /* check if we have a router task registered for this route */
    if (pst->route < RTENC  &&  osCp.rtrTskTbl[pst->route] != NULLP)
    {
        /* copy the Pst structure into a local duplicate */
        for (i = 0;  i < sizeof(Pst);  i++)
        {
            *(((U8 *)(&nPst)) + i) = *(((U8 *) pst) + i);
        }
        pst = &nPst;
        nPstUsed = TRUE;


        /* lock the router task entry */
        rte = pst->route;
        r = SLock(&osCp.rtrTskLocks[rte]);
        if (r != ROK)
        {
            SS_RELEASE_SEMA(&osCp.tTskTblSem);
            SPutMsg(mBuf);

#if (ERRCLASS & ERRCLS_DEBUG)
            SSLOGERROR(ERRCLS_DEBUG, ESS513, ERRZERO,
                       "Could not lock router task entry");
#endif

            RETVALUE(RFAILED);
        }

        /* call the router activation function */
        r = (*osCp.rtrTskTbl[rte])(pst, mBuf);

        /* unlock the router task entry */
        SUnlock(&osCp.rtrTskLocks[rte]);

        if (r == RFAILED  ||  r == ROKIGNORE)
        {
            SS_RELEASE_SEMA(&osCp.tTskTblSem);
            RETVALUE((r == RFAILED) ? RFAILED : ROK);
        }
    }
#endif  /* SS_RTR_SUPPORT */


#ifdef SS_DRVR_SUPPORT
    /* Check for the destination procId. If it is non-local,
     *  we need to find the driver task that will handle this
     *  message.
     */
    if (pst->dstProcId != osCp.procId)
    {
        /*  Need to optimize this search.
         */
        for (i = 0;  i < SS_MAX_DRVRTSKS;  i++)
        {
            if (osCp.drvrTskTbl[i].used
                &&  pst->dstProcId >= osCp.drvrTskTbl[i].low
                &&  pst->dstProcId <= osCp.drvrTskTbl[i].high)
            {
                /* Copy the Pst structure into a local duplicate if not
                 *  already done.
                 */
                if (!nPstUsed)
                {
                    for (j = 0;  j < sizeof(Pst);  j++)
                    {
                        *(((U8 *)(&nPst)) + j) = *(((U8 *) pst) + j);
                    }
                    pst = &nPst;
                    nPstUsed = TRUE;
                }


                /* lock the driver task entry */
                r = SLock(&osCp.drvrTskTbl[i].lock);
                if (r != ROK)
                {
                    SS_RELEASE_SEMA(&osCp.tTskTblSem);
                    SPutMsg(mBuf);

#if (ERRCLASS & ERRCLS_DEBUG)
                    SSLOGERROR(ERRCLS_DEBUG, ESS514, ERRZERO,
                               "Could not lock driver task entry");
#endif

                    RETVALUE(RFAILED);
                }

                CMCHKPKLOG(cmPkInst, osCp.drvrTskTbl[i].channel, mBuf, ESS515, pst);

                (osCp.drvrTskTbl[i].actvTsk)(pst, mBuf);

                /* unlock */
                SUnlock(&osCp.drvrTskTbl[i].lock);
                SS_RELEASE_SEMA(&osCp.tTskTblSem);
                RETVALUE(ROK);
            }
        }

        SS_RELEASE_SEMA(&osCp.tTskTblSem);
        SPutMsg(mBuf);

#if (ERRCLASS & ERRCLS_DEBUG)
        SSLOGERROR(ERRCLS_DEBUG, ESS516, ERRZERO,
                   "Could not find a driver task to handle this proc ID");
#endif

        RETVALUE(RFAILED);
    }
#endif  /* SS_DRVR_SUPPORT */


    /* plug the Pst structure into the message information portion */
    msgInfo = (SsMsgInfo *) (mBuf->b_rptr);
    for (i = 0;  i < (S16 )sizeof(Pst);  i++)
        *(((U8 *)(&msgInfo->pst)) + i) = *(((U8 *) pst) + i);


    /*  Write the message to the demand queue of the system
     *  task which is running the destination task
     */
    tTsk = &osCp.tTskTbl[dstIdx];
    prior = tTsk->tskPrior;

    if (tTsk->sTsk == NULLP)
    {
        SS_RELEASE_SEMA(&osCp.tTskTblSem);
        SPutMsg(mBuf);

#if (ERRCLASS & ERRCLS_DEBUG)
        SSLOGERROR(ERRCLS_DEBUG, ESS517, (ErrVal) 0,
                   "Destination TAPA task is not attached");
#endif

        RETVALUE(RFAILED);
    }

    r = ssDmndQPutLast(&tTsk->sTsk->dQ, mBuf,
                       ((prior * SS_MAX_MSG_PRI) + pst->prior));
    if (r != ROK)
    {
        SS_RELEASE_SEMA(&osCp.tTskTblSem);
        SPutMsg(mBuf);

#if (ERRCLASS & ERRCLS_ADD_RES)
        SSLOGERROR(ERRCLS_ADD_RES, ESS518, (ErrVal) r,
                   "Could not write to demand queue");
#endif

        RETVALUE(RFAILED);
    }


    /* unlock, we're done */
    SS_RELEASE_SEMA(&osCp.tTskTblSem);


    /* If the implementation has anything to do... note that
     *  we call it unlocked at this time.
     */
    ssdPstTsk(pst, mBuf, tTsk);


    RETVALUE(ROK);
} /* SPstTsk */


/********************************************************************30**
  
         End of file: ss_task.c 1.3  -  10/14/98 14:22:22
  
*********************************************************************31*/

  
/********************************************************************40**
  
        Notes: 
  
*********************************************************************41*/

/********************************************************************50**

*********************************************************************51*/

   
/********************************************************************60**
  
        Revision history:
  
*********************************************************************61*/

/********************************************************************90**
 
     ver       pat    init                  description
------------ -------- ---- ----------------------------------------------
1.1          ---      kp   1. initial release

1.2          ---      ag   1. Added ssdPstTsk() function in SPstTsk
             ---      ag   2. Fixed a bug in function SPstTsk
             ---      bsr  3. moved code from ssdDeregInitTskTmr to 
                              SDeregInitTskTmr.
             ---      bsr  4. Added timer deregistration to SDeregTTsk
             ---      bsr  5. Added a check in SPstTsk to see if the
                              destination tapa task is attached to a
                              system task.
             ---      bsr  6. packed channel id into mBuf instead
                              of passing it via route field in post
                              strucure before calling DrvrActvTsk
             ---      kp   7. Fixed bug in SDeregInitTskTmr
             ---      kp   8. Fixed bug in SDeregTTsk
             ---      kp   9. Changed parameters for ssdPstTsk
             ---      kp   9. Cosmetic changes

1.3          ---      kp   1. Added in Message Router support

*********************************************************************91*/

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久99热国产| 久久综合五月天婷婷伊人| 亚洲三级理论片| 色就色 综合激情| 一区二区激情视频| 69堂精品视频| 九九国产精品视频| 国产午夜三级一区二区三| av电影在线观看一区| 一区二区在线观看视频| 中文字幕第一区综合| 福利一区在线观看| 一区二区三区资源| 91精品国产91热久久久做人人| 男男gaygay亚洲| 国产亚洲精品免费| 91久久人澡人人添人人爽欧美| 亚洲国产综合91精品麻豆| 91精品国产乱| 国产美女主播视频一区| 自拍偷拍欧美激情| 91麻豆精品国产自产在线观看一区| 奇米精品一区二区三区四区| 久久久精品免费免费| 91福利精品视频| 精品在线观看免费| 亚洲欧美日韩小说| 欧美一区二区三区精品| 成人在线综合网| 天堂精品中文字幕在线| 国产偷国产偷精品高清尤物| 在线免费观看日本欧美| 久久av中文字幕片| 一区二区三区欧美在线观看| 日韩精品一区二区三区老鸭窝| 成人做爰69片免费看网站| 午夜精彩视频在线观看不卡| 久久婷婷成人综合色| 91免费视频网址| 激情成人午夜视频| 亚洲综合在线五月| 国产欧美综合在线| 91精品国产黑色紧身裤美女| 成人午夜电影久久影院| 视频精品一区二区| 亚洲三级在线免费观看| 日韩av在线播放中文字幕| 亚洲国产高清在线观看视频| 7777精品伊人久久久大香线蕉的| 成人精品视频一区二区三区 | 97超碰欧美中文字幕| 午夜激情一区二区| 亚洲欧美在线视频| 久久夜色精品一区| 91精品国产高清一区二区三区| 99精品黄色片免费大全| 国产精品1024| 久久99精品久久久久| 亚洲va国产天堂va久久en| 亚洲欧洲性图库| 久久精子c满五个校花| 91麻豆精品国产自产在线| 91久久精品网| aaa国产一区| www.日韩av| 国产99久久久久久免费看农村| 男人的天堂久久精品| 亚洲成人一区二区在线观看| 亚洲精品精品亚洲| 综合久久久久久| 中文字幕日韩精品一区 | 黄网站免费久久| 奇米影视7777精品一区二区| 亚洲成a人在线观看| 一区二区在线免费| 夜夜精品浪潮av一区二区三区| 亚洲色图清纯唯美| 一区二区三区影院| 一区二区三区免费看视频| 亚洲欧美日韩一区二区| 一区二区三区在线不卡| 亚洲电影一级片| 亚洲成a人片综合在线| 日本成人在线一区| 久久精品久久综合| 国产麻豆成人传媒免费观看| 国产高清精品网站| 成人高清av在线| 色激情天天射综合网| 欧美吞精做爰啪啪高潮| 欧美日韩不卡视频| 日韩欧美一区二区三区在线| 精品国产乱码久久久久久闺蜜| 日韩精品一区国产麻豆| 久久久久久久网| 亚洲国产精品黑人久久久| 亚洲三级在线免费观看| 亚洲福利视频三区| 麻豆91在线看| www.欧美色图| 精品视频一区二区三区免费| 亚洲一本大道在线| 午夜精品一区在线观看| 日韩国产欧美三级| 国产成人av电影在线播放| 99九九99九九九视频精品| 精品视频一区三区九区| 精品国产髙清在线看国产毛片 | 在线国产亚洲欧美| 欧美疯狂做受xxxx富婆| 精品国产欧美一区二区| 亚洲视频免费在线观看| 午夜视频在线观看一区二区三区| 精品一区二区日韩| 99久久国产综合精品麻豆| 3d动漫精品啪啪1区2区免费| 久久久久久**毛片大全| 樱花影视一区二区| 国产一区在线观看视频| 91黄色免费版| 久久众筹精品私拍模特| 亚洲蜜桃精久久久久久久| 日韩电影在线看| www.成人在线| 日韩午夜激情视频| 亚洲乱码日产精品bd| 久久成人久久爱| 91成人免费在线视频| 国产欧美一区二区精品秋霞影院| 亚洲欧美日本韩国| 久久99国产精品麻豆| 色先锋资源久久综合| 2024国产精品视频| 亚洲福利一二三区| av成人老司机| 久久久久久久久一| 亚洲国产精品影院| 不卡视频在线观看| 久久综合中文字幕| 日本一道高清亚洲日美韩| 色综合久久综合网97色综合| 久久综合九色综合97_久久久| 一区二区三区精品久久久| 成人永久aaa| 久久久影院官网| 久久精品国产免费看久久精品| 在线免费亚洲电影| 综合久久一区二区三区| 国产福利一区二区三区视频| 日韩欧美国产成人一区二区| 一区二区久久久久| 一本到高清视频免费精品| 国产日韩精品一区| 国产在线精品不卡| 亚洲精品在线免费观看视频| 丝袜美腿亚洲色图| 欧美日韩高清影院| 亚洲自拍另类综合| 在线观看欧美黄色| 亚洲美女屁股眼交| 欧洲精品视频在线观看| 亚洲激情在线激情| 色伊人久久综合中文字幕| 亚洲色欲色欲www在线观看| 粉嫩一区二区三区性色av| 国产偷国产偷精品高清尤物| 国产一区欧美一区| 久久久777精品电影网影网| 久久精品99久久久| 久久久噜噜噜久久人人看| 国产一区欧美日韩| 婷婷丁香久久五月婷婷| 欧美久久高跟鞋激| 美洲天堂一区二卡三卡四卡视频 | 国产精品久久免费看| 成人不卡免费av| 亚洲摸摸操操av| 欧美午夜精品免费| 午夜亚洲福利老司机| 日韩写真欧美这视频| 国产一区二区三区四区五区美女| 久久色在线观看| 成人免费看黄yyy456| 亚洲精品乱码久久久久久黑人| 日本韩国一区二区| 日韩和欧美一区二区三区| 日韩一区二区在线播放| 韩国女主播一区| 国产精品久久久久aaaa| 一本到三区不卡视频| 午夜精品123| 久久久欧美精品sm网站| av日韩在线网站| 丝袜亚洲精品中文字幕一区| 日韩精品资源二区在线| 国产精品88av| 伊人色综合久久天天| 91精品国产综合久久久久久| 国内精品视频一区二区三区八戒| 国产精品日韩成人|