Lines Matching defs:mqueueCB

113 STATIC INT32 DoMqueueDelete(struct mqarray *mqueueCB)
119 if (mqueueCB->mq_name != NULL) {
120 LOS_MemFree(OS_SYS_MEM_ADDR, mqueueCB->mq_name);
121 mqueueCB->mq_name = NULL;
124 mqueueCB->mqcb = NULL;
126 mqueueCB->mode_data.data = 0;
127 mqueueCB->euid = -1;
128 mqueueCB->egid = -1;
129 mqueueCB->mq_notify.pid = 0;
131 ret = LOS_QueueDelete(mqueueCB->mq_id);
147 STATIC int SaveMqueueName(const CHAR *mqName, struct mqarray *mqueueCB)
152 mqueueCB->mq_name = (char *)LOS_MemAlloc(OS_SYS_MEM_ADDR, nameLen + 1);
153 if (mqueueCB->mq_name == NULL) {
158 if (strncpy_s(mqueueCB->mq_name, (nameLen + 1), mqName, nameLen) != EOK) {
159 LOS_MemFree(OS_SYS_MEM_ADDR, mqueueCB->mq_name);
160 mqueueCB->mq_name = NULL;
164 mqueueCB->mq_name[nameLen] = '\0';
168 STATIC VOID MqueueCBInit(struct mqarray *mqueueCB, const struct mq_attr *attr, INT32 openFlag, UINT32 mode)
170 mqueueCB->unlinkflag = FALSE;
171 mqueueCB->unlink_ref = 0;
172 mqueueCB->mq_personal->mq_status = MQ_USE_MAGIC;
173 mqueueCB->mq_personal->mq_next = NULL;
174 mqueueCB->mq_personal->mq_posixdes = mqueueCB;
175 mqueueCB->mq_personal->mq_flags = (INT32)((UINT32)openFlag | ((UINT32)attr->mq_flags & (UINT32)FNONBLOCK));
176 mqueueCB->mq_personal->mq_mode = mode;
177 mqueueCB->mq_personal->mq_refcount = 0;
178 mqueueCB->mq_notify.pid = 0;
183 struct mqarray *mqueueCB = NULL;
197 mqueueCB = &(IPC_QUEUE_TABLE[GET_QUEUE_INDEX(mqueueID)]);
198 mqueueCB->mq_id = mqueueID;
201 if (mqueueCB == NULL) {
206 if (SaveMqueueName(mqName, mqueueCB) != LOS_OK) {
210 if (GetMqueueCBByID(mqueueCB->mq_id, &(mqueueCB->mqcb)) != LOS_OK) {
215 mqueueCB->mq_personal = (struct mqpersonal *)LOS_MemAlloc(OS_SYS_MEM_ADDR, sizeof(struct mqpersonal));
216 if (mqueueCB->mq_personal == NULL) {
217 (VOID)LOS_QueueDelete(mqueueCB->mq_id);
218 mqueueCB->mqcb->queueHandle = NULL;
219 mqueueCB->mqcb = NULL;
224 MqueueCBInit(mqueueCB, attr, openFlag, mode);
226 return mqueueCB->mq_personal;
229 if ((mqueueCB != NULL) && (mqueueCB->mq_name != NULL)) {
230 LOS_MemFree(OS_SYS_MEM_ADDR, mqueueCB->mq_name);
231 mqueueCB->mq_name = NULL;
239 STATIC struct mqpersonal *DoMqueueOpen(struct mqarray *mqueueCB, INT32 openFlag)
244 if (mqueueCB->unlinkflag == TRUE) {
255 privateMqPersonal->mq_next = mqueueCB->mq_personal;
256 mqueueCB->mq_personal = privateMqPersonal;
258 privateMqPersonal->mq_posixdes = mqueueCB;
271 struct mqarray *mqueueCB = NULL;
275 mqueueCB = privateMqPersonal->mq_posixdes;
276 if (mqueueCB == NULL || mqueueCB->mq_personal == NULL) {
281 if ((mqueueCB->unlinkflag == TRUE) && (privateMqPersonal->mq_next == NULL)) {
282 ret = DoMqueueDelete(mqueueCB);
288 if (mqueueCB->mq_personal == privateMqPersonal) {
289 mqueueCB->mq_personal = privateMqPersonal->mq_next;
291 for (tmp = mqueueCB->mq_personal; tmp->mq_next != NULL; tmp = tmp->mq_next) {
363 struct mqarray *mqueueCB = NULL;
372 mqueueCB = privateMqPersonal->mq_posixdes;
373 if (mqueueCB == NULL) {
385 struct mqarray *mqueueCB = NULL;
386 mqueueCB = privateMqPersonal->mq_posixdes;
387 if (mqueueCB == NULL) {
405 struct mqarray *mqueueCB = NULL;
410 /* Get mqueueCB of first time creating mqueue */
411 mqueueCB = privateMqPersonal->mq_posixdes;
412 if (mqueueCB == NULL) {
417 mode = mqueueCB->mq_personal->mq_mode;
421 mqueueCB->euid = user->effUserID;
422 mqueueCB->egid = user->effGid;
427 mqueueCB->mode_data.usr |= S_IRUSR;
430 mqueueCB->mode_data.usr |= S_IWUSR;
433 mqueueCB->mode_data.grp |= S_IRGRP;
436 mqueueCB->mode_data.grp |= S_IWGRP;
439 mqueueCB->mode_data.oth |= S_IROTH;
442 mqueueCB->mode_data.oth |= S_IWOTH;
447 STATIC INT32 GetPermissionOfVisitor(struct mqarray *mqueueCB)
454 if (mqueueCB == NULL) {
470 if (euid == mqueueCB->euid) { /* usr */
471 if (!((mqueueCB->mode_data.usr & S_IRUSR) || (mqueueCB->mode_data.usr & S_IWUSR))) {
475 } else if (egid == mqueueCB->egid) { /* grp */
476 if (!((mqueueCB->mode_data.grp & S_IRGRP) || (mqueueCB->mode_data.grp & S_IWGRP))) {
481 if (!((mqueueCB->mode_data.oth & S_IROTH) || (mqueueCB->mode_data.oth & S_IWOTH))) {
510 struct mqarray *mqueueCB = NULL;
524 mqueueCB = GetMqueueCBByName(mqName);
526 if (mqueueCB != NULL) {
531 privateMqPersonal = DoMqueueOpen(mqueueCB, openFlag);
551 if (GetPermissionOfVisitor(mqueueCB)) {
554 privateMqPersonal = DoMqueueOpen(mqueueCB, openFlag);
608 struct mqarray *mqueueCB = NULL;
630 mqueueCB = privateMqPersonal->mq_posixdes;
631 mqAttr->mq_maxmsg = mqueueCB->mqcb->queueLen;
632 mqAttr->mq_msgsize = mqueueCB->mqcb->queueSize - sizeof(UINT32);
633 mqAttr->mq_curmsgs = mqueueCB->mqcb->readWriteableCnt[OS_QUEUE_READ];
685 struct mqarray *mqueueCB = NULL;
692 mqueueCB = GetMqueueCBByName(mqName);
693 if (mqueueCB == NULL) {
698 if (mqueueCB->mq_personal != NULL) {
699 mqueueCB->unlinkflag = TRUE;
700 } else if (mqueueCB->unlink_ref == 0) {
701 ret = DoMqueueDelete(mqueueCB);
750 static void MqSendNotify(struct mqarray *mqueueCB)
752 struct mqnotify *mqnotify = &mqueueCB->mq_notify;
754 if ((mqnotify->pid) && (mqueueCB->mqcb->readWriteableCnt[OS_QUEUE_READ] == 0)) {
790 struct mqarray *mqueueCB = NULL;
801 mqueueCB = privateMqPersonal->mq_posixdes;
802 OS_MQ_GOTO_ERROUT_UNLOCK_IF(msgLen > (size_t)(mqueueCB->mqcb->queueSize - sizeof(UINT32)), EMSGSIZE);
809 mqueueID = mqueueCB->mq_id;
812 if (LOS_ListEmpty(&mqueueCB->mqcb->readWriteList[OS_QUEUE_READ])) {
813 MqSendNotify(mqueueCB);
833 struct mqarray *mqueueCB = NULL;
851 mqueueCB = privateMqPersonal->mq_posixdes;
852 if (msgLen < (size_t)(mqueueCB->mqcb->queueSize - sizeof(UINT32))) {
867 mqueueID = mqueueCB->mq_id;
919 struct mqarray *mqueueCB = NULL;
938 mqueueCB = privateMqPersonal->mq_posixdes;
939 mqnotify = &mqueueCB->mq_notify;
980 struct mqarray *mqueueCB = &(queueTable[index]);
981 if (mqueueCB->mq_name == NULL) {
984 (VOID)DoMqueueClose(mqueueCB->mq_personal);