Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 2146 → Rev 2145

/kernel/trunk/core/sched.inc
221,7 → 221,8
 
struc MUTEX_WAITER
{
.list LHEAD
.next rd 1
.prev rd 1
.task rd 1
.sizeof:
};
234,9 → 235,10
 
align 4
mutex_init:
mov [ecx+MUTEX.wait.next], ecx
mov [ecx+MUTEX.wait.prev], ecx
lea eax, [ecx+MUTEX.next]
mov [ecx+MUTEX.count],1
mov [ecx+MUTEX.next], eax
mov [ecx+MUTEX.prev], eax
ret
 
 
251,10 → 253,17
pushfd
cli
 
push esi
sub esp, MUTEX_WAITER.sizeof
 
list_add_tail esp, ecx ;esp= new waiter, ecx= list head
mov eax, [ecx+MUTEX.prev]
lea esi, [ecx+MUTEX.next]
 
mov [ecx+MUTEX.prev], esp
mov [esp+MUTEX_WAITER.next], esi
mov [esp+MUTEX_WAITER.prev], eax
mov [eax], esp
 
mov edx, [TASK_BASE]
mov [esp+MUTEX_WAITER.task], edx
 
269,12 → 278,12
call change_task
jmp .forever
@@:
mov edx, [esp+MUTEX_WAITER.list.next]
mov eax, [esp+MUTEX_WAITER.list.prev]
mov edx, [esp+MUTEX_WAITER.next]
mov eax, [esp+MUTEX_WAITER.prev]
 
mov [eax+MUTEX_WAITER.list.next], edx
mov [edx+MUTEX_WAITER.list.prev], eax
cmp [ecx+MUTEX.wait.next], ecx
mov [eax+MUTEX_WAITER.next], edx
cmp [ecx+MUTEX.next], esi
mov [edx+MUTEX_WAITER.prev], eax
jne @F
 
mov [ecx+MUTEX.count], 0
281,6 → 290,7
@@:
add esp, MUTEX_WAITER.sizeof
 
pop esi
popfd
.done:
ret
293,8 → 303,9
pushfd
cli
 
mov eax, [ecx+MUTEX.wait.next]
cmp eax, ecx
lea edx, [ecx+MUTEX.next]
mov eax, [edx]
cmp eax, edx
mov [ecx+MUTEX.count], 1
je @F