fix: 修复mqueue问题
【背景】 1.mqueue用例关于NFILE错误码压力测试中,不符合预期结果 2.mq_unlink对于fork出的mqueue不起效 3.已打开的mqueue,在fork后两进程共用一份mqpersonal不合理 【修改方案】 1. 确认是内核关于mqueue的fd_set定义位置不合理导致的, 将fd_set定义位置由mqarray结构体调未全局变量后,问题解决 2.不合理的unlink_ref++导致的,去除相关操作,使用mq_personal 链表判断何时需要删除 3.fork时内核复制一份mqpersonal 【影响】 对现有的产品编译不会有影响。 re #I43P4T Signed-off-by: lanleinan <lanleinan@163.com> Change-Id: I09f183cc3a88e5a65201dbc1fc4f4806f78971be
This commit is contained in:
@@ -95,7 +95,6 @@ struct mqarray {
|
||||
mode_s mode_data; /* mode data of mqueue */
|
||||
uid_t euid; /* euid of mqueue */
|
||||
gid_t egid; /* egid of mqueue */
|
||||
fd_set mq_fdset; /* mqueue sysFd bit map */
|
||||
struct mqnotify mq_notify;
|
||||
LosQueueCB *mqcb;
|
||||
struct mqpersonal *mq_personal;
|
||||
@@ -423,7 +422,7 @@ extern int mq_timedsend(mqd_t personal, const char *msg, size_t msgLen,
|
||||
extern ssize_t mq_timedreceive(mqd_t personal, char *msg, size_t msgLen,
|
||||
unsigned int *msgPrio, const struct timespec *absTimeout);
|
||||
|
||||
extern void mqueue_refer(int sysFd);
|
||||
extern void MqueueRefer(int sysFd);
|
||||
extern int OsMqNotify(mqd_t personal, const struct sigevent *sigev);
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
Reference in New Issue
Block a user