dfs v2 修改 fd_new 的 startfd 起始值为 0 ;修复 futex_wait 超时时间换算异常; (#7705)
Signed-off-by: yangfasheng <yangfasheng@live.com>
This commit is contained in:
parent
3e4797c63c
commit
b4e59bac4e
|
@ -197,7 +197,7 @@ int fdt_fd_new(struct dfs_fdtable *fdt)
|
||||||
dfs_file_lock();
|
dfs_file_lock();
|
||||||
|
|
||||||
/* find an empty fd entry */
|
/* find an empty fd entry */
|
||||||
idx = fd_alloc(fdt, DFS_STDIO_OFFSET);
|
idx = fd_alloc(fdt, 0);
|
||||||
/* can't find an empty fd entry */
|
/* can't find an empty fd entry */
|
||||||
if (idx < 0)
|
if (idx < 0)
|
||||||
{
|
{
|
||||||
|
|
|
@ -30,15 +30,34 @@ int libc_system_init(void)
|
||||||
dev_console = rt_console_get_device();
|
dev_console = rt_console_get_device();
|
||||||
if (dev_console)
|
if (dev_console)
|
||||||
{
|
{
|
||||||
int fd = libc_stdio_set_console(dev_console->parent.name, O_RDWR);
|
int fd, ret;
|
||||||
if (fd < 0)
|
char name[STDIO_DEVICE_NAME_MAX];
|
||||||
|
|
||||||
|
rt_snprintf(name, sizeof(name) - 1, "/dev/%s", dev_console->parent.name);
|
||||||
|
name[STDIO_DEVICE_NAME_MAX - 1] = '\0';
|
||||||
|
|
||||||
|
fd = open(name, O_RDWR);
|
||||||
|
if (fd >= 0)
|
||||||
|
{
|
||||||
|
/* set fd (0, 1, 2) */
|
||||||
|
ret = sys_dup2(fd, 0);
|
||||||
|
if (ret != fd)
|
||||||
|
{
|
||||||
|
close(fd);
|
||||||
|
}
|
||||||
|
sys_dup2(ret, 1);
|
||||||
|
sys_dup2(ret, 2);
|
||||||
|
|
||||||
|
ret = libc_stdio_set_console(dev_console->parent.name, O_RDWR);
|
||||||
|
if (ret < 0)
|
||||||
|
{
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
/* set fd (0, 1, 2) */
|
|
||||||
sys_dup2(fd, 0);
|
|
||||||
sys_dup2(fd, 1);
|
|
||||||
sys_dup2(fd, 2);
|
|
||||||
}
|
}
|
||||||
#endif /* RT_USING_POSIX_STDIO */
|
#endif /* RT_USING_POSIX_STDIO */
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -124,7 +124,12 @@ int futex_wait(struct rt_futex *futex, int value, const struct timespec *timeout
|
||||||
/* with timeout */
|
/* with timeout */
|
||||||
if (timeout)
|
if (timeout)
|
||||||
{
|
{
|
||||||
rt_int32_t time = rt_timespec_to_tick(timeout);
|
rt_int32_t time = timeout->tv_sec * RT_TICK_PER_SECOND + timeout->tv_nsec * RT_TICK_PER_SECOND / NANOSECOND_PER_SECOND;
|
||||||
|
|
||||||
|
if (time < 0)
|
||||||
|
{
|
||||||
|
time = 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* start the timer of thread */
|
/* start the timer of thread */
|
||||||
rt_timer_control(&(thread->thread_timer),
|
rt_timer_control(&(thread->thread_timer),
|
||||||
|
|
Loading…
Reference in New Issue