forked from KolibriOS/kolibrios
Run TCP input code in a separate thread.
git-svn-id: svn://kolibrios.org@3389 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
de440713d1
commit
3717c3370d
@ -264,8 +264,6 @@ stack_handler:
|
|||||||
cmp [NET_RUNNING], 0
|
cmp [NET_RUNNING], 0
|
||||||
je .exit
|
je .exit
|
||||||
|
|
||||||
call TCP_process_input ; de-queue TCP ragments and process them
|
|
||||||
|
|
||||||
; Test for 10ms tick
|
; Test for 10ms tick
|
||||||
mov eax, [timer_ticks]
|
mov eax, [timer_ticks]
|
||||||
cmp eax, [net_10ms]
|
cmp eax, [net_10ms]
|
||||||
|
@ -137,6 +137,7 @@ uglobal
|
|||||||
; TCP_bytes_tx rq MAX_NET_DEVICES
|
; TCP_bytes_tx rq MAX_NET_DEVICES
|
||||||
TCP_sequence_num dd ?
|
TCP_sequence_num dd ?
|
||||||
TCP_queue rd TCP_QUEUE_SIZE*sizeof.TCP_queue_entry/4
|
TCP_queue rd TCP_QUEUE_SIZE*sizeof.TCP_queue_entry/4
|
||||||
|
TCP_input_event dd ?
|
||||||
endg
|
endg
|
||||||
|
|
||||||
|
|
||||||
@ -159,6 +160,11 @@ macro TCP_init {
|
|||||||
|
|
||||||
init_queue TCP_queue
|
init_queue TCP_queue
|
||||||
|
|
||||||
|
push 1
|
||||||
|
pop ebx
|
||||||
|
mov ecx, TCP_process_input
|
||||||
|
call new_sys_threads
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -49,6 +49,14 @@ TCP_input:
|
|||||||
popf
|
popf
|
||||||
|
|
||||||
add esp, sizeof.TCP_queue_entry
|
add esp, sizeof.TCP_queue_entry
|
||||||
|
|
||||||
|
mov [check_idle_semaphore], 5
|
||||||
|
xor edx, edx
|
||||||
|
mov eax, [TCP_input_event]
|
||||||
|
mov ebx, [eax + EVENT.id]
|
||||||
|
xor esi, esi
|
||||||
|
call raise_event
|
||||||
|
|
||||||
ret
|
ret
|
||||||
|
|
||||||
.fail:
|
.fail:
|
||||||
@ -60,7 +68,7 @@ TCP_input:
|
|||||||
add esp, sizeof.TCP_queue_entry - 8
|
add esp, sizeof.TCP_queue_entry - 8
|
||||||
call kernel_free
|
call kernel_free
|
||||||
add esp, 4
|
add esp, 4
|
||||||
.done:
|
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
||||||
@ -68,8 +76,16 @@ TCP_input:
|
|||||||
align 4
|
align 4
|
||||||
TCP_process_input:
|
TCP_process_input:
|
||||||
|
|
||||||
|
xor esi, esi
|
||||||
|
mov ecx, MANUAL_DESTROY
|
||||||
|
call create_event
|
||||||
|
mov [TCP_input_event], eax
|
||||||
|
|
||||||
.loop:
|
.loop:
|
||||||
get_from_queue TCP_queue, TCP_QUEUE_SIZE, sizeof.TCP_queue_entry, TCP_input.done
|
mov eax, [TCP_input_event]
|
||||||
|
call wait_event
|
||||||
|
|
||||||
|
get_from_queue TCP_queue, TCP_QUEUE_SIZE, sizeof.TCP_queue_entry, .loop
|
||||||
|
|
||||||
push .loop
|
push .loop
|
||||||
push [esi + TCP_queue_entry.buffer_size]
|
push [esi + TCP_queue_entry.buffer_size]
|
||||||
|
Loading…
Reference in New Issue
Block a user