zx_vmar_unmap_handle_close_thread_exit

摘要

取消映射内存、关闭句柄、退出。

声明

#include <zircon/syscalls.h>

zx_status_t zx_vmar_unmap_handle_close_thread_exit(zx_handle_t vmar_handle,
                                                   zx_vaddr_t addr,
                                                   size_t size,
                                                   zx_handle_t close_handle);

说明

zx_vmar_unmap_handle_close_thread_exit() 会执行以下三项操作:

  1. zx_vmar_unmap(vmar_handle, addr, size)
  2. zx_handle_close(close_handle)
  3. zx_thread_exit()

预期操作是第一个操作取消映射包含 调用线程自己的堆栈(这并非强制性要求,但这是允许的。)这个 对此调用有效,但对于 zx_vmar_unmap() 或 任何其他调用。

如果 zx_vmar_unmap() 操作成功,则此调用永远不会返回。 如果 close_handle 是无效句柄,以便执行 zx_handle_close() 操作 失败,则线程会陷入陷阱(就像通过 __builtin_trap(); 陷入陷阱)。

权限

TODO(https://fxbug.dev/42107318)

返回值

zx_vmar_unmap_handle_close_thread_exit() 不会在成功时返回。

错误

zx_vmar_unmap() 相同。

备注

这样做的预期用途是让即将终止的线程取消映射自己的堆栈, 关闭自身的线程句柄,然后退出。无法关闭线程句柄 因为关闭线程的最后一个句柄会终止该线程。 堆栈无法提前取消映射,因为线程必须 进行最终系统调用的堆栈空间。

此调用用于已分离的线程,而 zx_futex_wake_handle_close_thread_exit() 用于可联接的线程。

另请参阅