fix double-unlock in free(); make free() always save edi; update test

git-svn-id: svn://kolibrios.org@3126 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
CleverMouse 2012-12-17 15:54:19 +00:00
parent 17d524a010
commit a221c289a3
2 changed files with 30 additions and 18 deletions

View File

@ -341,10 +341,9 @@ free:
; insert_chunk(p,psize);
mov eax, esi
pop esi
mov ecx, edi
pop edi
jmp insert_chunk
call insert_chunk
jmp .fail2
.unl_large:
; unlink_large_chunk((tchunkptr)next);
@ -364,10 +363,9 @@ free:
; insert_chunk(p,psize);
mov eax, esi
pop esi
mov ecx, edi
pop edi
jmp insert_chunk
call insert_chunk
jmp .fail2
.fix_next:
; (p+psize)->prev_foot = psize;
@ -386,10 +384,9 @@ free:
; insert_chunk(p,psize);
mov eax, esi
pop esi
mov ecx, edi
pop edi
jmp insert_chunk
call insert_chunk
jmp .fail2
; param
; ecx = chunk
@ -418,15 +415,11 @@ insert_chunk:
mov [esi+8], edx ;P->fd = F
mov [esi+12], eax ;P->bk = B
pop esi
mov ecx, mst.mutex
call mutex_unlock
ret
.large:
mov ebx, eax
call insert_large_chunk
pop esi
mov ecx, mst.mutex
call mutex_unlock
ret

View File

@ -50,12 +50,12 @@ run_test2:
ret
run_test3:
; 1024000 times run random operation.
; 1024 times run random operation.
; Randomly select malloc(random size from 1 to 1023)
; or free(random of previously allocated areas)
mov edi, 0x12345678
xor esi, esi ; 0 areas allocated
mov ebx, 1024000
mov ebx, 1024
.loop:
imul edi, 1103515245
add edi, 12345
@ -78,7 +78,11 @@ run_test3:
push eax
; mov ecx, [saved_state_num]
; mov [saved_state+ecx*8], eax
push edi
call malloc_with_test
pop ecx
cmp ecx, edi
jnz edi_destroyed
; mov ecx, [saved_state_num]
; mov [saved_state+ecx*8+4], eax
; inc [saved_state_num]
@ -113,7 +117,11 @@ run_test3:
jnz memory_destroyed
pop eax edi
push ebx edx
push edi
call free
pop ecx
cmp ecx, edi
jnz edi_destroyed
pop edx ebx
dec esi
pop eax ecx
@ -150,8 +158,14 @@ malloc_with_test:
ret
; Stubs for kernel procedures used by heap code
wait_mutex:
inc dword [ebx]
mutex_init:
and dword [ecx], 0
ret
mutex_lock:
inc dword [ecx]
ret
mutex_unlock:
dec dword [ecx]
ret
kernel_alloc:
@ -174,7 +188,7 @@ generic_malloc_fail:
jmp error_with_code
check_mutex:
cmp [mst.mutex], 0
cmp dword [mst.mutex], 0
jnz @f
ret
@@:
@ -195,6 +209,10 @@ memory_destroyed:
mov eax, 5
jmp error_with_code
edi_destroyed:
mov eax, 6
jmp error_with_code
error_with_code:
mov edx, saved_state_num
; eax = error code
@ -208,6 +226,7 @@ error_with_code:
; Include main heap code
include '../proc32.inc'
include '../struct.inc'
include '../const.inc'
include 'malloc.inc'