Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
5602 | serge | 1 | format MS COFF |
2 | use32 |
||
3 | |||
4 | MUTEX.lock equ 0 |
||
5 | MUTEX.handle equ 4 |
||
6 | |||
7 | section '.text' align 16 code readable executable |
||
8 | |||
9 | public @mutex_lock@4 |
||
10 | |||
11 | @mutex_lock@4: |
||
12 | |||
13 | mov eax, 1 |
||
14 | lock xadd [ecx+MUTEX.lock], eax |
||
15 | test eax, eax |
||
16 | jnz .slow |
||
17 | ret |
||
18 | .slow: |
||
19 | push ebx |
||
20 | push esi |
||
21 | push edi |
||
22 | mov edi, ecx |
||
23 | mov ecx, [edi+MUTEX.handle] |
||
24 | mov edx, 2 |
||
25 | mov ebx, edx |
||
26 | xor esi, esi |
||
27 | align 4 |
||
28 | .again: |
||
29 | mov eax, edx |
||
30 | xchg eax, [edi+MUTEX.lock] |
||
31 | test eax, eax |
||
32 | jz .ok |
||
33 | |||
34 | mov eax, 77 |
||
35 | int 0x40 |
||
36 | jmp .again |
||
37 | .ok: |
||
38 | pop edi |
||
39 | pop esi |
||
40 | pop ebx |
||
41 | ret |