€•Œsphinx.addnodes”Œdocument”“”)�”}”(Œ rawsource”Œ”Œchildren”]”(Œ translations”Œ LanguagesNode”“”)�”}”(hhh]”(hŒ pending_xref”“”)�”}”(hhh]”Œdocutils.nodes”ŒText”“”ŒChinese (Simplified)”…”�”}”Œparent”hsbaŒ attributes”}”(Œids”]”Œclasses”]”Œnames”]”Œdupnames”]”Œbackrefs”]”Œ refdomain”Œstd”Œreftype”Œdoc”Œ reftarget”Œ(/translations/zh_CN/userspace-api/ntsync”Œmodname”NŒ classname”NŒ refexplicit”ˆuŒtagname”hhh ubh)�”}”(hhh]”hŒChinese (Traditional)”…”�”}”hh2sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ(/translations/zh_TW/userspace-api/ntsync”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒItalian”…”�”}”hhFsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ(/translations/it_IT/userspace-api/ntsync”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒJapanese”…”�”}”hhZsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ(/translations/ja_JP/userspace-api/ntsync”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒKorean”…”�”}”hhnsbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ(/translations/ko_KR/userspace-api/ntsync”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒPortuguese (Brazilian)”…”�”}”hh‚sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ(/translations/pt_BR/userspace-api/ntsync”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubh)�”}”(hhh]”hŒSpanish”…”�”}”hh–sbah}”(h]”h ]”h"]”h$]”h&]”Œ refdomain”h)Œreftype”h+Œ reftarget”Œ(/translations/sp_SP/userspace-api/ntsync”Œmodname”NŒ classname”NŒ refexplicit”ˆuh1hhh ubeh}”(h]”h ]”h"]”h$]”h&]”Œcurrent_language”ŒEnglish”uh1h hhŒ _document”hŒsource”NŒline”NubhŒsection”“”)�”}”(hhh]”(hŒtitle”“”)�”}”(hŒ#NT synchronization primitive driver”h]”hŒ#NT synchronization primitive driver”…”�”}”(hh¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhh·h²hh³ŒB/var/lib/git/docbuild/linux/Documentation/userspace-api/ntsync.rst”h´KubhŒ paragraph”“”)�”}”(hŒ=This page documents the user-space API for the ntsync driver.”h]”hŒ=This page documents the user-space API for the ntsync driver.”…”�”}”(hhÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khh·h²hubhÌ)�”}”(hX?ntsync is a support driver for emulation of NT synchronization primitives by user-space NT emulators. It exists because implementation in user-space, using existing tools, cannot match Windows performance while offering accurate semantics. It is implemented entirely in software, and does not drive any hardware device.”h]”hX?ntsync is a support driver for emulation of NT synchronization primitives by user-space NT emulators. It exists because implementation in user-space, using existing tools, cannot match Windows performance while offering accurate semantics. It is implemented entirely in software, and does not drive any hardware device.”…”�”}”(hhÛh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khh·h²hubhÌ)�”}”(hŒ±This interface is meant as a compatibility tool only, and should not be used for general synchronization. Instead use generic, versatile interfaces such as futex(2) and poll(2).”h]”hŒ±This interface is meant as a compatibility tool only, and should not be used for general synchronization. Instead use generic, versatile interfaces such as futex(2) and poll(2).”…”�”}”(hhéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K hh·h²hubh¶)�”}”(hhh]”(h»)�”}”(hŒSynchronization primitives”h]”hŒSynchronization primitives”…”�”}”(hhúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhh÷h²hh³hÊh´KubhÌ)�”}”(hŒeThe ntsync driver exposes three types of synchronization primitives: semaphores, mutexes, and events.”h]”hŒeThe ntsync driver exposes three types of synchronization primitives: semaphores, mutexes, and events.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khh÷h²hubhÌ)�”}”(hX€A semaphore holds a single volatile 32-bit counter, and a static 32-bit integer denoting the maximum value. It is considered signaled (that is, can be acquired without contention, or will wake up a waiting thread) when the counter is nonzero. The counter is decremented by one when a wait is satisfied. Both the initial and maximum count are established when the semaphore is created.”h]”hX€A semaphore holds a single volatile 32-bit counter, and a static 32-bit integer denoting the maximum value. It is considered signaled (that is, can be acquired without contention, or will wake up a waiting thread) when the counter is nonzero. The counter is decremented by one when a wait is satisfied. Both the initial and maximum count are established when the semaphore is created.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khh÷h²hubhÌ)�”}”(hX)A mutex holds a volatile 32-bit recursion count, and a volatile 32-bit identifier denoting its owner. A mutex is considered signaled when its owner is zero (indicating that it is not owned). The recursion count is incremented when a wait is satisfied, and ownership is set to the given identifier.”h]”hX)A mutex holds a volatile 32-bit recursion count, and a volatile 32-bit identifier denoting its owner. A mutex is considered signaled when its owner is zero (indicating that it is not owned). The recursion count is incremented when a wait is satisfied, and ownership is set to the given identifier.”…”�”}”(hj$h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khh÷h²hubhÌ)�”}”(hX-A mutex also holds an internal flag denoting whether its previous owner has died; such a mutex is said to be abandoned. Owner death is not tracked automatically based on thread death, but rather must be communicated using ``NTSYNC_IOC_MUTEX_KILL``. An abandoned mutex is inherently considered unowned.”h]”(hŒÞA mutex also holds an internal flag denoting whether its previous owner has died; such a mutex is said to be abandoned. Owner death is not tracked automatically based on thread death, but rather must be communicated using ”…”�”}”(hj2h²hh³Nh´NubhŒliteral”“”)�”}”(hŒ``NTSYNC_IOC_MUTEX_KILL``”h]”hŒNTSYNC_IOC_MUTEX_KILL”…”�”}”(hj<h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj2ubhŒ6. An abandoned mutex is inherently considered unowned.”…”�”}”(hj2h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K$hh÷h²hubhÌ)�”}”(hX-Except for the "unowned" semantics of zero, the actual value of the owner identifier is not interpreted by the ntsync driver at all. The intended use is to store a thread identifier; however, the ntsync driver does not actually validate that a calling thread provides consistent or unique identifiers.”h]”hX1Except for the “unownedâ€� semantics of zero, the actual value of the owner identifier is not interpreted by the ntsync driver at all. The intended use is to store a thread identifier; however, the ntsync driver does not actually validate that a calling thread provides consistent or unique identifiers.”…”�”}”(hjTh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K*hh÷h²hubhÌ)�”}”(hXUAn event is similar to a semaphore with a maximum count of one. It holds a volatile boolean state denoting whether it is signaled or not. There are two types of events, auto-reset and manual-reset. An auto-reset event is designaled when a wait is satisfied; a manual-reset event is not. The event type is specified when the event is created.”h]”hXUAn event is similar to a semaphore with a maximum count of one. It holds a volatile boolean state denoting whether it is signaled or not. There are two types of events, auto-reset and manual-reset. An auto-reset event is designaled when a wait is satisfied; a manual-reset event is not. The event type is specified when the event is created.”…”�”}”(hjbh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K0hh÷h²hubhÌ)�”}”(hŒ‹Unless specified otherwise, all operations on an object are atomic and totally ordered with respect to other operations on the same object.”h]”hŒ‹Unless specified otherwise, all operations on an object are atomic and totally ordered with respect to other operations on the same object.”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K6hh÷h²hubhÌ)�”}”(hŒlObjects are represented by files. When all file descriptors to an object are closed, that object is deleted.”h]”hŒlObjects are represented by files. When all file descriptors to an object are closed, that object is deleted.”…”�”}”(hj~h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K9hh÷h²hubeh}”(h]”Œsynchronization-primitives”ah ]”h"]”Œsynchronization primitives”ah$]”h&]”uh1hµhh·h²hh³hÊh´Kubh¶)�”}”(hhh]”(h»)�”}”(hŒ Char device”h]”hŒ Char device”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj”h²hh³hÊh´K=ubhÌ)�”}”(hXThe ntsync driver creates a single char device /dev/ntsync. Each file description opened on the device represents a unique instance intended to back an individual NT virtual machine. Objects created by one ntsync instance may only be used with other objects created by the same instance.”h]”hXThe ntsync driver creates a single char device /dev/ntsync. Each file description opened on the device represents a unique instance intended to back an individual NT virtual machine. Objects created by one ntsync instance may only be used with other objects created by the same instance.”…”�”}”(hj¥h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K?hj”h²hubeh}”(h]”Œ char-device”ah ]”h"]”Œ char device”ah$]”h&]”uh1hµhh·h²hh³hÊh´K=ubh¶)�”}”(hhh]”(h»)�”}”(hŒioctl reference”h]”hŒioctl reference”…”�”}”(hj¾h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hºhj»h²hh³hÊh´KFubhÌ)�”}”(hŒeAll operations on the device are done through ioctls. There are four structures used in ioctl calls::”h]”hŒdAll operations on the device are done through ioctls. There are four structures used in ioctl calls:”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KHhj»h²hubhŒ literal_block”“”)�”}”(hXtstruct ntsync_sem_args { __u32 count; __u32 max; }; struct ntsync_mutex_args { __u32 owner; __u32 count; }; struct ntsync_event_args { __u32 manual; __u32 signaled; }; struct ntsync_wait_args { __u64 timeout; __u64 objs; __u32 count; __u32 index; __u32 flags; __u32 owner; __u32 alert; __u32 pad; };”h]”hXtstruct ntsync_sem_args { __u32 count; __u32 max; }; struct ntsync_mutex_args { __u32 owner; __u32 count; }; struct ntsync_event_args { __u32 manual; __u32 signaled; }; struct ntsync_wait_args { __u64 timeout; __u64 objs; __u32 count; __u32 index; __u32 flags; __u32 owner; __u32 alert; __u32 pad; };”…”�”}”hjÜsbah}”(h]”h ]”h"]”h$]”h&]”Œ xml:space”Œpreserve”uh1jÚh³hÊh´KKhj»h²hubhÌ)�”}”(hŒ]Depending on the ioctl, members of the structure may be used as input, output, or not at all.”h]”hŒ]Depending on the ioctl, members of the structure may be used as input, output, or not at all.”…”�”}”(hjìh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kehj»h²hubhÌ)�”}”(hŒ-The ioctls on the device file are as follows:”h]”hŒ-The ioctls on the device file are as follows:”…”�”}”(hjúh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Khhj»h²hubhŒindex”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(Œsingle”ŒNTSYNC_IOC_CREATE_SEM (C macro)”Œc.NTSYNC_IOC_CREATE_SEM”hNt”auh1jhj»h²hh³hÊh´NubhŒdesc”“”)�”}”(hhh]”(hŒdesc_signature”“”)�”}”(hŒNTSYNC_IOC_CREATE_SEM”h]”hŒdesc_signature_line”“”)�”}”(hŒNTSYNC_IOC_CREATE_SEM”h]”hŒ desc_name”“”)�”}”(hŒNTSYNC_IOC_CREATE_SEM”h]”hŒ desc_sig_name”“”)�”}”(hj"h]”hŒNTSYNC_IOC_CREATE_SEM”…”�”}”(hj2h²hh³Nh´Nubah}”(h]”h ]”Œn”ah"]”h$]”h&]”uh1j0hj,ubah}”(h]”h ]”(Œsig-name”Œdescname”eh"]”h$]”h&]”jêjëuh1j*hj&h²hh³hÊh´Kjubah}”(h]”h ]”h"]”h$]”h&]”jêjëŒ add_permalink”ˆuh1j$Œsphinx_line_type”Œ declarator”hj h²hh³hÊh´Kjubah}”(h]”jah ]”(Œsig”Œ sig-object”eh"]”h$]”h&]”Œ is_multiline”ˆŒ _toc_parts”)Œ _toc_name”huh1jh³hÊh´Kjhjh²hubhŒ desc_content”“”)�”}”(hhh]”(hÌ)�”}”(hŒiCreate a semaphore object. Takes a pointer to struct :c:type:`ntsync_sem_args`, which is used as follows:”h]”(hŒ5Create a semaphore object. Takes a pointer to struct ”…”�”}”(hjah²hh³Nh´Nubh)�”}”(hŒ:c:type:`ntsync_sem_args`”h]”j;)�”}”(hjkh]”hŒntsync_sem_args”…”�”}”(hjmh²hh³Nh´Nubah}”(h]”h ]”(Œxref”Œc”Œc-type”eh"]”h$]”h&]”uh1j:hjiubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”Œuserspace-api/ntsync”Œ refdomain”jxŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰Œ c:parent_key”Œsphinx.domains.c”Œ LookupKey”“”)�”}”Œdata”]”j‹Œ ASTIdentifier”“”)�”}”Œ identifier”j"sbŒc.NTSYNC_IOC_CREATE_SEM”†”asbŒ reftarget”Œntsync_sem_args”uh1hh³hÊh´KhjaubhŒ, which is used as follows:”…”�”}”(hjah²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Klhj^h²hubhŒtable”“”)�”}”(hhh]”hŒtgroup”“”)�”}”(hhh]”(hŒcolspec”“”)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œcolwidth”K2uh1j¯hj¬ubj°)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”jºK2uh1j¯hj¬ubhŒtbody”“”)�”}”(hhh]”(hŒrow”“”)�”}”(hhh]”(hŒentry”“”)�”}”(hhh]”hÌ)�”}”(hŒ ``count``”h]”j;)�”}”(hjÕh]”hŒcount”…”�”}”(hj×h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjÓubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KqhjÐubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjËubjÏ)�”}”(hhh]”hÌ)�”}”(hŒInitial count of the semaphore.”h]”hŒInitial count of the semaphore.”…”�”}”(hjóh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Krhjðubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjËubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉhjÆubjÊ)�”}”(hhh]”(jÏ)�”}”(hhh]”hÌ)�”}”(hŒ``max``”h]”j;)�”}”(hjh]”hŒmax”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kshjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhj ubjÏ)�”}”(hhh]”hÌ)�”}”(hŒMaximum count of the semaphore.”h]”hŒMaximum count of the semaphore.”…”�”}”(hj3h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kthj0ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉhjÆubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÄhj¬ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jªhj§ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥hj^h²hh³Nh´NubhÌ)�”}”(hŒxFails with ``EINVAL`` if ``count`` is greater than ``max``. On success, returns a file descriptor the created semaphore.”h]”(hŒ Fails with ”…”�”}”(hj`h²hh³Nh´Nubj;)�”}”(hŒ ``EINVAL``”h]”hŒEINVAL”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj`ubhŒ if ”…”�”}”(hj`h²hh³Nh´Nubj;)�”}”(hŒ ``count``”h]”hŒcount”…”�”}”(hjzh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj`ubhŒ is greater than ”…”�”}”(hj`h²hh³Nh´Nubj;)�”}”(hŒ``max``”h]”hŒmax”…”�”}”(hjŒh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj`ubhŒ>. On success, returns a file descriptor the created semaphore.”…”�”}”(hj`h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kvhj^h²hubeh}”(h]”h ]”h"]”h$]”h&]”uh1j\hjh²hh³hÊh´Kjubeh}”(h]”h ]”(jxŒmacro”eh"]”h$]”h&]”Œdomain”jxŒobjtype”j­Œdesctype”j­Œnoindex”‰Œ noindexentry”‰Œnocontentsentry”‰uh1jh²hhj»h³hÊh´Nubj )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ!NTSYNC_IOC_CREATE_MUTEX (C macro)”Œc.NTSYNC_IOC_CREATE_MUTEX”hNt”auh1jhj»h²hh³hÊh´Nubj)�”}”(hhh]”(j)�”}”(hŒNTSYNC_IOC_CREATE_MUTEX”h]”j%)�”}”(hŒNTSYNC_IOC_CREATE_MUTEX”h]”j+)�”}”(hŒNTSYNC_IOC_CREATE_MUTEX”h]”j1)�”}”(hjÊh]”hŒNTSYNC_IOC_CREATE_MUTEX”…”�”}”(hjÔh²hh³Nh´Nubah}”(h]”h ]”j<ah"]”h$]”h&]”uh1j0hjÐubah}”(h]”h ]”(jCjDeh"]”h$]”h&]”jêjëuh1j*hjÌh²hh³hÊh´Kyubah}”(h]”h ]”h"]”h$]”h&]”jêjëjNˆuh1j$jOjPhjÈh²hh³hÊh´Kyubah}”(h]”jÃah ]”(jTjUeh"]”h$]”h&]”jYˆjZ)j[huh1jh³hÊh´KyhjÅh²hubj])�”}”(hhh]”(hÌ)�”}”(hŒgCreate a mutex object. Takes a pointer to struct :c:type:`ntsync_mutex_args`, which is used as follows:”h]”(hŒ1Create a mutex object. Takes a pointer to struct ”…”�”}”(hjöh²hh³Nh´Nubh)�”}”(hŒ:c:type:`ntsync_mutex_args`”h]”j;)�”}”(hjh]”hŒntsync_mutex_args”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”(jwjxŒc-type”eh"]”h$]”h&]”uh1j:hjþubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j„Œ refdomain”jxŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jŠj�)�”}”j�]”j“)�”}”j–jÊsbŒc.NTSYNC_IOC_CREATE_MUTEX”†”asbj™Œntsync_mutex_args”uh1hh³hÊh´KhjöubhŒ, which is used as follows:”…”�”}”(hjöh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K{hjóh²hubj¦)�”}”(hhh]”j«)�”}”(hhh]”(j°)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”jºK2uh1j¯hj1ubj°)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”jºK2uh1j¯hj1ubjÅ)�”}”(hhh]”(jÊ)�”}”(hhh]”(jÏ)�”}”(hhh]”hÌ)�”}”(hŒ ``count``”h]”j;)�”}”(hjQh]”hŒcount”…”�”}”(hjSh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjOubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K€hjLubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjIubjÏ)�”}”(hhh]”hÌ)�”}”(hŒ%Initial recursion count of the mutex.”h]”hŒ%Initial recursion count of the mutex.”…”�”}”(hjoh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K�hjlubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjIubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉhjFubjÊ)�”}”(hhh]”(jÏ)�”}”(hhh]”hÌ)�”}”(hŒ ``owner``”h]”j;)�”}”(hj‘h]”hŒowner”…”�”}”(hj“h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K‚hjŒubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhj‰ubjÏ)�”}”(hhh]”hÌ)�”}”(hŒInitial owner of the mutex.”h]”hŒInitial owner of the mutex.”…”�”}”(hj¯h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kƒhj¬ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhj‰ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉhjFubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÄhj1ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jªhj.ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥hjóh²hh³Nh´NubhÌ)�”}”(hŒ½If ``owner`` is nonzero and ``count`` is zero, or if ``owner`` is zero and ``count`` is nonzero, the function fails with ``EINVAL``. On success, returns a file descriptor the created mutex.”h]”(hŒIf ”…”�”}”(hjÜh²hh³Nh´Nubj;)�”}”(hŒ ``owner``”h]”hŒowner”…”�”}”(hjäh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjÜubhŒ is nonzero and ”…”�”}”(hjÜh²hh³Nh´Nubj;)�”}”(hŒ ``count``”h]”hŒcount”…”�”}”(hjöh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjÜubhŒ is zero, or if ”…”�”}”(hjÜh²hh³Nh´Nubj;)�”}”(hŒ ``owner``”h]”hŒowner”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjÜubhŒ is zero and ”…”�”}”(hjÜh²hh³Nh´Nubj;)�”}”(hŒ ``count``”h]”hŒcount”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjÜubhŒ% is nonzero, the function fails with ”…”�”}”(hjÜh²hh³Nh´Nubj;)�”}”(hŒ ``EINVAL``”h]”hŒEINVAL”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjÜubhŒ:. On success, returns a file descriptor the created mutex.”…”�”}”(hjÜh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K…hjóh²hubeh}”(h]”h ]”h"]”h$]”h&]”uh1j\hjÅh²hh³hÊh´Kyubeh}”(h]”h ]”(jxŒmacro”eh"]”h$]”h&]”j±jxj²jMj³jMj´‰jµ‰j¶‰uh1jh²hhj»h³hÊh´Nubj )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ!NTSYNC_IOC_CREATE_EVENT (C macro)”Œc.NTSYNC_IOC_CREATE_EVENT”hNt”auh1jhj»h²hh³hÊh´Nubj)�”}”(hhh]”(j)�”}”(hŒNTSYNC_IOC_CREATE_EVENT”h]”j%)�”}”(hŒNTSYNC_IOC_CREATE_EVENT”h]”j+)�”}”(hŒNTSYNC_IOC_CREATE_EVENT”h]”j1)�”}”(hjdh]”hŒNTSYNC_IOC_CREATE_EVENT”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”j<ah"]”h$]”h&]”uh1j0hjjubah}”(h]”h ]”(jCjDeh"]”h$]”h&]”jêjëuh1j*hjfh²hh³hÊh´K‰ubah}”(h]”h ]”h"]”h$]”h&]”jêjëjNˆuh1j$jOjPhjbh²hh³hÊh´K‰ubah}”(h]”j]ah ]”(jTjUeh"]”h$]”h&]”jYˆjZ)j[huh1jh³hÊh´K‰hj_h²hubj])�”}”(hhh]”(hÌ)�”}”(hŒhCreate an event object. Takes a pointer to struct :c:type:`ntsync_event_args`, which is used as follows:”h]”(hŒ2Create an event object. Takes a pointer to struct ”…”�”}”(hj�h²hh³Nh´Nubh)�”}”(hŒ:c:type:`ntsync_event_args`”h]”j;)�”}”(hjšh]”hŒntsync_event_args”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”(jwjxŒc-type”eh"]”h$]”h&]”uh1j:hj˜ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j„Œ refdomain”jxŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jŠj�)�”}”j�]”j“)�”}”j–jdsbŒc.NTSYNC_IOC_CREATE_EVENT”†”asbj™Œntsync_event_args”uh1hh³hÊh´Khj�ubhŒ, which is used as follows:”…”�”}”(hj�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K‹hj�h²hubj¦)�”}”(hhh]”j«)�”}”(hhh]”(j°)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”jºK2uh1j¯hjËubj°)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”jºK2uh1j¯hjËubjÅ)�”}”(hhh]”(jÊ)�”}”(hhh]”(jÏ)�”}”(hhh]”hÌ)�”}”(hŒ ``signaled``”h]”j;)�”}”(hjëh]”hŒsignaled”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjéubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K�hjæubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjãubjÏ)�”}”(hhh]”hÌ)�”}”(hŒCIf nonzero, the event is initially signaled, otherwise nonsignaled.”h]”hŒCIf nonzero, the event is initially signaled, otherwise nonsignaled.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K‘hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjãubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉhjàubjÊ)�”}”(hhh]”(jÏ)�”}”(hhh]”hÌ)�”}”(hŒ ``manual``”h]”j;)�”}”(hj+h]”hŒmanual”…”�”}”(hj-h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj)ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K“hj&ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhj#ubjÏ)�”}”(hhh]”hÌ)�”}”(hŒDIf nonzero, the event is a manual-reset event, otherwise auto-reset.”h]”hŒDIf nonzero, the event is a manual-reset event, otherwise auto-reset.”…”�”}”(hjIh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K”hjFubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhj#ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉhjàubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjËubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jªhjÈubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥hj�h²hh³Nh´NubhÌ)�”}”(hŒ8On success, returns a file descriptor the created event.”h]”hŒ8On success, returns a file descriptor the created event.”…”�”}”(hjvh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K—hj�h²hubeh}”(h]”h ]”h"]”h$]”h&]”uh1j\hj_h²hh³hÊh´K‰ubeh}”(h]”h ]”(jxŒmacro”eh"]”h$]”h&]”j±jxj²j�j³j�j´‰jµ‰j¶‰uh1jh²hhj»h³hÊh´NubhÌ)�”}”(hŒ4The ioctls on the individual objects are as follows:”h]”hŒ4The ioctls on the individual objects are as follows:”…”�”}”(hj‘h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K™hj»h²hubj )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ NTSYNC_IOC_SEM_RELEASE (C macro)”Œc.NTSYNC_IOC_SEM_RELEASE”hNt”auh1jhj»h²hh³hÊh´Nubj)�”}”(hhh]”(j)�”}”(hŒNTSYNC_IOC_SEM_RELEASE”h]”j%)�”}”(hŒNTSYNC_IOC_SEM_RELEASE”h]”j+)�”}”(hŒNTSYNC_IOC_SEM_RELEASE”h]”j1)�”}”(hj²h]”hŒNTSYNC_IOC_SEM_RELEASE”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”j<ah"]”h$]”h&]”uh1j0hj¸ubah}”(h]”h ]”(jCjDeh"]”h$]”h&]”jêjëuh1j*hj´h²hh³hÊh´K›ubah}”(h]”h ]”h"]”h$]”h&]”jêjëjNˆuh1j$jOjPhj°h²hh³hÊh´K›ubah}”(h]”j«ah ]”(jTjUeh"]”h$]”h&]”jYˆjZ)j[huh1jh³hÊh´K›hj­h²hubj])�”}”(hhh]”(hÌ)�”}”(hŒ¨Post to a semaphore object. Takes a pointer to a 32-bit integer, which on input holds the count to be added to the semaphore, and on output contains its previous count.”h]”hŒ¨Post to a semaphore object. Takes a pointer to a 32-bit integer, which on input holds the count to be added to the semaphore, and on output contains its previous count.”…”�”}”(hjÞh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K�hjÛh²hubhÌ)�”}”(hXXIf adding to the semaphore's current count would raise the latter past the semaphore's maximum count, the ioctl fails with ``EOVERFLOW`` and the semaphore is not affected. If raising the semaphore's count causes it to become signaled, eligible threads waiting on this semaphore will be woken and the semaphore's count decremented appropriately.”h]”(hŒIf adding to the semaphore’s current count would raise the latter past the semaphore’s maximum count, the ioctl fails with ”…”�”}”(hjìh²hh³Nh´Nubj;)�”}”(hŒ ``EOVERFLOW``”h]”hŒ EOVERFLOW”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjìubhŒÔ and the semaphore is not affected. If raising the semaphore’s count causes it to become signaled, eligible threads waiting on this semaphore will be woken and the semaphore’s count decremented appropriately.”…”�”}”(hjìh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K¡hjÛh²hubeh}”(h]”h ]”h"]”h$]”h&]”uh1j\hj­h²hh³hÊh´K›ubeh}”(h]”h ]”(jxŒmacro”eh"]”h$]”h&]”j±jxj²jj³jj´‰jµ‰j¶‰uh1jh²hhj»h³hÊh´Nubj )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ!NTSYNC_IOC_MUTEX_UNLOCK (C macro)”Œc.NTSYNC_IOC_MUTEX_UNLOCK”hNt”auh1jhj»h²hh³hÊh´Nubj)�”}”(hhh]”(j)�”}”(hŒNTSYNC_IOC_MUTEX_UNLOCK”h]”j%)�”}”(hŒNTSYNC_IOC_MUTEX_UNLOCK”h]”j+)�”}”(hŒNTSYNC_IOC_MUTEX_UNLOCK”h]”j1)�”}”(hj,h]”hŒNTSYNC_IOC_MUTEX_UNLOCK”…”�”}”(hj6h²hh³Nh´Nubah}”(h]”h ]”j<ah"]”h$]”h&]”uh1j0hj2ubah}”(h]”h ]”(jCjDeh"]”h$]”h&]”jêjëuh1j*hj.h²hh³hÊh´K¨ubah}”(h]”h ]”h"]”h$]”h&]”jêjëjNˆuh1j$jOjPhj*h²hh³hÊh´K¨ubah}”(h]”j%ah ]”(jTjUeh"]”h$]”h&]”jYˆjZ)j[huh1jh³hÊh´K¨hj'h²hubj])�”}”(hhh]”(hÌ)�”}”(hŒhRelease a mutex object. Takes a pointer to struct :c:type:`ntsync_mutex_args`, which is used as follows:”h]”(hŒ2Release a mutex object. Takes a pointer to struct ”…”�”}”(hjXh²hh³Nh´Nubh)�”}”(hŒ:c:type:`ntsync_mutex_args`”h]”j;)�”}”(hjbh]”hŒntsync_mutex_args”…”�”}”(hjdh²hh³Nh´Nubah}”(h]”h ]”(jwjxŒc-type”eh"]”h$]”h&]”uh1j:hj`ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j„Œ refdomain”jxŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jŠj�)�”}”j�]”j“)�”}”j–j,sbŒc.NTSYNC_IOC_MUTEX_UNLOCK”†”asbj™Œntsync_mutex_args”uh1hh³hÊh´KhjXubhŒ, which is used as follows:”…”�”}”(hjXh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KªhjUh²hubj¦)�”}”(hhh]”j«)�”}”(hhh]”(j°)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”jºK2uh1j¯hj“ubj°)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”jºK2uh1j¯hj“ubjÅ)�”}”(hhh]”(jÊ)�”}”(hhh]”(jÏ)�”}”(hhh]”hÌ)�”}”(hŒ ``owner``”h]”j;)�”}”(hj³h]”hŒowner”…”�”}”(hjµh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj±ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K¯hj®ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhj«ubjÏ)�”}”(hhh]”hÌ)�”}”(hŒ1Specifies the owner trying to release this mutex.”h]”hŒ1Specifies the owner trying to release this mutex.”…”�”}”(hjÑh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K°hjÎubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhj«ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉhj¨ubjÊ)�”}”(hhh]”(jÏ)�”}”(hhh]”hÌ)�”}”(hŒ ``count``”h]”j;)�”}”(hjóh]”hŒcount”…”�”}”(hjõh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjñubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K±hjîubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjëubjÏ)�”}”(hhh]”hÌ)�”}”(hŒ1On output, contains the previous recursion count.”h]”hŒ1On output, contains the previous recursion count.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K²hjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjëubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉhj¨ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÄhj“ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jªhj�ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥hjUh²hh³Nh´NubhÌ)�”}”(hŒŠIf ``owner`` is zero, the ioctl fails with ``EINVAL``. If ``owner`` is not the current owner of the mutex, the ioctl fails with ``EPERM``.”h]”(hŒIf ”…”�”}”(hj>h²hh³Nh´Nubj;)�”}”(hŒ ``owner``”h]”hŒowner”…”�”}”(hjFh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj>ubhŒ is zero, the ioctl fails with ”…”�”}”(hj>h²hh³Nh´Nubj;)�”}”(hŒ ``EINVAL``”h]”hŒEINVAL”…”�”}”(hjXh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj>ubhŒ. If ”…”�”}”(hj>h²hh³Nh´Nubj;)�”}”(hŒ ``owner``”h]”hŒowner”…”�”}”(hjjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj>ubhŒ= is not the current owner of the mutex, the ioctl fails with ”…”�”}”(hj>h²hh³Nh´Nubj;)�”}”(hŒ ``EPERM``”h]”hŒEPERM”…”�”}”(hj|h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj>ubhŒ.”…”�”}”(hj>h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K´hjUh²hubhÌ)�”}”(hŒ×The mutex's count will be decremented by one. If decrementing the mutex's count causes it to become zero, the mutex is marked as unowned and signaled, and eligible threads waiting on it will be woken as appropriate.”h]”hŒÛThe mutex’s count will be decremented by one. If decrementing the mutex’s count causes it to become zero, the mutex is marked as unowned and signaled, and eligible threads waiting on it will be woken as appropriate.”…”�”}”(hj”h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K¸hjUh²hubeh}”(h]”h ]”h"]”h$]”h&]”uh1j\hj'h²hh³hÊh´K¨ubeh}”(h]”h ]”(jxŒmacro”eh"]”h$]”h&]”j±jxj²j«j³j«j´‰jµ‰j¶‰uh1jh²hhj»h³hÊh´Nubj )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒNTSYNC_IOC_EVENT_SET (C macro)”Œc.NTSYNC_IOC_EVENT_SET”hNt”auh1jhj»h²hh³hÊh´Nubj)�”}”(hhh]”(j)�”}”(hŒNTSYNC_IOC_EVENT_SET”h]”j%)�”}”(hŒNTSYNC_IOC_EVENT_SET”h]”j+)�”}”(hŒNTSYNC_IOC_EVENT_SET”h]”j1)�”}”(hjÂh]”hŒNTSYNC_IOC_EVENT_SET”…”�”}”(hjÌh²hh³Nh´Nubah}”(h]”h ]”j<ah"]”h$]”h&]”uh1j0hjÈubah}”(h]”h ]”(jCjDeh"]”h$]”h&]”jêjëuh1j*hjÄh²hh³hÊh´K½ubah}”(h]”h ]”h"]”h$]”h&]”jêjëjNˆuh1j$jOjPhjÀh²hh³hÊh´K½ubah}”(h]”j»ah ]”(jTjUeh"]”h$]”h&]”jYˆjZ)j[huh1jh³hÊh´K½hj½h²hubj])�”}”(hhh]”(hÌ)�”}”(hŒvSignal an event object. Takes a pointer to a 32-bit integer, which on output contains the previous state of the event.”h]”hŒvSignal an event object. Takes a pointer to a 32-bit integer, which on output contains the previous state of the event.”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K¿hjëh²hubhÌ)�”}”(hŒWEligible threads will be woken, and auto-reset events will be designaled appropriately.”h]”hŒWEligible threads will be woken, and auto-reset events will be designaled appropriately.”…”�”}”(hjüh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÂhjëh²hubeh}”(h]”h ]”h"]”h$]”h&]”uh1j\hj½h²hh³hÊh´K½ubeh}”(h]”h ]”(jxŒmacro”eh"]”h$]”h&]”j±jxj²j j³j j´‰jµ‰j¶‰uh1jh²hhj»h³hÊh´Nubj )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ NTSYNC_IOC_EVENT_RESET (C macro)”Œc.NTSYNC_IOC_EVENT_RESET”hNt”auh1jhj»h²hh³hÊh´Nubj)�”}”(hhh]”(j)�”}”(hŒNTSYNC_IOC_EVENT_RESET”h]”j%)�”}”(hŒNTSYNC_IOC_EVENT_RESET”h]”j+)�”}”(hŒNTSYNC_IOC_EVENT_RESET”h]”j1)�”}”(hj* h]”hŒNTSYNC_IOC_EVENT_RESET”…”�”}”(hj4 h²hh³Nh´Nubah}”(h]”h ]”j<ah"]”h$]”h&]”uh1j0hj0 ubah}”(h]”h ]”(jCjDeh"]”h$]”h&]”jêjëuh1j*hj, h²hh³hÊh´KÅubah}”(h]”h ]”h"]”h$]”h&]”jêjëjNˆuh1j$jOjPhj( h²hh³hÊh´KÅubah}”(h]”j# ah ]”(jTjUeh"]”h$]”h&]”jYˆjZ)j[huh1jh³hÊh´KÅhj% h²hubj])�”}”(hhh]”hÌ)�”}”(hŒxDesignal an event object. Takes a pointer to a 32-bit integer, which on output contains the previous state of the event.”h]”hŒxDesignal an event object. Takes a pointer to a 32-bit integer, which on output contains the previous state of the event.”…”�”}”(hjV h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÇhjS h²hubah}”(h]”h ]”h"]”h$]”h&]”uh1j\hj% h²hh³hÊh´KÅubeh}”(h]”h ]”(jxŒmacro”eh"]”h$]”h&]”j±jxj²jm j³jm j´‰jµ‰j¶‰uh1jh²hhj»h³hÊh´Nubj )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒ NTSYNC_IOC_EVENT_PULSE (C macro)”Œc.NTSYNC_IOC_EVENT_PULSE”hNt”auh1jhj»h²hh³hÊh´Nubj)�”}”(hhh]”(j)�”}”(hŒNTSYNC_IOC_EVENT_PULSE”h]”j%)�”}”(hŒNTSYNC_IOC_EVENT_PULSE”h]”j+)�”}”(hŒNTSYNC_IOC_EVENT_PULSE”h]”j1)�”}”(hj„ h]”hŒNTSYNC_IOC_EVENT_PULSE”…”�”}”(hjŽ h²hh³Nh´Nubah}”(h]”h ]”j<ah"]”h$]”h&]”uh1j0hjŠ ubah}”(h]”h ]”(jCjDeh"]”h$]”h&]”jêjëuh1j*hj† h²hh³hÊh´KÊubah}”(h]”h ]”h"]”h$]”h&]”jêjëjNˆuh1j$jOjPhj‚ h²hh³hÊh´KÊubah}”(h]”j} ah ]”(jTjUeh"]”h$]”h&]”jYˆjZ)j[huh1jh³hÊh´KÊhj h²hubj])�”}”(hhh]”(hÌ)�”}”(hŒ¯Wake threads waiting on an event object while leaving it in an unsignaled state. Takes a pointer to a 32-bit integer, which on output contains the previous state of the event.”h]”hŒ¯Wake threads waiting on an event object while leaving it in an unsignaled state. Takes a pointer to a 32-bit integer, which on output contains the previous state of the event.”…”�”}”(hj° h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÌhj­ h²hubhÌ)�”}”(hX¨A pulse operation can be thought of as a set followed by a reset, performed as a single atomic operation. If two threads are waiting on an auto-reset event which is pulsed, only one will be woken. If two threads are waiting a manual-reset event which is pulsed, both will be woken. However, in both cases, the event will be unsignaled afterwards, and a simultaneous read operation will always report the event as unsignaled.”h]”hX¨A pulse operation can be thought of as a set followed by a reset, performed as a single atomic operation. If two threads are waiting on an auto-reset event which is pulsed, only one will be woken. If two threads are waiting a manual-reset event which is pulsed, both will be woken. However, in both cases, the event will be unsignaled afterwards, and a simultaneous read operation will always report the event as unsignaled.”…”�”}”(hj¾ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÐhj­ h²hubeh}”(h]”h ]”h"]”h$]”h&]”uh1j\hj h²hh³hÊh´KÊubeh}”(h]”h ]”(jxŒmacro”eh"]”h$]”h&]”j±jxj²jÕ j³jÕ j´‰jµ‰j¶‰uh1jh²hhj»h³hÊh´Nubj )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒNTSYNC_IOC_SEM_READ (C macro)”Œc.NTSYNC_IOC_SEM_READ”hNt”auh1jhj»h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒNTSYNC_IOC_SEM_READ”h]”j%)�”}”(hŒNTSYNC_IOC_SEM_READ”h]”j+)�”}”(hŒNTSYNC_IOC_SEM_READ”h]”j1)�”}”(hjì h]”hŒNTSYNC_IOC_SEM_READ”…”�”}”(hjö h²hh³Nh´Nubah}”(h]”h ]”j<ah"]”h$]”h&]”uh1j0hjò ubah}”(h]”h ]”(jCjDeh"]”h$]”h&]”jêjëuh1j*hjî h²hh³hÊh´KØubah}”(h]”h ]”h"]”h$]”h&]”jêjëjNˆuh1j$jOjPhjê h²hh³hÊh´KØubah}”(h]”jå ah ]”(jTjUeh"]”h$]”h&]”jYˆjZ)j[huh1jh³hÊh´KØhjç h²hubj])�”}”(hhh]”(hÌ)�”}”(hŒ|Read the current state of a semaphore object. Takes a pointer to struct :c:type:`ntsync_sem_args`, which is used as follows:”h]”(hŒHRead the current state of a semaphore object. Takes a pointer to struct ”…”�”}”(hj h²hh³Nh´Nubh)�”}”(hŒ:c:type:`ntsync_sem_args`”h]”j;)�”}”(hj" h]”hŒntsync_sem_args”…”�”}”(hj$ h²hh³Nh´Nubah}”(h]”h ]”(jwjxŒc-type”eh"]”h$]”h&]”uh1j:hj ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j„Œ refdomain”jxŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jŠj�)�”}”j�]”j“)�”}”j–jì sbŒc.NTSYNC_IOC_SEM_READ”†”asbj™Œntsync_sem_args”uh1hh³hÊh´Khj ubhŒ, which is used as follows:”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KÚhj h²hubj¦)�”}”(hhh]”j«)�”}”(hhh]”(j°)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”jºK2uh1j¯hjS ubj°)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”jºK2uh1j¯hjS ubjÅ)�”}”(hhh]”(jÊ)�”}”(hhh]”(jÏ)�”}”(hhh]”hÌ)�”}”(hŒ ``count``”h]”j;)�”}”(hjs h]”hŒcount”…”�”}”(hju h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjq ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kßhjn ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjk ubjÏ)�”}”(hhh]”hÌ)�”}”(hŒ7On output, contains the current count of the semaphore.”h]”hŒ7On output, contains the current count of the semaphore.”…”�”}”(hj‘ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KàhjŽ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjk ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉhjh ubjÊ)�”}”(hhh]”(jÏ)�”}”(hhh]”hÌ)�”}”(hŒ``max``”h]”j;)�”}”(hj³ h]”hŒmax”…”�”}”(hjµ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj± ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Káhj® ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhj« ubjÏ)�”}”(hhh]”hÌ)�”}”(hŒ7On output, contains the maximum count of the semaphore.”h]”hŒ7On output, contains the maximum count of the semaphore.”…”�”}”(hjÑ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KâhjÎ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhj« ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉhjh ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjS ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jªhjP ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j\hjç h²hh³hÊh´KØubeh}”(h]”h ]”(jxŒmacro”eh"]”h$]”h&]”j±jxj²j j³j j´‰jµ‰j¶‰uh1jh²hhj»h³Nh´Nubj )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒNTSYNC_IOC_MUTEX_READ (C macro)”Œc.NTSYNC_IOC_MUTEX_READ”hNt”auh1jhj»h²hh³hÊh´Nubj)�”}”(hhh]”(j)�”}”(hŒNTSYNC_IOC_MUTEX_READ”h]”j%)�”}”(hŒNTSYNC_IOC_MUTEX_READ”h]”j+)�”}”(hŒNTSYNC_IOC_MUTEX_READ”h]”j1)�”}”(hj h]”hŒNTSYNC_IOC_MUTEX_READ”…”�”}”(hj( h²hh³Nh´Nubah}”(h]”h ]”j<ah"]”h$]”h&]”uh1j0hj$ ubah}”(h]”h ]”(jCjDeh"]”h$]”h&]”jêjëuh1j*hj h²hh³hÊh´Käubah}”(h]”h ]”h"]”h$]”h&]”jêjëjNˆuh1j$jOjPhj h²hh³hÊh´Käubah}”(h]”j ah ]”(jTjUeh"]”h$]”h&]”jYˆjZ)j[huh1jh³hÊh´Kähj h²hubj])�”}”(hhh]”(hÌ)�”}”(hŒzRead the current state of a mutex object. Takes a pointer to struct :c:type:`ntsync_mutex_args`, which is used as follows:”h]”(hŒDRead the current state of a mutex object. Takes a pointer to struct ”…”�”}”(hjJ h²hh³Nh´Nubh)�”}”(hŒ:c:type:`ntsync_mutex_args`”h]”j;)�”}”(hjT h]”hŒntsync_mutex_args”…”�”}”(hjV h²hh³Nh´Nubah}”(h]”h ]”(jwjxŒc-type”eh"]”h$]”h&]”uh1j:hjR ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j„Œ refdomain”jxŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jŠj�)�”}”j�]”j“)�”}”j–j sbŒc.NTSYNC_IOC_MUTEX_READ”†”asbj™Œntsync_mutex_args”uh1hh³hÊh´KhjJ ubhŒ, which is used as follows:”…”�”}”(hjJ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KæhjG h²hubj¦)�”}”(hhh]”j«)�”}”(hhh]”(j°)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”jºK2uh1j¯hj… ubj°)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”jºK2uh1j¯hj… ubjÅ)�”}”(hhh]”(jÊ)�”}”(hhh]”(jÏ)�”}”(hhh]”hÌ)�”}”(hŒ ``owner``”h]”j;)�”}”(hj¥ h]”hŒowner”…”�”}”(hj§ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj£ ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Këhj  ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhj� ubjÏ)�”}”(hhh]”hÌ)�”}”(hŒ`On output, contains the current owner of the mutex, or zero if the mutex is not currently owned.”h]”hŒ`On output, contains the current owner of the mutex, or zero if the mutex is not currently owned.”…”�”}”(hjà h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KìhjÀ ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhj� ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉhjš ubjÊ)�”}”(hhh]”(jÏ)�”}”(hhh]”hÌ)�”}”(hŒ ``count``”h]”j;)�”}”(hjå h]”hŒcount”…”�”}”(hjç h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjã ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kîhjà ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjÝ ubjÏ)�”}”(hhh]”hÌ)�”}”(hŒ=On output, contains the current recursion count of the mutex.”h]”hŒ=On output, contains the current recursion count of the mutex.”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kïhj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjÝ ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉhjš ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÄhj… ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jªhj‚ ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥hjG h²hh³Nh´NubhÌ)�”}”(hŒƒIf the mutex is marked as abandoned, the function fails with ``EOWNERDEAD``. In this case, ``count`` and ``owner`` are set to zero.”h]”(hŒ=If the mutex is marked as abandoned, the function fails with ”…”�”}”(hj0 h²hh³Nh´Nubj;)�”}”(hŒ``EOWNERDEAD``”h]”hŒ EOWNERDEAD”…”�”}”(hj8 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj0 ubhŒ. In this case, ”…”�”}”(hj0 h²hh³Nh´Nubj;)�”}”(hŒ ``count``”h]”hŒcount”…”�”}”(hjJ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj0 ubhŒ and ”…”�”}”(hj0 h²hh³Nh´Nubj;)�”}”(hŒ ``owner``”h]”hŒowner”…”�”}”(hj\ h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj0 ubhŒ are set to zero.”…”�”}”(hj0 h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KñhjG h²hubeh}”(h]”h ]”h"]”h$]”h&]”uh1j\hj h²hh³hÊh´Käubeh}”(h]”h ]”(jxŒmacro”eh"]”h$]”h&]”j±jxj²j} j³j} j´‰jµ‰j¶‰uh1jh²hhj»h³hÊh´Nubj )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒNTSYNC_IOC_EVENT_READ (C macro)”Œc.NTSYNC_IOC_EVENT_READ”hNt”auh1jhj»h²hh³Nh´Nubj)�”}”(hhh]”(j)�”}”(hŒNTSYNC_IOC_EVENT_READ”h]”j%)�”}”(hŒNTSYNC_IOC_EVENT_READ”h]”j+)�”}”(hŒNTSYNC_IOC_EVENT_READ”h]”j1)�”}”(hj” h]”hŒNTSYNC_IOC_EVENT_READ”…”�”}”(hjž h²hh³Nh´Nubah}”(h]”h ]”j<ah"]”h$]”h&]”uh1j0hjš ubah}”(h]”h ]”(jCjDeh"]”h$]”h&]”jêjëuh1j*hj– h²hh³hÊh´Kõubah}”(h]”h ]”h"]”h$]”h&]”jêjëjNˆuh1j$jOjPhj’ h²hh³hÊh´Kõubah}”(h]”j� ah ]”(jTjUeh"]”h$]”h&]”jYˆjZ)j[huh1jh³hÊh´Kõhj� h²hubj])�”}”(hhh]”(hÌ)�”}”(hŒ{Read the current state of an event object. Takes a pointer to struct :c:type:`ntsync_event_args`, which is used as follows:”h]”(hŒERead the current state of an event object. Takes a pointer to struct ”…”�”}”(hjÀ h²hh³Nh´Nubh)�”}”(hŒ:c:type:`ntsync_event_args`”h]”j;)�”}”(hjÊ h]”hŒntsync_event_args”…”�”}”(hjÌ h²hh³Nh´Nubah}”(h]”h ]”(jwjxŒc-type”eh"]”h$]”h&]”uh1j:hjÈ ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j„Œ refdomain”jxŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jŠj�)�”}”j�]”j“)�”}”j–j” sbŒc.NTSYNC_IOC_EVENT_READ”†”asbj™Œntsync_event_args”uh1hh³hÊh´KhjÀ ubhŒ, which is used as follows:”…”�”}”(hjÀ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´K÷hj½ h²hubj¦)�”}”(hhh]”j«)�”}”(hhh]”(j°)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”jºK2uh1j¯hjû ubj°)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”jºK2uh1j¯hjû ubjÅ)�”}”(hhh]”(jÊ)�”}”(hhh]”(jÏ)�”}”(hhh]”hÌ)�”}”(hŒ ``signaled``”h]”j;)�”}”(hj h]”hŒsignaled”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kühj ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhj ubjÏ)�”}”(hhh]”hÌ)�”}”(hŒ3On output, contains the current state of the event.”h]”hŒ3On output, contains the current state of the event.”…”�”}”(hj9 h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kýhj6 ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉhj ubjÊ)�”}”(hhh]”(jÏ)�”}”(hhh]”hÌ)�”}”(hŒ ``manual``”h]”j;)�”}”(hj[ h]”hŒmanual”…”�”}”(hj] h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjY ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´KþhjV ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjS ubjÏ)�”}”(hhh]”hÌ)�”}”(hŒLOn output, contains 1 if the event is a manual-reset event, and 0 otherwise.”h]”hŒLOn output, contains 1 if the event is a manual-reset event, and 0 otherwise.”…”�”}”(hjy h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Kÿhjv ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjS ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉhj ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjû ubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jªhjø ubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥hj½ h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1j\hj� h²hh³hÊh´Kõubeh}”(h]”h ]”(jxŒmacro”eh"]”h$]”h&]”j±jxj²j¯ j³j¯ j´‰jµ‰j¶‰uh1jh²hhj»h³Nh´Nubj )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒNTSYNC_IOC_MUTEX_KILL (C macro)”Œc.NTSYNC_IOC_MUTEX_KILL”hNt”auh1jhj»h²hh³hÊh´Nubj)�”}”(hhh]”(j)�”}”(hŒNTSYNC_IOC_MUTEX_KILL”h]”j%)�”}”(hŒNTSYNC_IOC_MUTEX_KILL”h]”j+)�”}”(hŒNTSYNC_IOC_MUTEX_KILL”h]”j1)�”}”(hjÆ h]”hŒNTSYNC_IOC_MUTEX_KILL”…”�”}”(hjÐ h²hh³Nh´Nubah}”(h]”h ]”j<ah"]”h$]”h&]”uh1j0hjÌ ubah}”(h]”h ]”(jCjDeh"]”h$]”h&]”jêjëuh1j*hjÈ h²hh³hÊh´Mubah}”(h]”h ]”h"]”h$]”h&]”jêjëjNˆuh1j$jOjPhjÄ h²hh³hÊh´Mubah}”(h]”j¿ ah ]”(jTjUeh"]”h$]”h&]”jYˆjZ)j[huh1jh³hÊh´MhjÁ h²hubj])�”}”(hhh]”(hÌ)�”}”(hX Mark a mutex as unowned and abandoned if it is owned by the given owner. Takes an input-only pointer to a 32-bit integer denoting the owner. If the owner is zero, the ioctl fails with ``EINVAL``. If the owner does not own the mutex, the function fails with ``EPERM``.”h]”(hŒ¸Mark a mutex as unowned and abandoned if it is owned by the given owner. Takes an input-only pointer to a 32-bit integer denoting the owner. If the owner is zero, the ioctl fails with ”…”�”}”(hjò h²hh³Nh´Nubj;)�”}”(hŒ ``EINVAL``”h]”hŒEINVAL”…”�”}”(hjú h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjò ubhŒ?. If the owner does not own the mutex, the function fails with ”…”�”}”(hjò h²hh³Nh´Nubj;)�”}”(hŒ ``EPERM``”h]”hŒEPERM”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjò ubhŒ.”…”�”}”(hjò h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhjï h²hubhÌ)�”}”(hŒ†Eligible threads waiting on the mutex will be woken as appropriate (and such waits will fail with ``EOWNERDEAD``, as described below).”h]”(hŒbEligible threads waiting on the mutex will be woken as appropriate (and such waits will fail with ”…”�”}”(hj$h²hh³Nh´Nubj;)�”}”(hŒ``EOWNERDEAD``”h]”hŒ EOWNERDEAD”…”�”}”(hj,h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj$ubhŒ, as described below).”…”�”}”(hj$h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M hjï h²hubeh}”(h]”h ]”h"]”h$]”h&]”uh1j\hjÁ h²hh³hÊh´Mubeh}”(h]”h ]”(jxŒmacro”eh"]”h$]”h&]”j±jxj²jMj³jMj´‰jµ‰j¶‰uh1jh²hhj»h³hÊh´Nubj )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒNTSYNC_IOC_WAIT_ANY (C macro)”Œc.NTSYNC_IOC_WAIT_ANY”hNt”auh1jhj»h²hh³hÊh´Nubj)�”}”(hhh]”(j)�”}”(hŒNTSYNC_IOC_WAIT_ANY”h]”j%)�”}”(hŒNTSYNC_IOC_WAIT_ANY”h]”j+)�”}”(hŒNTSYNC_IOC_WAIT_ANY”h]”j1)�”}”(hjdh]”hŒNTSYNC_IOC_WAIT_ANY”…”�”}”(hjnh²hh³Nh´Nubah}”(h]”h ]”j<ah"]”h$]”h&]”uh1j0hjjubah}”(h]”h ]”(jCjDeh"]”h$]”h&]”jêjëuh1j*hjfh²hh³hÊh´M ubah}”(h]”h ]”h"]”h$]”h&]”jêjëjNˆuh1j$jOjPhjbh²hh³hÊh´M ubah}”(h]”j]ah ]”(jTjUeh"]”h$]”h&]”jYˆjZ)j[huh1jh³hÊh´M hj_h²hubj])�”}”(hhh]”(hÌ)�”}”(hŒ“Poll on any of a list of objects, atomically acquiring at most one. Takes a pointer to struct :c:type:`ntsync_wait_args`, which is used as follows:”h]”(hŒ^Poll on any of a list of objects, atomically acquiring at most one. Takes a pointer to struct ”…”�”}”(hj�h²hh³Nh´Nubh)�”}”(hŒ:c:type:`ntsync_wait_args`”h]”j;)�”}”(hjšh]”hŒntsync_wait_args”…”�”}”(hjœh²hh³Nh´Nubah}”(h]”h ]”(jwjxŒc-type”eh"]”h$]”h&]”uh1j:hj˜ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j„Œ refdomain”jxŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jŠj�)�”}”j�]”j“)�”}”j–jdsbŒc.NTSYNC_IOC_WAIT_ANY”†”asbj™Œntsync_wait_args”uh1hh³hÊh´Khj�ubhŒ, which is used as follows:”…”�”}”(hj�h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj�h²hubj¦)�”}”(hhh]”j«)�”}”(hhh]”(j°)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”jºK2uh1j¯hjËubj°)�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”jºK2uh1j¯hjËubjÅ)�”}”(hhh]”(jÊ)�”}”(hhh]”(jÏ)�”}”(hhh]”hÌ)�”}”(hŒ ``timeout``”h]”j;)�”}”(hjëh]”hŒtimeout”…”�”}”(hjíh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjéubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhjæubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjãubjÏ)�”}”(hhh]”hÌ)�”}”(hX³Absolute timeout in nanoseconds. If ``NTSYNC_WAIT_REALTIME`` is set, the timeout is measured against the REALTIME clock; otherwise it is measured against the MONOTONIC clock in the caller's time namespace. If the timeout is equal to or earlier than the current time, the function returns immediately without sleeping. If ``timeout`` is U64_MAX, the function will sleep until an object is signaled, and will not fail with ``ETIMEDOUT``.”h]”(hŒ$Absolute timeout in nanoseconds. If ”…”�”}”(hj h²hh³Nh´Nubj;)�”}”(hŒ``NTSYNC_WAIT_REALTIME``”h]”hŒNTSYNC_WAIT_REALTIME”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj ubhX is set, the timeout is measured against the REALTIME clock; otherwise it is measured against the MONOTONIC clock in the caller’s time namespace. If the timeout is equal to or earlier than the current time, the function returns immediately without sleeping. If ”…”�”}”(hj h²hh³Nh´Nubj;)�”}”(hŒ ``timeout``”h]”hŒtimeout”…”�”}”(hj#h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj ubhŒY is U64_MAX, the function will sleep until an object is signaled, and will not fail with ”…”�”}”(hj h²hh³Nh´Nubj;)�”}”(hŒ ``ETIMEDOUT``”h]”hŒ ETIMEDOUT”…”�”}”(hj5h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj ubhŒ.”…”�”}”(hj h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhjubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjãubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉhjàubjÊ)�”}”(hhh]”(jÏ)�”}”(hhh]”hÌ)�”}”(hŒ``objs``”h]”j;)�”}”(hjah]”hŒobjs”…”�”}”(hjch²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj_ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj\ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjYubjÏ)�”}”(hhh]”hÌ)�”}”(hŒÍPointer to an array of ``count`` file descriptors (specified as an integer so that the structure has the same size regardless of architecture). If any object is invalid, the function fails with ``EINVAL``.”h]”(hŒPointer to an array of ”…”�”}”(hjh²hh³Nh´Nubj;)�”}”(hŒ ``count``”h]”hŒcount”…”�”}”(hj‡h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjubhŒ¢ file descriptors (specified as an integer so that the structure has the same size regardless of architecture). If any object is invalid, the function fails with ”…”�”}”(hjh²hh³Nh´Nubj;)�”}”(hŒ ``EINVAL``”h]”hŒEINVAL”…”�”}”(hj™h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjubhŒ.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj|ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjYubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉhjàubjÊ)�”}”(hhh]”(jÏ)�”}”(hhh]”hÌ)�”}”(hŒ ``count``”h]”j;)�”}”(hjÅh]”hŒcount”…”�”}”(hjÇh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjÃubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M"hjÀubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhj½ubjÏ)�”}”(hhh]”hÌ)�”}”(hŒ�Number of objects specified in the ``objs`` array. If greater than ``NTSYNC_MAX_WAIT_COUNT``, the function fails with ``EINVAL``.”h]”(hŒ#Number of objects specified in the ”…”�”}”(hjãh²hh³Nh´Nubj;)�”}”(hŒ``objs``”h]”hŒobjs”…”�”}”(hjëh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjãubhŒ array. If greater than ”…”�”}”(hjãh²hh³Nh´Nubj;)�”}”(hŒ``NTSYNC_MAX_WAIT_COUNT``”h]”hŒNTSYNC_MAX_WAIT_COUNT”…”�”}”(hjýh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjãubhŒ, the function fails with ”…”�”}”(hjãh²hh³Nh´Nubj;)�”}”(hŒ ``EINVAL``”h]”hŒEINVAL”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjãubhŒ.”…”�”}”(hjãh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M#hjàubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhj½ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉhjàubjÊ)�”}”(hhh]”(jÏ)�”}”(hhh]”hÌ)�”}”(hŒ ``owner``”h]”j;)�”}”(hj;h]”hŒowner”…”�”}”(hj=h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj9ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M&hj6ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhj3ubjÏ)�”}”(hhh]”hÌ)�”}”(hŒ¹Mutex owner identifier. If any object in ``objs`` is a mutex, the ioctl will attempt to acquire that mutex on behalf of ``owner``. If ``owner`` is zero, the ioctl fails with ``EINVAL``.”h]”(hŒ)Mutex owner identifier. If any object in ”…”�”}”(hjYh²hh³Nh´Nubj;)�”}”(hŒ``objs``”h]”hŒobjs”…”�”}”(hjah²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjYubhŒG is a mutex, the ioctl will attempt to acquire that mutex on behalf of ”…”�”}”(hjYh²hh³Nh´Nubj;)�”}”(hŒ ``owner``”h]”hŒowner”…”�”}”(hjsh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjYubhŒ. If ”…”�”}”(hjYh²hh³Nh´Nubj;)�”}”(hŒ ``owner``”h]”hŒowner”…”�”}”(hj…h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjYubhŒ is zero, the ioctl fails with ”…”�”}”(hjYh²hh³Nh´Nubj;)�”}”(hŒ ``EINVAL``”h]”hŒEINVAL”…”�”}”(hj—h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjYubhŒ.”…”�”}”(hjYh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M'hjVubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhj3ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉhjàubjÊ)�”}”(hhh]”(jÏ)�”}”(hhh]”hÌ)�”}”(hŒ ``index``”h]”j;)�”}”(hjÃh]”hŒindex”…”�”}”(hjÅh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjÁubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M+hj¾ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhj»ubjÏ)�”}”(hhh]”hÌ)�”}”(hŒŒOn success, contains the index (into ``objs``) of the object which was signaled. If ``alert`` was signaled instead, this contains ``count``.”h]”(hŒ%On success, contains the index (into ”…”�”}”(hjáh²hh³Nh´Nubj;)�”}”(hŒ``objs``”h]”hŒobjs”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjáubhŒ') of the object which was signaled. If ”…”�”}”(hjáh²hh³Nh´Nubj;)�”}”(hŒ ``alert``”h]”hŒalert”…”�”}”(hjûh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjáubhŒ% was signaled instead, this contains ”…”�”}”(hjáh²hh³Nh´Nubj;)�”}”(hŒ ``count``”h]”hŒcount”…”�”}”(hj h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjáubhŒ.”…”�”}”(hjáh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M,hjÞubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhj»ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉhjàubjÊ)�”}”(hhh]”(jÏ)�”}”(hhh]”hÌ)�”}”(hŒ ``alert``”h]”j;)�”}”(hj9h]”hŒalert”…”�”}”(hj;h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj7ubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M/hj4ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhj1ubjÏ)�”}”(hhh]”hÌ)�”}”(hŒ¾Optional event object file descriptor. If nonzero, this specifies an "alert" event object which, if signaled, will terminate the wait. If nonzero, the identifier must point to a valid event.”h]”hŒÂOptional event object file descriptor. If nonzero, this specifies an “alertâ€� event object which, if signaled, will terminate the wait. If nonzero, the identifier must point to a valid event.”…”�”}”(hjWh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M0hjTubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhj1ubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉhjàubjÊ)�”}”(hhh]”(jÏ)�”}”(hhh]”hÌ)�”}”(hŒ ``flags``”h]”j;)�”}”(hjyh]”hŒflags”…”�”}”(hj{h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjwubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M4hjtubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjqubjÏ)�”}”(hhh]”hÌ)�”}”(hŒ¡Zero or more flags. Currently the only flag is ``NTSYNC_WAIT_REALTIME``, which causes the timeout to be measured against the REALTIME clock instead of MONOTONIC.”h]”(hŒ/Zero or more flags. Currently the only flag is ”…”�”}”(hj—h²hh³Nh´Nubj;)�”}”(hŒ``NTSYNC_WAIT_REALTIME``”h]”hŒNTSYNC_WAIT_REALTIME”…”�”}”(hjŸh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj—ubhŒZ, which causes the timeout to be measured against the REALTIME clock instead of MONOTONIC.”…”�”}”(hj—h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M5hj”ubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjqubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉhjàubjÊ)�”}”(hhh]”(jÏ)�”}”(hhh]”hÌ)�”}”(hŒ``pad``”h]”j;)�”}”(hjËh]”hŒpad”…”�”}”(hjÍh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjÉubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M8hjÆubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjÃubjÏ)�”}”(hhh]”hÌ)�”}”(hŒUnused, must be set to zero.”h]”hŒUnused, must be set to zero.”…”�”}”(hjéh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M9hjæubah}”(h]”h ]”h"]”h$]”h&]”uh1jÎhjÃubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÉhjàubeh}”(h]”h ]”h"]”h$]”h&]”uh1jÄhjËubeh}”(h]”h ]”h"]”h$]”h&]”Œcols”Kuh1jªhjÈubah}”(h]”h ]”h"]”h$]”h&]”uh1j¥hj�h²hh³Nh´NubhÌ)�”}”(hX3This function attempts to acquire one of the given objects. If unable to do so, it sleeps until an object becomes signaled, subsequently acquiring it, or the timeout expires. In the latter case the ioctl fails with ``ETIMEDOUT``. The function only acquires one object, even if multiple objects are signaled.”h]”(hŒ×This function attempts to acquire one of the given objects. If unable to do so, it sleeps until an object becomes signaled, subsequently acquiring it, or the timeout expires. In the latter case the ioctl fails with ”…”�”}”(hjh²hh³Nh´Nubj;)�”}”(hŒ ``ETIMEDOUT``”h]”hŒ ETIMEDOUT”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjubhŒO. The function only acquires one object, even if multiple objects are signaled.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M;hj�h²hubhÌ)�”}”(hX­A semaphore is considered to be signaled if its count is nonzero, and is acquired by decrementing its count by one. A mutex is considered to be signaled if it is unowned or if its owner matches the ``owner`` argument, and is acquired by incrementing its recursion count by one and setting its owner to the ``owner`` argument. An auto-reset event is acquired by designaling it; a manual-reset event is not affected by acquisition.”h]”(hŒÆA semaphore is considered to be signaled if its count is nonzero, and is acquired by decrementing its count by one. A mutex is considered to be signaled if it is unowned or if its owner matches the ”…”�”}”(hj6h²hh³Nh´Nubj;)�”}”(hŒ ``owner``”h]”hŒowner”…”�”}”(hj>h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj6ubhŒc argument, and is acquired by incrementing its recursion count by one and setting its owner to the ”…”�”}”(hj6h²hh³Nh´Nubj;)�”}”(hŒ ``owner``”h]”hŒowner”…”�”}”(hjPh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hj6ubhŒr argument. An auto-reset event is acquired by designaling it; a manual-reset event is not affected by acquisition.”…”�”}”(hj6h²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MAhj�h²hubhÌ)�”}”(hXCAcquisition is atomic and totally ordered with respect to other operations on the same object. If two wait operations (with different ``owner`` identifiers) are queued on the same mutex, only one is signaled. If two wait operations are queued on the same semaphore, and a value of one is posted to it, only one is signaled.”h]”(hŒ†Acquisition is atomic and totally ordered with respect to other operations on the same object. If two wait operations (with different ”…”�”}”(hjhh²hh³Nh´Nubj;)�”}”(hŒ ``owner``”h]”hŒowner”…”�”}”(hjph²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjhubhŒ´ identifiers) are queued on the same mutex, only one is signaled. If two wait operations are queued on the same semaphore, and a value of one is posted to it, only one is signaled.”…”�”}”(hjhh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MIhj�h²hubhÌ)�”}”(hX?If an abandoned mutex is acquired, the ioctl fails with ``EOWNERDEAD``. Although this is a failure return, the function may otherwise be considered successful. The mutex is marked as owned by the given owner (with a recursion count of 1) and as no longer abandoned, and ``index`` is still set to the index of the mutex.”h]”(hŒ8If an abandoned mutex is acquired, the ioctl fails with ”…”�”}”(hjˆh²hh³Nh´Nubj;)�”}”(hŒ``EOWNERDEAD``”h]”hŒ EOWNERDEAD”…”�”}”(hj�h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjˆubhŒÈ. Although this is a failure return, the function may otherwise be considered successful. The mutex is marked as owned by the given owner (with a recursion count of 1) and as no longer abandoned, and ”…”�”}”(hjˆh²hh³Nh´Nubj;)�”}”(hŒ ``index``”h]”hŒindex”…”�”}”(hj¢h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjˆubhŒ( is still set to the index of the mutex.”…”�”}”(hjˆh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MOhj�h²hubhÌ)�”}”(hŒlThe ``alert`` argument is an "extra" event which can terminate the wait, independently of all other objects.”h]”(hŒThe ”…”�”}”(hjºh²hh³Nh´Nubj;)�”}”(hŒ ``alert``”h]”hŒalert”…”�”}”(hjÂh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjºubhŒc argument is an “extraâ€� event which can terminate the wait, independently of all other objects.”…”�”}”(hjºh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MUhj�h²hubhÌ)�”}”(hŒøIt is valid to pass the same object more than once, including by passing the same event in the ``objs`` array and in ``alert``. If a wakeup occurs due to that object being signaled, ``index`` is set to the lowest index corresponding to that object.”h]”(hŒ_It is valid to pass the same object more than once, including by passing the same event in the ”…”�”}”(hjÚh²hh³Nh´Nubj;)�”}”(hŒ``objs``”h]”hŒobjs”…”�”}”(hjâh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjÚubhŒ array and in ”…”�”}”(hjÚh²hh³Nh´Nubj;)�”}”(hŒ ``alert``”h]”hŒalert”…”�”}”(hjôh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjÚubhŒ8. If a wakeup occurs due to that object being signaled, ”…”�”}”(hjÚh²hh³Nh´Nubj;)�”}”(hŒ ``index``”h]”hŒindex”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjÚubhŒ9 is set to the lowest index corresponding to that object.”…”�”}”(hjÚh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´MXhj�h²hubhÌ)�”}”(hŒ=The function may fail with ``EINTR`` if a signal is received.”h]”(hŒThe function may fail with ”…”�”}”(hjh²hh³Nh´Nubj;)�”}”(hŒ ``EINTR``”h]”hŒEINTR”…”�”}”(hj&h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjubhŒ if a signal is received.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´M]hj�h²hubeh}”(h]”h ]”h"]”h$]”h&]”uh1j\hj_h²hh³hÊh´M ubeh}”(h]”h ]”(jxŒmacro”eh"]”h$]”h&]”j±jxj²jGj³jGj´‰jµ‰j¶‰uh1jh²hhj»h³hÊh´Nubj )�”}”(hhh]”h}”(h]”h ]”h"]”h$]”h&]”Œentries”]”(jŒNTSYNC_IOC_WAIT_ALL (C macro)”Œc.NTSYNC_IOC_WAIT_ALL”hNt”auh1jhj»h²hh³hÊh´Nubj)�”}”(hhh]”(j)�”}”(hŒNTSYNC_IOC_WAIT_ALL”h]”j%)�”}”(hŒNTSYNC_IOC_WAIT_ALL”h]”j+)�”}”(hŒNTSYNC_IOC_WAIT_ALL”h]”j1)�”}”(hj^h]”hŒNTSYNC_IOC_WAIT_ALL”…”�”}”(hjhh²hh³Nh´Nubah}”(h]”h ]”j<ah"]”h$]”h&]”uh1j0hjdubah}”(h]”h ]”(jCjDeh"]”h$]”h&]”jêjëuh1j*hj`h²hh³hÊh´M_ubah}”(h]”h ]”h"]”h$]”h&]”jêjëjNˆuh1j$jOjPhj\h²hh³hÊh´M_ubah}”(h]”jWah ]”(jTjUeh"]”h$]”h&]”jYˆjZ)j[huh1jh³hÊh´M_hjYh²hubj])�”}”(hhh]”(hÌ)�”}”(hŒüPoll on a list of objects, atomically acquiring all of them. Takes a pointer to struct :c:type:`ntsync_wait_args`, which is used identically to ``NTSYNC_IOC_WAIT_ANY``, except that ``index`` is always filled with zero on success if not woken via alert.”h]”(hŒWPoll on a list of objects, atomically acquiring all of them. Takes a pointer to struct ”…”�”}”(hjŠh²hh³Nh´Nubh)�”}”(hŒ:c:type:`ntsync_wait_args`”h]”j;)�”}”(hj”h]”hŒntsync_wait_args”…”�”}”(hj–h²hh³Nh´Nubah}”(h]”h ]”(jwjxŒc-type”eh"]”h$]”h&]”uh1j:hj’ubah}”(h]”h ]”h"]”h$]”h&]”Œrefdoc”j„Œ refdomain”jxŒreftype”Œtype”Œ refexplicit”‰Œrefwarn”‰jŠj�)�”}”j�]”j“)�”}”j–j^sbŒc.NTSYNC_IOC_WAIT_ALL”†”asbj™Œntsync_wait_args”uh1hh³hÊh´KhjŠubhŒ, which is used identically to ”…”�”}”(hjŠh²hh³Nh´Nubj;)�”}”(hŒ``NTSYNC_IOC_WAIT_ANY``”h]”hŒNTSYNC_IOC_WAIT_ANY”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjŠubhŒ, except that ”…”�”}”(hjŠh²hh³Nh´Nubj;)�”}”(hŒ ``index``”h]”hŒindex”…”�”}”(hjÎh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjŠubhŒ> is always filled with zero on success if not woken via alert.”…”�”}”(hjŠh²hh³Nh´Nubeh•C}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mahj‡h²hubhÌ)�”}”(hX"This function attempts to simultaneously acquire all of the given objects. If unable to do so, it sleeps until all objects become simultaneously signaled, subsequently acquiring them, or the timeout expires. In the latter case the ioctl fails with ``ETIMEDOUT`` and no objects are modified.”h]”(hŒøThis function attempts to simultaneously acquire all of the given objects. If unable to do so, it sleeps until all objects become simultaneously signaled, subsequently acquiring them, or the timeout expires. In the latter case the ioctl fails with ”…”�”}”(hjæh²hh³Nh´Nubj;)�”}”(hŒ ``ETIMEDOUT``”h]”hŒ ETIMEDOUT”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjæubhŒ and no objects are modified.”…”�”}”(hjæh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mfhj‡h²hubhÌ)�”}”(hXJObjects may become signaled and subsequently designaled (through acquisition by other threads) while this thread is sleeping. Only once all objects are simultaneously signaled does the ioctl acquire them and return. The entire acquisition is atomic and totally ordered with respect to other operations on any of the given objects.”h]”hXJObjects may become signaled and subsequently designaled (through acquisition by other threads) while this thread is sleeping. Only once all objects are simultaneously signaled does the ioctl acquire them and return. The entire acquisition is atomic and totally ordered with respect to other operations on any of the given objects.”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mlhj‡h²hubhÌ)�”}”(hX If an abandoned mutex is acquired, the ioctl fails with ``EOWNERDEAD``. Similarly to ``NTSYNC_IOC_WAIT_ANY``, all objects are nevertheless marked as acquired. Note that if multiple mutex objects are specified, there is no way to know which were marked as abandoned.”h]”(hŒ8If an abandoned mutex is acquired, the ioctl fails with ”…”�”}”(hjh²hh³Nh´Nubj;)�”}”(hŒ``EOWNERDEAD``”h]”hŒ EOWNERDEAD”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjubhŒ. Similarly to ”…”�”}”(hjh²hh³Nh´Nubj;)�”}”(hŒ``NTSYNC_IOC_WAIT_ANY``”h]”hŒNTSYNC_IOC_WAIT_ANY”…”�”}”(hj.h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjubhŒ�, all objects are nevertheless marked as acquired. Note that if multiple mutex objects are specified, there is no way to know which were marked as abandoned.”…”�”}”(hjh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mrhj‡h²hubhÌ)�”}”(hX…As with "any" waits, the ``alert`` argument is an "extra" event which can terminate the wait. Critically, however, an "all" wait will succeed if all members in ``objs`` are signaled, *or* if ``alert`` is signaled. In the latter case ``index`` will be set to ``count``. As with "any" waits, if both conditions are filled, the former takes priority, and objects in ``objs`` will be acquired.”h]”(hŒAs with “anyâ€� waits, the ”…”�”}”(hjFh²hh³Nh´Nubj;)�”}”(hŒ ``alert``”h]”hŒalert”…”�”}”(hjNh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjFubhŒ† argument is an “extraâ€� event which can terminate the wait. Critically, however, an “allâ€� wait will succeed if all members in ”…”�”}”(hjFh²hh³Nh´Nubj;)�”}”(hŒ``objs``”h]”hŒobjs”…”�”}”(hj`h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjFubhŒ are signaled, ”…”�”}”(hjFh²hh³Nh´NubhŒemphasis”“”)�”}”(hŒ*or*”h]”hŒor”…”�”}”(hjth²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1jrhjFubhŒ if ”…”�”}”(hjFh²hh³Nh´Nubj;)�”}”(hŒ ``alert``”h]”hŒalert”…”�”}”(hj†h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjFubhŒ! is signaled. In the latter case ”…”�”}”(hjFh²hh³Nh´Nubj;)�”}”(hŒ ``index``”h]”hŒindex”…”�”}”(hj˜h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjFubhŒ will be set to ”…”�”}”(hjFh²hh³Nh´Nubj;)�”}”(hŒ ``count``”h]”hŒcount”…”�”}”(hjªh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjFubhŒd. As with “anyâ€� waits, if both conditions are filled, the former takes priority, and objects in ”…”�”}”(hjFh²hh³Nh´Nubj;)�”}”(hŒ``objs``”h]”hŒobjs”…”�”}”(hj¼h²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjFubhŒ will be acquired.”…”�”}”(hjFh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mxhj‡h²hubhÌ)�”}”(hŒ×Unlike ``NTSYNC_IOC_WAIT_ANY``, it is not valid to pass the same object more than once, nor is it valid to pass the same object in ``objs`` and in ``alert``. If this is attempted, the function fails with ``EINVAL``.”h]”(hŒUnlike ”…”�”}”(hjÔh²hh³Nh´Nubj;)�”}”(hŒ``NTSYNC_IOC_WAIT_ANY``”h]”hŒNTSYNC_IOC_WAIT_ANY”…”�”}”(hjÜh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjÔubhŒe, it is not valid to pass the same object more than once, nor is it valid to pass the same object in ”…”�”}”(hjÔh²hh³Nh´Nubj;)�”}”(hŒ``objs``”h]”hŒobjs”…”�”}”(hjîh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjÔubhŒ and in ”…”�”}”(hjÔh²hh³Nh´Nubj;)�”}”(hŒ ``alert``”h]”hŒalert”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjÔubhŒ0. If this is attempted, the function fails with ”…”�”}”(hjÔh²hh³Nh´Nubj;)�”}”(hŒ ``EINVAL``”h]”hŒEINVAL”…”�”}”(hjh²hh³Nh´Nubah}”(h]”h ]”h"]”h$]”h&]”uh1j:hjÔubhŒ.”…”�”}”(hjÔh²hh³Nh´Nubeh}”(h]”h ]”h"]”h$]”h&]”uh1hËh³hÊh´Mhj‡h²hubeh}”(h]”h ]”h"]”h$]”h&]”uh1j\hjYh²hh³hÊh´M_ubeh}”(h]”h ]”(jxŒmacro”eh"]”h$]”h&]”j±jxj²j3j³j3j´‰jµ‰j¶‰uh1jh²hhj»h³hÊh´Nubeh}”(h]”Œioctl-reference”ah ]”h"]”Œioctl reference”ah$]”h&]”uh1hµhh·h²hh³hÊh´KFubeh}”(h]”Œ#nt-synchronization-primitive-driver”ah ]”h"]”Œ#nt synchronization primitive driver”ah$]”h&]”uh1hµhhh²hh³hÊh´Kubeh}”(h]”h ]”h"]”h$]”h&]”Œsource”hÊuh1hŒcurrent_source”NŒ current_line”NŒsettings”Œdocutils.frontend”ŒValues”“”)�”}”(hºNŒ generator”NŒ datestamp”NŒ source_link”NŒ source_url”NŒ toc_backlinks”jÎŒfootnote_backlinks”KŒ sectnum_xform”KŒstrip_comments”NŒstrip_elements_with_classes”NŒ strip_classes”NŒ report_level”KŒ halt_level”KŒexit_status_level”KŒdebug”NŒwarning_stream”NŒ traceback”ˆŒinput_encoding”Œ utf-8-sig”Œinput_encoding_error_handler”Œstrict”Œoutput_encoding”Œutf-8”Œoutput_encoding_error_handler”jiŒerror_encoding”Œutf-8”Œerror_encoding_error_handler”Œbackslashreplace”Œ language_code”Œen”Œrecord_dependencies”NŒconfig”NŒ id_prefix”hŒauto_id_prefix”Œid”Œ dump_settings”NŒdump_internals”NŒdump_transforms”NŒdump_pseudo_xml”NŒexpose_internals”NŒstrict_visitor”NŒ_disable_config”NŒ_source”hÊŒ _destination”NŒ _config_files”]”Œ7/var/lib/git/docbuild/linux/Documentation/docutils.conf”aŒfile_insertion_enabled”ˆŒ raw_enabled”KŒline_length_limit”M'Œpep_references”NŒ pep_base_url”Œhttps://peps.python.org/”Œpep_file_url_template”Œpep-%04d”Œrfc_references”NŒ rfc_base_url”Œ&https://datatracker.ietf.org/doc/html/”Œ tab_width”KŒtrim_footnote_reference_space”‰Œsyntax_highlight”Œlong”Œ smart_quotes”ˆŒsmartquotes_locales”]”Œcharacter_level_inline_markup”‰Œdoctitle_xform”‰Œ docinfo_xform”KŒsectsubtitle_xform”‰Œ image_loading”Œlink”Œembed_stylesheet”‰Œcloak_email_addresses”ˆŒsection_self_link”‰Œenv”NubŒreporter”NŒindirect_targets”]”Œsubstitution_defs”}”Œsubstitution_names”}”Œrefnames”}”Œrefids”}”Œnameids”}”(jDjAj‘jŽj¸jµj<j9uŒ nametypes”}”(jD‰j‘‰j¸‰j<‰uh}”(jAh·jŽh÷jµj”j9j»jj jÃjÈj]jbj«j°j%j*j»jÀj# j( j} j‚ jå jê j j j� j’ j¿ jÄ j]jbjWj\uŒ footnote_refs”}”Œ citation_refs”}”Œ autofootnotes”]”Œautofootnote_refs”]”Œsymbol_footnotes”]”Œsymbol_footnote_refs”]”Œ footnotes”]”Œ citations”]”Œautofootnote_start”KŒsymbol_footnote_start”KŒ id_counter”Œ collections”ŒCounter”“”}”…”R”Œparse_messages”]”Œtransform_messages”]”Œ transformer”NŒ include_log”]”Œ decoration”Nh²hub.