[Gambas-user] HTTPClient freeze after 40 mins with Gambas 3.18.4

Benoît Minisini benoit.minisini at gambas-basic.org
Sat Sep 30 12:59:30 CEST 2023


Le 30/09/2023 à 12:50, Christof Thalhofer a écrit :
> Hello Fabien, hello Benoît,
> 
> Am 30.09.23 um 11:12 schrieb Fabien Bodard:
> 
>> Can you try to change your get function
>>
>> Like This :
>>
>>    Public Function Get(sUrl as String) As String
>>
>>       Dim sBuffer As String
>>
>>       If sUrl Then
>>           $H = New HttpClient As "HClient"
>>           $H.Url = sUrl
>>           $H.Async = False
>>           $H.Timeout = 600
>>
>>           $H.Get
>>
>>           ' Success - read the data
>>           If Lof($H) Then sBuffer = Read #$H, Lof($H)
>>
>>           If $H.Code  299 Then
>>               Error.Raise("Degapp Fehler – Code " & $H.Code & " " & 
>> sBuffer)
>>           Endif
>>
>>           If $H.Status < 0 Then
>>               Error.Raise("Connection zu Degapp kaputt. Curl Status (" &
>> $H.Status & ") kleiner 0.")
>>           Else
>>               $H.Close
>>               Return sBuffer
>>           End If
>>       Else
>>           Error.Raise("Der Pfad für Degapp ist nicht definiert.")
>>       Endif
>>
>>     Wait
>>
>>   End
>>
>>
>> In This case any call to get generate a new HttpClient and a Wait call
> 
> Thank you! I had the same idea this morning and did a similar thing 
> (except the 'Wait', but now I tried it). Meanwhile I have an extra 
> branch of my software just to investigate this bug.
> 
> No change in behavior, it still leaks file descriptors ...
> 
> but now I tested further. With this the leak is gone!:
> 
>> 'For testing: Get with HttpClient defined in the scope of the function
>> Public Function Get() As String
>>     Dim sBuffer, sUrl As String     Dim H As HttpClient     sUrl = 
>> "http://degapp/1/eingaenge?"
>>     If sUrl Then         H = New HttpClient As "HClient"         
>> H.Auth = Net.AuthBasic
>>         H.User = LocalSettings.Username
>>         H.Password = LocalSettings.PW
>>         H.Url = sUrl
>>         H.Async = False         H.Timeout = 600
>>         H.Get
>>         ' Success - read the data         If Lof(H) Then sBuffer = 
>> Read #H, Lof(H)
>>         If H.Code = 299 Then             Error.Raise("Degapp Fehler – 
>> Code " & H.Code & " " & sBuffer)         Endif
>>         If H.Status < 0 Then             Error.Raise("Connection zu 
>> Degapp kaputt. Curl Status (" & H.Status & ") kleiner 0.")         
>> Else             H.Close             Return sBuffer         End If     
>> Else         Error.Raise("Der Pfad für Degapp ist nicht definiert.") 
>>     Endif
>> End
> 
> Now the HttpClient object lives only inside the scope of the function. 
> Then it leaks no file desriptors any more!
> 
> If the HttpClient object exists in the scope of the class the bug occurs!
> 
> Alles Gute
> 
> Christof Thalhofer
> 

Still can't reproduce the leak... Can you send the full project?

-- 
Benoît Minisini.



More information about the User mailing list