Bugfix double Trheads
If a Client connect comes from the same Session multiple Threads and Allocate / Freememory Problems. Debug for Thread Cleanup (ltls:CloseTLS Problems) Currently witouth a fix...
This commit is contained in:
parent
f5521f2e39
commit
5f81ea4ebf
1 changed files with 56 additions and 25 deletions
77
lweb.pbi
77
lweb.pbi
|
@ -310,17 +310,21 @@ Module lhs_web
|
|||
client_id = ltls::WaitTLSSocket(network_server_id)
|
||||
Debug "New HTTPS Client:"+Str(client_id)
|
||||
If client_id > 0
|
||||
If count_HTTPS_client < conf_max_HTTPS_clients
|
||||
m_clients(Str(client_id))\client_id = client_id
|
||||
m_clients(Str(client_id))\client_do_cli = #CLI_DO_WaitDataReceive
|
||||
m_clients(Str(client_id))\client_do_srv = #SRV_DO_DataReceive
|
||||
m_clients(Str(client_id))\client_type = #client_HTTPS
|
||||
;Thread erstellen
|
||||
m_clients(Str(client_id))\client_thread = CreateThread(@client(), client_id)
|
||||
count_client(#client_HTTPS, #client_add)
|
||||
If m_clients(Str(client_id))\client_id = client_id
|
||||
Debug "Client Thread for socket already exist :"+Str(client_id)
|
||||
Else
|
||||
Debug "Max HTTPS Clients reached..."
|
||||
ltls::CloseTLSSocket(client_id)
|
||||
If count_HTTPS_client < conf_max_HTTPS_clients
|
||||
m_clients(Str(client_id))\client_id = client_id
|
||||
m_clients(Str(client_id))\client_do_cli = #CLI_DO_WaitDataReceive
|
||||
m_clients(Str(client_id))\client_do_srv = #SRV_DO_DataReceive
|
||||
m_clients(Str(client_id))\client_type = #client_HTTPS
|
||||
;Thread erstellen
|
||||
m_clients(Str(client_id))\client_thread = CreateThread(@client(), client_id)
|
||||
count_client(#client_HTTPS, #client_add)
|
||||
Else
|
||||
Debug "Max HTTPS Clients reached..."
|
||||
ltls::CloseTLSSocket(client_id)
|
||||
EndIf
|
||||
EndIf
|
||||
Else
|
||||
Break
|
||||
|
@ -343,17 +347,21 @@ Module lhs_web
|
|||
client_id = lsocket::WaitSocket(network_server_id)
|
||||
Debug "New HTTP Client:"+Str(client_id)
|
||||
If client_id > 0
|
||||
If count_HTTP_client < conf_max_HTTP_clients
|
||||
m_clients(Str(client_id))\client_id = client_id
|
||||
m_clients(Str(client_id))\client_do_cli = #CLI_DO_WaitDataReceive
|
||||
m_clients(Str(client_id))\client_do_srv = #SRV_DO_DataReceive
|
||||
m_clients(Str(client_id))\client_type = #client_HTTP
|
||||
;Thread erstellen
|
||||
m_clients(Str(client_id))\client_thread = CreateThread(@client(), client_id)
|
||||
count_client(#client_HTTP, #client_add)
|
||||
If m_clients(Str(client_id))\client_id = client_id
|
||||
Debug "Client Thread for socket already exist :"+Str(client_id)
|
||||
Else
|
||||
Debug "Max HTTP Clients reached..."
|
||||
lsocket::CloseSocket(client_id)
|
||||
If count_HTTP_client < conf_max_HTTP_clients
|
||||
m_clients(Str(client_id))\client_id = client_id
|
||||
m_clients(Str(client_id))\client_do_cli = #CLI_DO_WaitDataReceive
|
||||
m_clients(Str(client_id))\client_do_srv = #SRV_DO_DataReceive
|
||||
m_clients(Str(client_id))\client_type = #client_HTTP
|
||||
;Thread erstellen
|
||||
m_clients(Str(client_id))\client_thread = CreateThread(@client(), client_id)
|
||||
count_client(#client_HTTP, #client_add)
|
||||
Else
|
||||
Debug "Max HTTP Clients reached..."
|
||||
lsocket::CloseSocket(client_id)
|
||||
EndIf
|
||||
EndIf
|
||||
Else
|
||||
Break
|
||||
|
@ -533,10 +541,12 @@ Module lhs_web
|
|||
Debug "Response Content:"+Response(#cha_R_ResponseContentType)
|
||||
Select Response(#cha_R_ResponseContentType)
|
||||
Case #response_Memory
|
||||
Debug "Response Memory"
|
||||
thread_data_size = Val(Response(#cha_R_MemorySize))
|
||||
thread_temp_cache_memory = Val(Response(#cha_R_MemoryAdress))
|
||||
thread_type = Response(#cha_R_ResponseType)
|
||||
Case #response_string
|
||||
Debug "Response String"
|
||||
thread_temp_decode_memory = AllocateMemory(StringByteLength(Response(#cha_R_StringBase64)))
|
||||
thread_data_size = Base64Decoder(Response(#cha_R_StringBase64), thread_temp_decode_memory, StringByteLength(Response(#cha_R_StringBase64)))
|
||||
thread_temp_cache_memory = AllocateMemory(thread_data_size)
|
||||
|
@ -781,9 +791,16 @@ Module lhs_web
|
|||
EndIf
|
||||
If thread_temp_cache_memory <> 0 And thread_buffer_offset <> 0 And thread_data_size <> 0
|
||||
CopyMemory(thread_temp_cache_memory, thread_buffer_offset, thread_data_size)
|
||||
Debug thread_temp_cache_memory
|
||||
FreeMemory(thread_temp_cache_memory)
|
||||
thread_temp_cache_memory=0
|
||||
Else
|
||||
Debug "File Buffer Troubles."
|
||||
If thread_temp_cache_memory = 0 : Debug "thread_temp_cache_memory = 0" : EndIf
|
||||
If thread_buffer_offset = 0 : Debug "thread_buffer_offset = 0" : EndIf
|
||||
If thread_data_size = 0 : Debug "thread_data_size = 0" : EndIf
|
||||
thread_alive = #False
|
||||
Break 2
|
||||
EndIf
|
||||
|
||||
; EndIf
|
||||
|
@ -810,6 +827,8 @@ Module lhs_web
|
|||
sent_total + sent
|
||||
Else
|
||||
Debug "HTTPS Sent error:"+ltls::ErrorTLSCli(thread_cli_id)
|
||||
thread_alive = #False
|
||||
Break 2
|
||||
EndIf
|
||||
|
||||
Until sent_length <= 0
|
||||
|
@ -828,6 +847,8 @@ Module lhs_web
|
|||
sent_total + sent
|
||||
Else
|
||||
Debug "HTTP Sent error:"+Str(sent)
|
||||
thread_alive = #False
|
||||
Break 2
|
||||
EndIf
|
||||
|
||||
Until sent_length <= 0
|
||||
|
@ -861,25 +882,35 @@ Module lhs_web
|
|||
;}
|
||||
|
||||
Until thread_alive = #False
|
||||
Debug "Thread should now die..."
|
||||
ResetList(m_clients(Str(thread_cli_id))\datenbuffer())
|
||||
Debug "Thread kill all Initialized Memory buffers:"
|
||||
While NextElement(m_clients(Str(thread_cli_id))\datenbuffer())
|
||||
If m_clients(Str(thread_cli_id))\datenbuffer()\Initialized
|
||||
Debug "Kill:"+Str(m_clients(Str(thread_cli_id))\datenbuffer()\Buffer)+ " ..."
|
||||
FreeMemory(m_clients(Str(thread_cli_id))\datenbuffer()\Buffer)
|
||||
DeleteElement(m_clients(Str(thread_cli_id))\datenbuffer())
|
||||
Debug "Freed and removed"
|
||||
Else
|
||||
Debug "Remove element from List with uninitialized Memory ID: "+Str(m_clients(Str(thread_cli_id))\datenbuffer()\Buffer)
|
||||
DeleteElement(m_clients(Str(thread_cli_id))\datenbuffer())
|
||||
Debug "Removed"
|
||||
EndIf
|
||||
Wend
|
||||
If m_clients(Str(thread_cli_id))\client_type = #client_HTTPS
|
||||
ltls::CloseTLSSocket(thread_cli_id)
|
||||
Debug "Kill HTTPS Socket:" + Str(thread_cli_id)
|
||||
;ltls::CloseTLSSocket(thread_cli_id)
|
||||
count_client(#client_HTTPS, #client_remove)
|
||||
Debug "Killed."
|
||||
Else
|
||||
Debug "Kill HTTP Socket:" + Str(thread_cli_id)
|
||||
lsocket::CloseSocket(thread_cli_id)
|
||||
count_client(#client_HTTP, #client_remove)
|
||||
Debug "Killed."
|
||||
EndIf
|
||||
|
||||
Debug "Remove Client from map..."
|
||||
DeleteMapElement(m_clients(), Str(thread_cli_id))
|
||||
Debug "Thread Beendet."
|
||||
Debug "Removed and thread now died."
|
||||
|
||||
EndProcedure
|
||||
|
||||
|
|
Loading…
Reference in a new issue