Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
6303 | 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 | @mutex_lock_timeout@8 |
||
10 | push esi |
||
11 | mov esi, edx |
||
12 | push ebx |
||
13 | mov edx, 1 |
||
14 | lock xadd [ecx+MUTEX.lock], edx |
||
15 | mov eax, 1 |
||
16 | test edx, edx |
||
17 | jnz .slow |
||
18 | .ok: |
||
19 | pop ebx |
||
20 | pop esi |
||
21 | retn |
||
22 | align 4 |
||
23 | .slow: |
||
24 | mov edx, 2 |
||
25 | xchg edx, [ecx+MUTEX.lock] |
||
26 | xor eax, eax |
||
27 | test edx, edx |
||
28 | jz .ok |
||
29 | |||
30 | mov edx, 2 |
||
31 | mov ecx, [ecx+MUTEX.handle] |
||
32 | mov al, 77 |
||
33 | mov ebx, edx |
||
34 | int 0x40 |
||
35 | add eax, 1 |
||
36 | pop ebx |
||
37 | pop esi |
||
38 | ret |
||
39 |