摘要
取消映射内存、关闭句柄、退出。
声明
#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()
会执行以下三个操作:
zx_vmar_unmap(vmar_handle, addr, size)
zx_handle_close(close_handle)
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()
用于可联接线程。