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() 操作失败,则线程会采用 trap(就像通过 __builtin_trap(); 一样)。

权限

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

返回值

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

错误

zx_vmar_unmap() 相同。

备注

其预期用途是让挂起线程取消映射自己的堆栈,关闭自己的线程句柄,然后退出。无法提前关闭线程句柄,因为关闭某个线程的最后一个句柄会终止该线程。 无法事先取消映射堆栈,因为线程必须有一些堆栈空间可对其执行最终系统调用。

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

另请参阅