示例#1
0
/*********************************************************************************************************
** 函数名称: wdg_delete
** 功能描述: 删除定时器.
** 输 入  : wdg_id        定时器句柄
** 输 出  : ERROR or OK
** 全局变量: 
** 调用模块: 
                                           API 函数
*********************************************************************************************************/
LW_API 
int  wdg_delete (wdg_t wdg_id)
{
    if (API_TimerDelete(&wdg_id)) {
        errno = EINVAL;
        return  (PX_ERROR);
    
    } else {
        return  (ERROR_NONE);
    }
}
示例#2
0
/*********************************************************************************************************
** 函数名称: __resPidReclaim
** 功能描述: 从资源管理器删除对应进程的全部资源 (需要等待所有进程内线程结束)
** 输 入  : pid           进程号
** 输 出  : 是否成功, 如果不成功证明这个进程还有线程在运行.
** 全局变量: 
** 调用模块: 
*********************************************************************************************************/
INT  __resPidReclaim (pid_t  pid)
{
    INT                 i;
    PLW_RESOURCE_H      presh;
    PLW_RESOURCE_RAW    presraw;
    PLW_LIST_LINE       plineTemp;
    
    if (pid == 0) {
        return  (ERROR_NONE);                                           /*  内核, 不执行回收操作        */
    }
    
    __LW_RESRAW_LOCK();
    plineTemp = _G_plineResRaw;
    while (plineTemp) {
        presraw   = (PLW_RESOURCE_RAW)plineTemp;
        plineTemp = _list_line_get_next(plineTemp);
        if (presraw->RESRAW_pid == pid) {
            presraw->RESRAW_pfuncFree(presraw->RESRAW_pvArg[0],
                                      presraw->RESRAW_pvArg[1],
                                      presraw->RESRAW_pvArg[2],
                                      presraw->RESRAW_pvArg[3],
                                      presraw->RESRAW_pvArg[4],
                                      presraw->RESRAW_pvArg[5]);        /*  释放原始资源                */
        }
    }
    __LW_RESRAW_UNLOCK();
    
    vprocIoReclaim(pid, LW_FALSE);                                      /*  回收进程所有打开的文件      */
    
#if LW_CFG_VMM_EN > 0
    API_VmmMmapReclaim(pid);
#endif                                                                  /*  LW_CFG_VMM_EN > 0           */
    
    for (i = 0; i < LW_CFG_MAX_THREAD_POOLS; i++) {
        presh = &_G_reshThreadPoolBuffer[i];
        if ((presh->RESH_pid == pid) && !presh->RESH_bIsGlobal) {
            API_ThreadPoolDelete(&presh->RESH_ulHandle);
        }
    }
    
    for (i = 0; i < LW_CFG_MAX_EVENTS; i++) {                           /*  处理事件                    */
        presh = &_G_reshEventBuffer[i];
        if ((presh->RESH_pid == pid) && !presh->RESH_bIsGlobal) {
            if (_ObjectGetClass(presh->RESH_ulHandle) == _OBJECT_MSGQUEUE) {
                API_MsgQueueDelete(&presh->RESH_ulHandle);
            } else {
                API_SemaphoreDelete(&presh->RESH_ulHandle);
            }
        }
    }
    
    for (i = 0; i < LW_CFG_MAX_EVENTSETS; i++) {                        /*  处理事件组                  */
        presh = &_G_reshEventsetBuffer[i];
        if ((presh->RESH_pid == pid) && !presh->RESH_bIsGlobal) {
            API_EventSetDelete(&presh->RESH_ulHandle);
        }
    }
    
    for (i = 0; i < LW_CFG_MAX_TIMERS; i++) {                           /*  处理定时器                  */
        presh = &_G_reshTimerBuffer[i];
        if ((presh->RESH_pid == pid) && !presh->RESH_bIsGlobal) {
            API_TimerDelete(&presh->RESH_ulHandle);
        }
    }
    
    for (i = 0; i < LW_CFG_MAX_RMSS; i++) {                             /*  处理 RMS                    */
        presh = &_G_reshRmsBuffer[i];
        if ((presh->RESH_pid == pid) && !presh->RESH_bIsGlobal) {
            API_RmsDeleteEx(&presh->RESH_ulHandle, LW_TRUE);
        }
    }
    
    for (i = 0; i < LW_CFG_MAX_PARTITIONS; i++) {                       /*  处理 PATITIONS              */
        presh = &_G_reshPartitionBuffer[i];
        if ((presh->RESH_pid == pid) && !presh->RESH_bIsGlobal) {
            API_PartitionDeleteEx(&presh->RESH_ulHandle, LW_TRUE);
        }
    }
    
    for (i = 0; i < LW_CFG_MAX_REGIONS; i++) {                          /*  最后处理可变内存            */
        presh = &_G_reshRegionBuffer[i];
        if ((presh->RESH_pid == pid) && !presh->RESH_bIsGlobal) {
            API_RegionDeleteEx(&presh->RESH_ulHandle, LW_TRUE);
        }
    }
    
    return  (ERROR_NONE);
}