Lines Matching refs:que
49 struct que *que_create(key_t, struct ucred *, int);
50 struct que *que_lookup(int);
51 struct que *que_key_lookup(key_t);
53 void que_free(struct que *);
54 struct msg *msg_create(struct que *);
56 void msg_enqueue(struct que *, struct msg *, struct proc *);
57 void msg_dequeue(struct que *, struct msg *, struct proc *);
58 struct msg *msg_lookup(struct que *, int);
65 TAILQ_HEAD(, que) msg_queues;
103 struct que *que; in sys_msgctl() local
108 if ((que = que_lookup(msqid)) == NULL) in sys_msgctl()
111 QREF(que); in sys_msgctl()
116 if ((error = ipcperm(cred, &que->msqid_ds.msg_perm, IPC_M))) in sys_msgctl()
119 TAILQ_REMOVE(&msg_queues, que, que_next); in sys_msgctl()
120 que->que_flags |= MSGQ_DYING; in sys_msgctl()
123 if (--que->que_references > 0) { in sys_msgctl()
124 wakeup(que); in sys_msgctl()
125 tsleep_nsec(&que->que_references, PZERO, "msgqrm", in sys_msgctl()
129 que_free(que); in sys_msgctl()
134 if ((error = ipcperm(cred, &que->msqid_ds.msg_perm, IPC_M))) in sys_msgctl()
140 if (tmp.msg_qbytes > que->msqid_ds.msg_qbytes && in sys_msgctl()
156 que->msqid_ds.msg_perm.uid = tmp.msg_perm.uid; in sys_msgctl()
157 que->msqid_ds.msg_perm.gid = tmp.msg_perm.gid; in sys_msgctl()
158 que->msqid_ds.msg_perm.mode = in sys_msgctl()
159 (que->msqid_ds.msg_perm.mode & ~0777) | in sys_msgctl()
161 que->msqid_ds.msg_qbytes = tmp.msg_qbytes; in sys_msgctl()
162 que->msqid_ds.msg_ctime = gettime(); in sys_msgctl()
166 if ((error = ipcperm(cred, &que->msqid_ds.msg_perm, IPC_R))) in sys_msgctl()
168 error = copyout(&que->msqid_ds, umsq, sizeof(struct msqid_ds)); in sys_msgctl()
176 QRELE(que); in sys_msgctl()
189 struct que *que; in sys_msgget() local
196 que = que_key_lookup(key); in sys_msgget()
197 if (que) { in sys_msgget()
200 if ((error = ipcperm(cred, &que->msqid_ds.msg_perm, in sys_msgget()
219 if ((que = que_create(key, cred, msgflg & 0777)) == NULL) in sys_msgget()
223 *retval = IXSEQ_TO_IPCID(que->que_ix, que->msqid_ds.msg_perm); in sys_msgget()
239 struct que *que; in sys_msgsnd() local
244 if ((que = que_lookup(SCARG(uap, msqid))) == NULL) in sys_msgsnd()
247 if (msgsz > que->msqid_ds.msg_qbytes || msgsz > msginfo.msgmax) in sys_msgsnd()
250 if ((error = ipcperm(cred, &que->msqid_ds.msg_perm, IPC_W))) in sys_msgsnd()
253 QREF(que); in sys_msgsnd()
255 while (MSGQ_SPACE(que) < msgsz || num_msgs >= msginfo.msgtql) { in sys_msgsnd()
266 que->que_flags |= MSGQ_WRITERS; in sys_msgsnd()
267 if ((error = tsleep_nsec(que, PZERO|PCATCH, "msgwait", INFSLP))) in sys_msgsnd()
270 if (que->que_flags & MSGQ_DYING) { in sys_msgsnd()
277 if ((msg = msg_create(que)) == NULL) { in sys_msgsnd()
286 msg_enqueue(que, msg, p); in sys_msgsnd()
288 if (que->que_flags & MSGQ_READERS) { in sys_msgsnd()
289 que->que_flags &= ~MSGQ_READERS; in sys_msgsnd()
290 wakeup(que); in sys_msgsnd()
293 if (que->que_flags & MSGQ_DYING) { in sys_msgsnd()
295 wakeup(que); in sys_msgsnd()
298 QRELE(que); in sys_msgsnd()
315 struct que *que; in sys_msgrcv() local
321 if ((que = que_lookup(SCARG(uap, msqid))) == NULL) in sys_msgrcv()
324 if ((error = ipcperm(cred, &que->msqid_ds.msg_perm, IPC_R))) in sys_msgrcv()
327 QREF(que); in sys_msgrcv()
330 while ((msg = msg_lookup(que, msgtyp)) == NULL) { in sys_msgrcv()
337 que->que_flags |= MSGQ_READERS; in sys_msgrcv()
338 if ((error = tsleep_nsec(que, PZERO|PCATCH, "msgwait", INFSLP))) in sys_msgrcv()
342 if (que->que_flags & MSGQ_DYING) { in sys_msgrcv()
352 msg_dequeue(que, msg, p); in sys_msgrcv()
355 if (que->que_flags & MSGQ_WRITERS) { in sys_msgrcv()
356 que->que_flags &= ~MSGQ_WRITERS; in sys_msgrcv()
357 wakeup(que); in sys_msgrcv()
368 QRELE(que); in sys_msgrcv()
377 struct que *
380 struct que *que, *que2; in que_create() local
383 que = malloc(sizeof(*que), M_TEMP, M_WAIT|M_ZERO); in que_create()
387 free(que, M_TEMP, sizeof *que); in que_create()
397 que->que_ix = nextix; in que_create()
399 que->msqid_ds.msg_perm.key = key; in que_create()
400 que->msqid_ds.msg_perm.cuid = cred->cr_uid; in que_create()
401 que->msqid_ds.msg_perm.uid = cred->cr_uid; in que_create()
402 que->msqid_ds.msg_perm.cgid = cred->cr_gid; in que_create()
403 que->msqid_ds.msg_perm.gid = cred->cr_gid; in que_create()
404 que->msqid_ds.msg_perm.mode = mode & 0777; in que_create()
405 que->msqid_ds.msg_perm.seq = ++sequence & 0x7fff; in que_create()
406 que->msqid_ds.msg_qbytes = msginfo.msgmnb; in que_create()
407 que->msqid_ds.msg_ctime = gettime(); in que_create()
409 TAILQ_INIT(&que->que_msgs); in que_create()
413 TAILQ_INSERT_BEFORE(que2, que, que_next); in que_create()
415 TAILQ_INSERT_TAIL(&msg_queues, que, que_next); in que_create()
418 return (que); in que_create()
421 struct que *
424 struct que *que; in que_lookup() local
426 TAILQ_FOREACH(que, &msg_queues, que_next) in que_lookup()
427 if (que->que_ix == IPCID_TO_IX(id)) in que_lookup()
431 if (que && que->que_flags & MSGQ_DYING) in que_lookup()
434 return (que); in que_lookup()
437 struct que *
440 struct que *que; in que_key_lookup() local
445 TAILQ_FOREACH(que, &msg_queues, que_next) in que_key_lookup()
446 if (que->msqid_ds.msg_perm.key == key) in que_key_lookup()
450 if (que && que->que_flags & MSGQ_DYING) in que_key_lookup()
453 return (que); in que_key_lookup()
459 struct que *que; in que_wakewriters() local
461 TAILQ_FOREACH(que, &msg_queues, que_next) { in que_wakewriters()
462 if (que->que_flags & MSGQ_WRITERS) { in que_wakewriters()
463 que->que_flags &= ~MSGQ_WRITERS; in que_wakewriters()
464 wakeup(que); in que_wakewriters()
470 que_free(struct que *que) in que_free() argument
474 if (que->que_references > 0) in que_free()
478 while ((msg = TAILQ_FIRST(&que->que_msgs))) { in que_free()
479 TAILQ_REMOVE(&que->que_msgs, msg, msg_next); in que_free()
482 free(que, M_TEMP, sizeof *que); in que_free()
491 msg_create(struct que *que) in msg_create() argument
498 if (que->que_flags & MSGQ_DYING) { in msg_create()
500 wakeup(que); in msg_create()
510 msg_lookup(struct que *que, int msgtyp) in msg_lookup() argument
520 TAILQ_FOREACH(msg, &que->que_msgs, msg_next) in msg_lookup()
537 msg_enqueue(struct que *que, struct msg *msg, struct proc *p) in msg_enqueue() argument
539 que->msqid_ds.msg_cbytes += msg->msg_len; in msg_enqueue()
540 que->msqid_ds.msg_qnum++; in msg_enqueue()
541 que->msqid_ds.msg_lspid = p->p_p->ps_pid; in msg_enqueue()
542 que->msqid_ds.msg_stime = gettime(); in msg_enqueue()
544 TAILQ_INSERT_TAIL(&que->que_msgs, msg, msg_next); in msg_enqueue()
548 msg_dequeue(struct que *que, struct msg *msg, struct proc *p) in msg_dequeue() argument
550 que->msqid_ds.msg_cbytes -= msg->msg_len; in msg_dequeue()
551 que->msqid_ds.msg_qnum--; in msg_dequeue()
552 que->msqid_ds.msg_lrpid = p->p_p->ps_pid; in msg_dequeue()
553 que->msqid_ds.msg_rtime = gettime(); in msg_dequeue()
555 TAILQ_REMOVE(&que->que_msgs, msg, msg_next); in msg_dequeue()
651 struct que *que; in sysctl_sysvmsg() local
704 TAILQ_FOREACH(que, &msg_queues, que_next) in sysctl_sysvmsg()
705 memcpy(&info->msgids[que->que_ix], &que->msqid_ds, in sysctl_sysvmsg()