Lines Matching defs:mqueue

114 	ipc_mqueue_t	mqueue,
118 wait_queue_set_init(&mqueue->imq_set_queue, SYNC_POLICY_FIFO|SYNC_POLICY_PREPOST);
120 wait_queue_init(&mqueue->imq_wait_queue, SYNC_POLICY_FIFO);
121 ipc_kmsg_queue_init(&mqueue->imq_messages);
122 mqueue->imq_seqno = 0;
123 mqueue->imq_msgcount = 0;
124 mqueue->imq_qlimit = MACH_PORT_QLIMIT_DEFAULT;
125 mqueue->imq_fullwaiters = FALSE;
132 * Indicate whether the (port) mqueue is a member of
133 * this portset's mqueue. We do this by checking
134 * whether the portset mqueue's waitq is an member of
135 * the port's mqueue waitq.
137 * the portset's mqueue is not already a member
162 ipc_mqueue_t mqueue,
166 wait_queue_t mq_waitq = &mqueue->imq_wait_queue;
175 * Remove the mqueue from all the sets it is a member of
181 ipc_mqueue_t mqueue,
184 wait_queue_t mq_waitq = &mqueue->imq_wait_queue;
199 ipc_mqueue_t mqueue,
202 wait_queue_set_t mq_setq = &mqueue->imq_set_queue;
212 * Associate the portset's mqueue with the port's mqueue.
215 * mqueue and messages on the port mqueue, try to match them
259 /* waitq/mqueue still locked, thread locked */
332 ipc_mqueue_t mqueue)
335 &mqueue->imq_wait_queue,
363 ipc_mqueue_t mqueue,
377 if (!imq_full(mqueue) ||
378 (!imq_full_kernel(mqueue) &&
382 mqueue->imq_msgcount++;
383 assert(mqueue->imq_msgcount > 0);
384 imq_unlock(mqueue);
394 imq_unlock(mqueue);
398 if (imq_full_kernel(mqueue)) {
399 imq_unlock(mqueue);
403 mqueue->imq_fullwaiters = TRUE;
410 &mqueue->imq_wait_queue,
415 imq_unlock(mqueue);
430 assert(mqueue->imq_msgcount > 0);
437 /* mqueue is being destroyed */
444 ipc_mqueue_post(mqueue, kmsg);
460 ipc_mqueue_t mqueue)
462 assert(imq_held(mqueue));
463 assert(mqueue->imq_msgcount > 1 || ipc_kmsg_queue_empty(&mqueue->imq_messages));
465 mqueue->imq_msgcount--;
467 if (!imq_full(mqueue) && mqueue->imq_fullwaiters) {
469 &mqueue->imq_wait_queue,
473 mqueue->imq_fullwaiters = FALSE;
476 mqueue->imq_msgcount++;
493 register ipc_mqueue_t mqueue,
505 imq_lock(mqueue);
507 wait_queue_t waitq = &mqueue->imq_wait_queue;
522 assert(mqueue->imq_msgcount > 0);
523 ipc_kmsg_enqueue_macro(&mqueue->imq_messages, kmsg);
562 receiver->ith_seqno = mqueue->imq_seqno++;
566 ipc_mqueue_release_msgcount(mqueue);
580 imq_unlock(mqueue);
681 ipc_mqueue_t mqueue,
690 wresult = ipc_mqueue_receive_on_thread(mqueue, option, max_size,
712 ipc_mqueue_t mqueue,
730 imq_lock(mqueue);
732 if (imq_is_set(mqueue)) {
735 q = &mqueue->imq_preposts;
738 * If we are waiting on a portset mqueue, we need to see if
742 * mqueue lock during the search, we tie up any attempts by
765 imq_unlock(mqueue);
769 imq_lock(mqueue);
786 * while we still have the portset mqueue locked.
789 imq_unlock(mqueue);
793 * the port mqueue locked.
822 kmsgs = &mqueue->imq_messages;
824 ipc_mqueue_select_on_thread(mqueue, option, max_size, thread);
825 imq_unlock(mqueue);
847 * Looks like we'll have to block. The mqueue we will
853 imq_unlock(mqueue);
870 wresult = wait_queue_assert_wait64_locked(&mqueue->imq_wait_queue,
879 imq_unlock(mqueue);
892 * mqueue locked.
901 ipc_mqueue_t mqueue,
914 kmsg = ipc_kmsg_queue_first(&mqueue->imq_messages);
927 thread->ith_receiver_name = mqueue->imq_receiver_name;
936 ipc_kmsg_rmqueue_first_macro(&mqueue->imq_messages, kmsg);
937 ipc_mqueue_release_msgcount(mqueue);
938 thread->ith_seqno = mqueue->imq_seqno++;
1005 ipc_mqueue_t mqueue)
1014 imq_lock(mqueue);
1018 mqueue->imq_fullwaiters = FALSE;
1020 &mqueue->imq_wait_queue,
1027 * clean/drain queue while we have the mqueue lock.
1029 kmqueue = &mqueue->imq_messages;
1037 imq_unlock(mqueue);
1059 ipc_mqueue_t mqueue,
1068 imq_lock(mqueue);
1069 if (qlimit > mqueue->imq_qlimit) {
1073 wakeup = qlimit - mqueue->imq_qlimit;
1077 &mqueue->imq_wait_queue,
1081 mqueue->imq_fullwaiters = FALSE;
1084 mqueue->imq_msgcount++; /* give it to the awakened thread */
1087 mqueue->imq_qlimit = qlimit;
1088 imq_unlock(mqueue);
1095 * Changes an mqueue's sequence number.
1101 ipc_mqueue_t mqueue,
1107 imq_lock(mqueue);
1108 mqueue->imq_seqno = seqno;
1109 imq_unlock(mqueue);
1140 ipc_mqueue_t mqueue;
1167 mqueue = &port->ip_messages;
1180 mqueue = &pset->ips_messages;
1188 * the space is unlocked, and mqueue is initialized.
1195 *mqueuep = mqueue;