Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Kernel Liteos A
提交
d9ed4b4b
K
Kernel Liteos A
项目概览
OpenHarmony
/
Kernel Liteos A
1 年多 前同步成功
通知
460
Star
414
Fork
55
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
4
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel Liteos A
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
4
Issue
4
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
d9ed4b4b
编写于
7月 15, 2021
作者:
O
openharmony_ci
提交者:
Gitee
7月 15, 2021
浏览文件
操作
浏览文件
下载
差异文件
!427 fix: 修复lwip2.0 增强在futex中异常挂死问题
Merge pull request !427 from zhushengle/futex
上级
60bf2fc5
1157c4a2
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
19 addition
and
8 deletion
+19
-8
kernel/base/ipc/los_futex.c
kernel/base/ipc/los_futex.c
+19
-8
未找到文件。
kernel/base/ipc/los_futex.c
浏览文件 @
d9ed4b4b
...
...
@@ -199,6 +199,9 @@ STATIC INLINE VOID OsFutexReplaceQueueListHeadNode(FutexNode *oldHeadNode, Futex
LOS_DL_LIST
*
futexList
=
oldHeadNode
->
futexList
.
pstPrev
;
LOS_ListDelete
(
&
oldHeadNode
->
futexList
);
LOS_ListHeadInsert
(
futexList
,
&
newHeadNode
->
futexList
);
if
((
newHeadNode
->
queueList
.
pstNext
==
NULL
)
||
(
newHeadNode
->
queueList
.
pstPrev
==
NULL
))
{
LOS_ListInit
(
&
newHeadNode
->
queueList
);
}
}
STATIC
INLINE
VOID
OsFutexDeleteKeyFromFutexList
(
FutexNode
*
node
)
...
...
@@ -319,11 +322,10 @@ STATIC VOID OsFutexInsertNewFutexKeyToHash(FutexNode *node)
futexList
!=
&
(
hashNode
->
lockList
);
futexList
=
futexList
->
pstNext
)
{
headNode
=
OS_FUTEX_FROM_FUTEXLIST
(
futexList
);
if
(
node
->
key
<=
headNode
->
key
)
{
if
(
node
->
key
<=
headNode
->
key
)
{
LOS_ListTailInsert
(
&
(
headNode
->
futexList
),
&
(
node
->
futexList
));
break
;
}
}
EXIT:
...
...
@@ -797,6 +799,7 @@ EXIT_UNLOCK_ERR:
STATIC
INT32
OsFutexRequeueInsertNewKey
(
UINTPTR
newFutexKey
,
INT32
newIndex
,
FutexNode
*
oldHeadNode
)
{
BOOL
queueListIsEmpty
=
FALSE
;
INT32
ret
;
UINT32
intSave
;
LosTaskCB
*
task
=
NULL
;
...
...
@@ -817,25 +820,33 @@ STATIC INT32 OsFutexRequeueInsertNewKey(UINTPTR newFutexKey, INT32 newIndex, Fut
nextNode
=
OS_FUTEX_FROM_QUEUELIST
(
queueList
);
SCHEDULER_LOCK
(
intSave
);
if
(
LOS_ListEmpty
(
&
nextNode
->
pendList
))
{
queueList
=
queueList
->
pstNext
;
if
(
LOS_ListEmpty
(
queueList
))
{
queueListIsEmpty
=
TRUE
;
}
else
{
queueList
=
queueList
->
pstNext
;
}
OsFutexDeinitFutexNode
(
nextNode
);
SCHEDULER_UNLOCK
(
intSave
);
if
(
queueList
->
pstNext
!=
NULL
)
{
continue
;
}
else
{
if
(
queueListIsEmpty
)
{
return
LOS_OK
;
}
continue
;
}
task
=
OS_TCB_FROM_PENDLIST
(
LOS_DL_LIST_FIRST
(
&
(
nextNode
->
pendList
)));
queueList
=
queueList
->
pstNext
;
if
(
LOS_ListEmpty
(
queueList
))
{
queueListIsEmpty
=
TRUE
;
}
else
{
queueList
=
queueList
->
pstNext
;
}
LOS_ListDelete
(
&
nextNode
->
queueList
);
ret
=
OsFutexInsertTasktoPendList
(
&
newHeadNode
,
nextNode
,
task
);
SCHEDULER_UNLOCK
(
intSave
);
if
(
ret
!=
LOS_OK
)
{
PRINT_ERR
(
"Futex requeue insert new key failed!
\n
"
);
}
}
while
(
queueList
->
pstNext
!=
NULL
);
}
while
(
!
queueListIsEmpty
);
return
LOS_OK
;
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录