fix: 解决定时器超时但还在队列中无法删除的问题
利用每次创建时,软件定时器timerId都是唯一的(0~0xffffffff循环),在超时写队列时,同时记录软件定时器id,删除的时候更新软件定时器id,那么在处理软件定时器前, 通过队列中记录的id获取软件定时器控制块,如果控制块的id不等于记录的id,那么说明该软件定时器被删除过,将不执行对应回调函数,表现为删除该定时器。 BREAKING CHANGE: SwtmrHandlerItem结构体新增swtmrID字段,用于标识超时队列中软件定时器id Close #I4LFVD Signed-off-by: JerryH <huangjieliang@huawei.com> Change-Id: I716176f177c4bc07adb348936d5568fbadcbebe7
This commit is contained in:
@@ -808,6 +808,7 @@ LITE_OS_SEC_TEXT_INIT UINT32 LOS_TaskResume(UINT32 taskID)
|
||||
LosTaskCB *taskCB = NULL;
|
||||
UINT16 tempStatus;
|
||||
UINT32 retErr = OS_ERROR;
|
||||
BOOL needSched = FALSE;
|
||||
|
||||
if (taskID > LOSCFG_BASE_CORE_TSK_LIMIT) {
|
||||
return LOS_ERRNO_TSK_ID_INVALID;
|
||||
@@ -825,7 +826,7 @@ LITE_OS_SEC_TEXT_INIT UINT32 LOS_TaskResume(UINT32 taskID)
|
||||
OS_GOTO_ERREND();
|
||||
}
|
||||
|
||||
BOOL needSched = OsSchedResume(taskCB);
|
||||
needSched = OsSchedResume(taskCB);
|
||||
if (needSched && g_taskScheduled) {
|
||||
LOS_IntRestore(intSave);
|
||||
LOS_Schedule();
|
||||
|
||||
Reference in New Issue
Block a user