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() 用於可彙整的執行緒。

另請參閱