1<h2>semaphore_wait</h2>
2<hr>
3<p>
4<strong>Function</strong> - Wait on the specified semaphore.
5<h3>SYNOPSIS</h3>
6<pre>
7<strong>kern_return_t   semaphore_wait</strong>
8                <strong>(semaphore_t</strong>                          <var>semaphore</var><strong>);</strong>
9</pre>
10<h3>PARAMETERS</h3>
11<dl>
12<p>
13<dt> <var>semaphore</var>
14<dd>
15[in send right] The port naming the semaphore that the wait operation is being performed upon.
16</dl>
17<h3>DESCRIPTION</h3>
18<p>
19The <strong>semaphore_wait</strong> function decrements the semaphore count. If the
20semaphore count is negative after decrementing, the calling thread
21blocks.  Device driver interrupt service routines (ISR) should never
22execute <strong>semaphore_wait</strong>, since waiting on a semaphore at the ISR level
23may, and often will, lead to a deadlock.
24<h3>RETURN VALUES</h3>
25<dl>
26<p>
27<dt> <strong>KERN_INVALID_ARGUMENT</strong>
28<dd>
29The specified semaphore is invalid.
30<p>
31<dt> <strong>KERN_TERMINATED</strong>
32<dd>
33The specified semaphore has been destroyed.
34<p>
35<dt> <strong>KERN_ABORTED</strong>
36<dd>
37The caller was blocked due to a negative count on the semaphore, and was
38     awoken for a reason not related to the semaphore subsystem
39     (e.g. <strong>thread_terminate</strong>).
40<p>
41<dt> <strong>KERN_SUCCESS</strong>
42<dd>
43The semaphore wait operation was successful.
44</dl>
45<h3>RELATED INFORMATION</h3>
46<p>
47Functions:
48<a href="semaphore_create.html"><strong>semaphore_create</strong></a>,
49<a href="semaphore_destroy.html"><strong>semaphore_destroy</strong></a>,
50<a href="semaphore_signal.html"><strong>semaphore_signal</strong></a>,
51<a href="semaphore_signal_all.html"><strong>semaphore_signal_all</strong></a>,
52<a href="device_get_status.html"><strong>device_get_status</strong></a>.
53