Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 2401 → Rev 2402

/kernel/branches/net/network/socket.inc
22,7 → 22,7
PrevPtr dd ? ; pointer to previous socket in list
Number dd ? ; socket number
 
lock dd ? ; lock mutex
mutex MUTEX
 
PID dd ? ; application process id
Domain dd ? ; INET/UNIX/..
450,8 → 450,10
 
align 4
.udp:
lea ebx, [eax + SOCKET.lock]
call wait_mutex
pusha
lea ecx, [eax + SOCKET.mutex]
call mutex_lock
popa
 
pushw [edx + 2]
pop [eax + UDP_SOCKET.RemotePort]
470,14 → 472,18
init_queue (eax + SOCKET_QUEUE_LOCATION) ; Set up data receiving queue
pop eax
 
mov [eax + SOCKET.lock], 0
lea ecx, [eax + SOCKET.mutex]
call mutex_unlock
 
mov dword [esp+32], 0
ret
 
align 4
.tcp:
lea ebx, [eax + SOCKET.lock]
call wait_mutex
pusha
lea ecx, [eax + SOCKET.mutex]
call mutex_lock
popa
 
pushw [edx + 2]
pop [eax + TCP_SOCKET.RemotePort]
509,7 → 515,10
lea eax, [ebx + STREAM_SOCKET.rcv]
call SOCKET_ring_create
 
mov [ebx + SOCKET.lock], 0
pusha
lea ecx, [ebx + SOCKET.mutex]
call mutex_unlock
popa
 
mov eax, ebx
call TCP_output
519,8 → 528,10
 
align 4
.ip:
lea ebx, [eax + SOCKET.lock]
call wait_mutex
pusha
lea ecx, [eax + SOCKET.mutex]
call mutex_lock
popa
 
pushd [edx + 4]
pop [eax + IP_SOCKET.RemoteIP]
529,7 → 540,9
init_queue (eax + SOCKET_QUEUE_LOCATION) ; Set up data receiving queue
pop eax
 
mov [eax + SOCKET.lock], 0
lea ecx, [eax + SOCKET.mutex]
call mutex_unlock
 
mov dword [esp+32], 0
ret
 
1051,12 → 1064,22
 
DEBUGF 1,"SOCKET_input: queued packet successfully\n"
add esp, sizeof.socket_queue_entry
mov [eax + SOCKET.lock], 0
 
pusha
lea ecx, [eax + SOCKET.mutex]
call mutex_unlock
popa
 
jmp SOCKET_notify_owner
 
.full:
DEBUGF 2,"SOCKET_input: socket %x is full!\n", eax
mov [eax + SOCKET.lock], 0
 
pusha
lea ecx, [eax + SOCKET.mutex]
call mutex_unlock
popa
 
call kernel_free
add esp, 8
 
1364,11 → 1387,18
 
test ebx, ebx
jz @f
add ebx, SOCKET.lock ; lock the next socket
call wait_mutex
sub ebx, SOCKET.lock
 
pusha
lea ecx, [ebx + SOCKET.mutex]
call mutex_lock
popa
 
mov [ebx + SOCKET.PrevPtr], eax
mov [ebx + SOCKET.lock], 0 ; and unlock it again
 
pusha
lea ecx, [ebx + SOCKET.mutex]
call mutex_unlock
popa
@@:
 
mov [net_sockets + SOCKET.NextPtr], eax
1398,9 → 1428,12
jz .error
 
push ebx
lea ebx, [eax + SOCKET.lock]
call wait_mutex
 
pusha
lea ecx, [eax + SOCKET.mutex]
call mutex_lock
popa
 
DEBUGF 1, "SOCKET_free: freeing socket..\n"
 
cmp [eax + SOCKET.Domain], AF_INET4