Line 53: |
Line 53: |
| | 0x18 || [[#svcWaitSynchronization]] || X1=handles_ptr, W2=num_handles. X3=timeout || W0=result, W1=handle_idx | | | 0x18 || [[#svcWaitSynchronization]] || X1=handles_ptr, W2=num_handles. X3=timeout || W0=result, W1=handle_idx |
| |- | | |- |
− | | 0x19 || svcCancelSynchronization || W0=thread_handle || W0=result | + | | 0x19 || [[#svcCancelSynchronization]] || W0=thread_handle || W0=result |
| |- | | |- |
| | 0x1A || svcArbitrateLock || W0=cur_thread_handle, X1=ptr, W2=req_thread_handle || | | | 0x1A || svcArbitrateLock || W0=cur_thread_handle, X1=ptr, W2=req_thread_handle || |
Line 665: |
Line 665: |
| | | |
| '''0xec01:''' Interrupted. Returns when another thread uses [[#svcCancelSynchronization]] to cancel this thread. | | '''0xec01:''' Interrupted. Returns when another thread uses [[#svcCancelSynchronization]] to cancel this thread. |
| + | |
| + | == svcCancelSynchronization == |
| + | |
| + | <div style="display: inline-block;"> |
| + | {| class="wikitable" border="1" |
| + | |- |
| + | ! Argument || Type || Name |
| + | |- |
| + | | (In) W0 || Handle<Thread> || Handle |
| + | |- |
| + | | (Out) W0 || [[#Result]] || Ret |
| + | |} |
| + | </div> |
| + | |
| + | If the referenced thread is currently in an [[#svcWaitSynchronization]] call, that call will be interrupted and return 0xec01. |
| + | If that thread is not currently executing [[#svcWaitSynchronization]], the next call to [[#svcWaitSynchronization]] will return 0xec01. |
| + | |
| + | === Result codes === |
| + | |
| + | '''0x0:''' Success. The thread was either interrupted or has had its flag set. |
| + | |
| + | '''0xe401:''' Invalid handle. The handle given was either invalid or not a thread handle. |
| | | |
| == svcGetSystemTick == | | == svcGetSystemTick == |