| <!-- |
| 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_restricted_kick |
| |
| ## Summary |
| |
| Kick a thread out of restricted mode. |
| |
| ## Declaration |
| |
| ```c |
| #include <zircon/syscalls-next.h> |
| |
| zx_status_t zx_restricted_kick(zx_handle_t thread, uint32_t options); |
| ``` |
| |
| ## Description |
| |
| Kicks a thread out of restricted mode if it is currently running in restricted |
| mode or saves a pending kick if it is not. If the target thread is running in |
| restricted mode, it will exit to normal mode through the entry point provided to |
| `zx_restricted_enter` with a reason code set to `ZX_RESTRICTED_REASON_KICK`. |
| Otherwise the next call to `zx_restricted_enter` will not enter restricted mode |
| and will instead dispatch to the provided entry point with reason |
| code `ZX_RESTRICTED_REASON_KICK`. |
| |
| Multiple kicks on the same thread object are collapsed together. Thus if |
| multiple threads call `zx_restricted_kick` on the same target while it is |
| running or entering restricted mode, at least one but possibly multiple |
| `ZX_RESTRICTED_REASON_KICK` returns will be observed. The recommended way to use |
| this syscall is to first record a reason for kicking in a synchronized data |
| structure and then call `zx_restricted_kick`. The thread calling |
| `zx_restricted_enter` should consult this data structure whenever it observes |
| `ZX_RESTRICTED_REASON_KICK` and process any pending state before reentering |
| restricted mode. |
| |
| *options* must be zero. |
| |
| ## Rights |
| |
| **ZX_RIGHT_MANAGE_THREAD** is required on *thread*. |
| |
| ## Errors |
| |
| **ZX_ERR_INVALID_ARGS** *options* is any value other than 0. |
| **ZX_ERR_WRONG_TYPE** *thread* is not a thread. |
| **ZX_ERR_ACCESS_DENIED** *thread* does not have ZX_RIGHT_MANAGE_THREAD. |
| **ZX_ERR_BAD_STATE** *thread* is dead. |