Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  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
  42.