summaryrefslogtreecommitdiff
path: root/components
diff options
context:
space:
mode:
authorzhkag <[email protected]>2023-07-24 17:01:45 +0800
committerGitHub <[email protected]>2023-07-24 17:01:45 +0800
commit7e5620edc3a8a8f3cccc75fab6dd8b05156256ed (patch)
tree7a472803aab090eefc8aee4f9d5644bdbbc371d0 /components
parent27143f4138968efdab3d43f5943c738debb31e78 (diff)
[smart] 修复用户态 mq_receive 不能阻塞 (#7836)
Diffstat (limited to 'components')
-rw-r--r--components/dfs/dfs_v2/filesystems/mqueue/dfs_mqueue.c24
-rw-r--r--components/libc/posix/ipc/mqueue.c2
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);