diff options
| author | zhkag <[email protected]> | 2023-07-24 17:01:45 +0800 |
|---|---|---|
| committer | GitHub <[email protected]> | 2023-07-24 17:01:45 +0800 |
| commit | 7e5620edc3a8a8f3cccc75fab6dd8b05156256ed (patch) | |
| tree | 7a472803aab090eefc8aee4f9d5644bdbbc371d0 /components | |
| parent | 27143f4138968efdab3d43f5943c738debb31e78 (diff) | |
[smart] 修复用户态 mq_receive 不能阻塞 (#7836)
Diffstat (limited to 'components')
| -rw-r--r-- | components/dfs/dfs_v2/filesystems/mqueue/dfs_mqueue.c | 24 | ||||
| -rw-r--r-- | components/libc/posix/ipc/mqueue.c | 2 |
2 files changed, 14 insertions, 12 deletions
diff --git a/components/dfs/dfs_v2/filesystems/mqueue/dfs_mqueue.c b/components/dfs/dfs_v2/filesystems/mqueue/dfs_mqueue.c index 2325758dad..0dcee489ff 100644 --- a/components/dfs/dfs_v2/filesystems/mqueue/dfs_mqueue.c +++ b/components/dfs/dfs_v2/filesystems/mqueue/dfs_mqueue.c @@ -43,28 +43,29 @@ struct mqueue_file *dfs_mqueue_lookup(const char *path, rt_size_t *size) { return RT_NULL; } -int dfs_mqueue_mount(struct dfs_filesystem *fs, unsigned long rwflag, const void *data) { +int dfs_mqueue_mount(struct dfs_mnt *mnt, unsigned long rwflag, const void *data) { return RT_EOK; } -int dfs_mqueue_umount(struct dfs_filesystem *fs) { return RT_EOK; } +int dfs_mqueue_umount(struct dfs_mnt *mnt) { + return RT_EOK; +} -int dfs_mqueue_statfs(struct dfs_filesystem *fs, struct statfs *buf) { return RT_EOK; } +int dfs_mqueue_statfs(struct dfs_mnt *mnt, struct statfs *buf) { + return RT_EOK; +} -int dfs_mqueue_close(struct dfs_file *file) { return RT_EOK; } +int dfs_mqueue_close(struct dfs_file *file) { + return RT_EOK; +} int dfs_mqueue_open(struct dfs_file *file) { - rt_size_t size; - if ((file->dentry->pathname[0] == '/') && (file->dentry->pathname[1] == '\0')) - return 0; - + return 0; } int dfs_mqueue_stat(struct dfs_dentry *dentry, struct stat *st) { - const char *path = RT_NULL; struct dfs_vnode *vnode = RT_NULL; if (dentry && dentry->vnode) { - path = dentry->pathname; vnode = dentry->vnode; st->st_dev = 0; st->st_gid = vnode->gid; @@ -140,7 +141,7 @@ static struct dfs_vnode *dfs_mqueue_create_vnode(struct dfs_dentry *dentry, int if (mq_file == RT_NULL) { mq_file = (struct mqueue_file *)rt_malloc(sizeof(struct mqueue_file)); if (mq_file == RT_NULL) { - return -ENFILE; + return NULL; } mq_file->msg_size = 8192; mq_file->max_msgs = 10; @@ -156,7 +157,6 @@ static struct dfs_vnode *dfs_mqueue_create_vnode(struct dfs_dentry *dentry, int vnode->data = mq_file; vnode->size = 0; } - return vnode; } diff --git a/components/libc/posix/ipc/mqueue.c b/components/libc/posix/ipc/mqueue.c index 72b6c5b8f7..45a1382313 100644 --- a/components/libc/posix/ipc/mqueue.c +++ b/components/libc/posix/ipc/mqueue.c @@ -180,6 +180,8 @@ ssize_t mq_timedreceive(mqd_t id, } if (abs_timeout != RT_NULL) tick = rt_timespec_to_tick(abs_timeout); + else + tick = RT_WAITING_FOREVER; result = rt_mq_recv_prio(mq, msg_ptr, msg_len, (rt_int32_t *)msg_prio, tick, RT_UNINTERRUPTIBLE); |
