Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Musl
提交
c1014a81
T
Third Party Musl
项目概览
OpenHarmony
/
Third Party Musl
接近 2 年 前同步成功
通知
37
Star
125
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
Third Party Musl
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
c1014a81
编写于
4月 18, 2018
作者:
R
Rich Felker
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
refactor flockfile not to duplicate lock mechanism logic
上级
c21f7507
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
14 addition
and
12 deletion
+14
-12
src/stdio/flockfile.c
src/stdio/flockfile.c
+4
-7
src/stdio/ftrylockfile.c
src/stdio/ftrylockfile.c
+10
-5
未找到文件。
src/stdio/flockfile.c
浏览文件 @
c1014a81
#include "stdio_impl.h"
#include "pthread_impl.h"
#define MAYBE_WAITERS 0x40000000
void
__register_locked_file
(
FILE
*
,
pthread_t
);
void
flockfile
(
FILE
*
f
)
{
while
(
ftrylockfile
(
f
))
{
int
owner
=
f
->
lock
;
if
(
!
owner
)
continue
;
a_cas
(
&
f
->
lock
,
owner
,
owner
|
MAYBE_WAITERS
);
__futexwait
(
&
f
->
lock
,
owner
|
MAYBE_WAITERS
,
1
);
}
if
(
!
ftrylockfile
(
f
))
return
;
__lockfile
(
f
);
__register_locked_file
(
f
,
__pthread_self
());
}
src/stdio/ftrylockfile.c
浏览文件 @
c1014a81
...
...
@@ -20,6 +20,15 @@ void __unlist_locked_file(FILE *f)
}
}
void
__register_locked_file
(
FILE
*
f
,
pthread_t
self
)
{
f
->
lockcount
=
1
;
f
->
prev_locked
=
0
;
f
->
next_locked
=
self
->
stdio_locks
;
if
(
f
->
next_locked
)
f
->
next_locked
->
prev_locked
=
f
;
self
->
stdio_locks
=
f
;
}
int
ftrylockfile
(
FILE
*
f
)
{
pthread_t
self
=
__pthread_self
();
...
...
@@ -34,10 +43,6 @@ int ftrylockfile(FILE *f)
if
(
owner
<
0
)
f
->
lock
=
owner
=
0
;
if
(
owner
||
a_cas
(
&
f
->
lock
,
0
,
tid
))
return
-
1
;
f
->
lockcount
=
1
;
f
->
prev_locked
=
0
;
f
->
next_locked
=
self
->
stdio_locks
;
if
(
f
->
next_locked
)
f
->
next_locked
->
prev_locked
=
f
;
self
->
stdio_locks
=
f
;
__register_locked_file
(
f
,
self
);
return
0
;
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录