Hi Grant,

On 05/09/2017 10:38 PM, Grant Zhang wrote:
> 
>> On May 9, 2017, at 02:38, Emeric Brun <[email protected]> wrote:
>>
>> Hi Grant,
>>
>> On 05/06/2017 12:41 AM, Grant Zhang wrote:
>>> Hi Emeric,
>>>
>>> Thanks for your review! Please see the updated patches and let me know if 
>>> your comments have been properly addressed.
>>>
>>> Thanks,
>>>
>>> Grant
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>> On May 2, 2017, at 04:49, Emeric Brun <[email protected]> wrote:
>>>>
>>>> Hi Grant,
>>>>
>>>>
>>>> An other issue:
>>>>
>>>> static void ssl_sock_close(struct connection *conn) {
>>>>
>>>>       if (conn->xprt_ctx) {
>>>>               if (global_ssl.async) {
>>>>                       /* the async fd is created and owned by the SSL 
>>>> engine, which is
>>>>                        * responsible for fd closure. Here we are done with 
>>>> the async fd
>>>>                        * thus disable the polling on it, as well as clean 
>>>> up fdtab entry.
>>>>                        */
>>>>                       fd_stop_both(conn->async_fd);
>>>>                       fdtab[conn->async_fd].async = 0;
>>>>                       fdtab[conn->async_fd].state = 0;
>>>>               }
>>>>
>>>>
>>>> If yout configure ssl-async without an engine or filtering on a unused 
>>>> algo. This code is
>>>> called with an uninitialized conn->async_fd, resulting some of the time 
>>>> with a segfault.
>>>>
>>>> R,
>>>> Emeric
>>>
>>
>> The issue is still there:
>> +#if OPENSSL_VERSION_NUMBER >= 0x1010000fL
>> +            if (openssl_engines_initialized && global_ssl.async) {
>> +                    /* the async fd is created and owned by the SSL engine, 
>> which is
>> +                     * responsible for fd closure. Here we are done with 
>> the async fd
>> +                     * thus disable the polling on it, as well as clean up 
>> fdtab entry.
>> +                     */
>> +                    fd_stop_both(conn->async_fd);
>> +                    fdtab[conn->async_fd].async = 0;
>> +                    fdtab[conn->async_fd].state = 0;
>> +            }
>> +#endif
>>
>> If no WANT_ASYNC is returned, the 'conn->async_fd' could remain 
>> uninitialized (for instance a conn witch doesn't use algo provided by the 
>> engine). A fix would be to initialize global_ssl.async to '-1' and to test 
>> it.
> Now I see the issue, thanks. Wrt the fix, I might be missing something--I 
> don't know how initialize global_ssl.async to -1 would fix the issue. Or do 
> you mean initialize conn->async_fd to '-1'? 
I mean  conn->async_fd to '-1'

>> I still have the daemonize issue: the main process stalled on a futex if dh 
>> param 2048 is set:
>>
>> global
>>        tune.ssl.default-dh-param 2048
>>
> Hmm, I probably mixed "-d" with "-D" and thus couldn't repro the issue 
> before. It looks like the main process stalls at DH_free(local_dh_1024) (part 
> of __ssl_sock_deinit). Not sure why but I will debug and report back.
> 
> Thanks,

I experienced the same issue (stalled on a futex) if i run haproxy in 
foreground and trying to kill it with kill -USR1.

With this conf (dh param and ssl-async are disabled)
global
#       tune.ssl.default-dh-param 2048
        ssl-engine qat
#       ssl-async
        nbproc 1


> 
> Grant
> 

R,
Emeric

Reply via email to