摘要
取消對應記憶體、關閉控點、結束。
宣告
#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()
用於可彙整的執行緒。