Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Kernel Liteos A
提交
1c901dce
K
Kernel Liteos A
项目概览
OpenHarmony
/
Kernel Liteos A
1 年多 前同步成功
通知
464
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看板
提交
1c901dce
编写于
3月 31, 2021
作者:
O
openharmony_ci
提交者:
Gitee
3月 31, 2021
浏览文件
操作
浏览文件
下载
差异文件
!109 setitimer多核静态问题
Merge pull request !109 from zhushengle/setitimer
上级
c70335c8
7256d67a
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
19 addition
and
4 deletion
+19
-4
compat/posix/src/time.c
compat/posix/src/time.c
+19
-4
未找到文件。
compat/posix/src/time.c
浏览文件 @
1c901dce
...
...
@@ -883,8 +883,10 @@ clock_t times(struct tms *buf)
int
setitimer
(
int
which
,
const
struct
itimerval
*
value
,
struct
itimerval
*
ovalue
)
{
UINT32
intSave
;
LosTaskCB
*
taskCB
=
OS_TCB_FROM_TID
(
LOS_CurTaskIDGet
());
LosProcessCB
*
processCB
=
OS_PCB_FROM_PID
(
taskCB
->
processID
);
timer_t
timerID
=
0
;
struct
itimerspec
spec
;
struct
itimerspec
ospec
;
int
ret
=
LOS_OK
;
...
...
@@ -894,15 +896,28 @@ int setitimer(int which, const struct itimerval *value, struct itimerval *ovalue
set_errno
(
EINVAL
);
return
-
1
;
}
LOS_TaskLock
();
/* To avoid creating an invalid timer after the timer has already been create */
if
(
processCB
->
timerID
==
(
timer_t
)(
UINTPTR
)
MAX_INVALID_TIMER_VID
)
{
ret
=
timer_create
(
CLOCK_REALTIME
,
NULL
,
&
processCB
->
timerID
);
ret
=
timer_create
(
CLOCK_REALTIME
,
NULL
,
&
timerID
);
if
(
ret
!=
LOS_OK
)
{
LOS_TaskUnlock
();
return
ret
;
}
}
LOS_TaskUnlock
();
/* The initialization of this global timer must be in spinlock
* timer_create cannot be located in spinlock.
*/
SCHEDULER_LOCK
(
intSave
);
if
(
processCB
->
timerID
==
(
timer_t
)(
UINTPTR
)
MAX_INVALID_TIMER_VID
)
{
processCB
->
timerID
=
timerID
;
SCHEDULER_UNLOCK
(
intSave
);
}
else
{
SCHEDULER_UNLOCK
(
intSave
);
if
(
timerID
)
{
timer_delete
(
timerID
);
}
}
if
(
!
ValidTimeval
(
&
value
->
it_value
)
||
!
ValidTimeval
(
&
value
->
it_interval
))
{
set_errno
(
EINVAL
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录