| <!-- |
| Copyright 2023 The Fuchsia Authors. All rights reserved. |
| Use of this source code is governed by a BSD-style license that can be |
| found in the LICENSE file. |
| |
| DO NOT EDIT. Generated from FIDL library zx by zither, a Fuchsia platform tool. |
| |
| See //docs/reference/syscalls/README.md#documentation-generation for |
| regeneration instructions. |
| --> |
| |
| # zx_object_wait_one |
| |
| ## Summary |
| |
| Wait for signals on an object. |
| |
| ## Declaration |
| |
| ```c |
| #include <zircon/syscalls.h> |
| |
| zx_status_t zx_object_wait_one(zx_handle_t handle, |
| zx_signals_t signals, |
| zx_instant_mono_t deadline, |
| zx_signals_t* observed); |
| ``` |
| |
| ## Description |
| |
| `zx_object_wait_one()` is a blocking syscall that causes the caller to wait |
| until either the *deadline* passes or the object to which *handle* refers |
| asserts at least one [signal][signals] specified by the bitmask *signals*. If |
| the object is already asserting at least one of the specified *signals*, the |
| wait ends immediately with `ZX_OK`. |
| |
| Upon return, if non-NULL, *observed* is a bitmap of *all* of the signals |
| asserted on the object. If one of the specified *signals* was asserted, |
| *observed* will be the set of signals asserted at the moment the specified |
| signal was first asserted. Otherwise, if *deadline* passes or *handle* is |
| closed, *observed* will contain the state of the object's signals at the time |
| the `zx_object_wait_one` syscall completed. |
| |
| The *deadline* parameter specifies a deadline with respect to |
| `ZX_CLOCK_MONOTONIC` and will be automatically adjusted according to the job's |
| [timer slack] policy. |
| |
| * `ZX_TIME_INFINITE` is a special value meaning wait forever. |
| * `ZX_TIME_INFINITE_PAST` (or any value before the current time in |
| `ZX_CLOCK_MONOTONIC`) will query the current value of the signal(s). |
| |
| ## Rights |
| |
| *handle* must have `ZX_RIGHT_WAIT`. |
| |
| ## Return value |
| |
| `zx_object_wait_one()` returns `ZX_OK` if any of *signals* were active when |
| the call was made, or observed on the object before *deadline* passes. |
| |
| In the event of `ZX_ERR_TIMED_OUT`, *observed* may reflect state changes |
| that occurred after the deadline passed, but before the syscall returned. |
| |
| In the event of `ZX_ERR_CANCELED`, *handle* has been closed, |
| and *observed* will have the `ZX_SIGNAL_HANDLE_CLOSED` bit set. |
| |
| For any other return value, *observed* is undefined. |
| |
| ## Errors |
| |
| `ZX_ERR_INVALID_ARGS` *observed* is an invalid pointer. |
| |
| `ZX_ERR_BAD_HANDLE` *handle* is not a valid handle. |
| |
| `ZX_ERR_ACCESS_DENIED` *handle* does not have `ZX_RIGHT_WAIT` and may |
| not be waited upon. |
| |
| `ZX_ERR_CANCELED` *handle* was invalidated (e.g., closed) during the wait. |
| |
| `ZX_ERR_TIMED_OUT` The specified deadline passed before any of the specified |
| *signals* are observed on *handle*. |
| |
| `ZX_ERR_NOT_SUPPORTED` *handle* is a handle that cannot be waited on |
| (for example, a Port handle). |
| |
| ## Notes |
| |
| See [signals] for more information about signals and their terminology. |
| |
| ## See also |
| |
| - [signals] |
| - [timer slack] |
| - [`zx_object_wait_async()`] |
| - [`zx_object_wait_many()`] |
| |
| [signals]: /docs/concepts/kernel/signals.md |
| [timer slack]: /docs/concepts/kernel/timer_slack.md |
| [`zx_object_wait_async()`]: object_wait_async.md |
| [`zx_object_wait_many()`]: object_wait_many.md |