/kernel/trunk/core/dll.inc |
---|
1426,3 → 1426,52 |
call free ;release object memory |
ret |
; param |
; ecx= size |
align 4 |
create_object: |
push esi |
push edi |
pushfd |
cli |
mov esi, [current_process] |
mov eax, [esi+PROC.ht_free] |
mov edi, [esi+PROC.ht_next] |
dec eax |
js .err0 |
mov [esi+PROC.ht_free], eax |
mov eax, [esi+PROC.htab+edi*4] |
mov [esi+PROC.ht_next], eax |
popfd |
mov eax, ecx |
call malloc |
test eax, eax |
jz .err1 |
mov [eax+FUTEX.handle], edi |
mov [esi+PROC.htab+edi*4], eax |
pop edi |
pop esi |
ret |
.err1: |
pushfd |
cli |
mov eax, [esi+PROC.ht_next] |
mov [esi+PROC.htab+edi*4], eax |
mov [esi+PROC.ht_next], edi |
inc [esi+PROC.ht_free] |
.err0: |
popfd |
pop edi |
pop esi |
xor eax, eax |
ret |
/kernel/trunk/core/taskman.inc |
---|
472,7 → 472,7 |
mov [process], eax |
lea edi, [eax+PROC.heap_lock] |
mov ecx, (PROC.ht_next-PROC.heap_lock)/4 |
mov ecx, (PROC.ht_free-PROC.heap_lock)/4 |
list_init eax |
add eax, PROC.thr_list |
482,7 → 482,11 |
cld |
rep stosd |
mov [edi], dword (PROC.pdt_0 - PROC.htab)/4 - 3 |
mov [edi+4], dword 3 ;reserve handles for stdin stdout and stderr |
mov ecx, (PROC.pdt_0 - PROC.htab)/4 |
add edi, 8 |
inc eax |
@@: |
stosd |
inc eax |
489,7 → 493,6 |
cmp eax, ecx |
jbe @B |
mov [edi-4096+PROC.ht_next], 3 ;reserve handles for stdin stdout and stderr |
mov eax, edi |
call get_pg_addr |
mov [edi-4096+PROC.pdt_0_phys], eax |