zx_vmar_unmap_handle_close_thread_exit


英文原文快照


名称

vmar_unmap_handle_close_thread_exit —— 解除内存映射,关闭相关的句柄,并退出线程。

概要

  1. #include <zircon/syscalls.h>
  2. zx_status_t zx_vmar_unmap_handle_close_thread_exit(zx_handle_t vmar_handle,
  3. zx_vaddr_t addr, size_t size,
  4. zx_handle_t close_handle);

描述

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() 或任何其他调用将是无效的。

如果vmar_unmap操作成功,则此调用永远不再返回。 如果close_handle是一个无效的句柄,以致handle_close操作失败,那么该线程会产生一次错误退出(正如__builtin_trap()一样)。

权限

TODO(ZX-2399)

返回值

vmar_unmap_handle_close_thread_exit() 调用成功后不再返回

错误码

zx_vmar_unmap()系统调用一样。

注释

本调用的设计目的是让一个垂死的线程取消映射它自己的堆栈,关闭它自己的线程句柄,然后退出。 线程句柄不能事先关闭,因为关闭线程的最后一个句柄会杀死该线程。 堆栈无法事先取消映射,因为线程必须有一些堆栈空间才能执行最终的系统调用。

此调用用于分离的(deteched)线程,而futex_wake_handle_close_thread_exit()则用于joinable线程。

另见

vmar_unmap, handle_close, thread_exit, futex_wake_handle_close_thread_exit.