摘要
取消映射内存、关闭句柄、退出。
声明
#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()
操作
失败,则线程会陷入陷阱(就像通过 __builtin_trap();
陷入陷阱)。
权限
TODO(https://fxbug.dev/42107318)
返回值
zx_vmar_unmap_handle_close_thread_exit()
不会在成功时返回。
错误
与 zx_vmar_unmap()
相同。
备注
这样做的预期用途是让即将终止的线程取消映射自己的堆栈, 关闭自身的线程句柄,然后退出。无法关闭线程句柄 因为关闭线程的最后一个句柄会终止该线程。 堆栈无法提前取消映射,因为线程必须 进行最终系统调用的堆栈空间。
此调用用于已分离的线程,而
zx_futex_wake_handle_close_thread_exit()
用于可联接的线程。