dfs v2 修改 fd_new 的 startfd 起始值为 0 ;修复 futex_wait 超时时间换算异常; (#7705)

Signed-off-by: yangfasheng <yangfasheng@live.com>
This commit is contained in:
yangfasheng 2023-06-20 23:09:58 +08:00 committed by GitHub
parent 3e4797c63c
commit b4e59bac4e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 32 additions and 8 deletions

View File

@ -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)
{ {

View File

@ -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;

View File

@ -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),