mirror of
https://github.com/nginx/nginx.git
synced 2024-12-11 09:49:02 +08:00
SSL: retry "sess_id" and "id" allocations.
In case of fully populated SSL session cache with no memory left for new allocations, ngx_ssl_new_session() will try to expire the oldest non-expired session and retry, but only in case when slab allocation fails for "cached_sess", not when slab allocation fails for either "sess_id" or "id", which can happen for number of reasons and results in new session not being cached. Patch fixes this by adding retry logic to "sess_id" & "id" allocations. Patch by Piotr Sikora.
This commit is contained in:
parent
56bc5f250b
commit
890ee444ca
@ -1842,8 +1842,18 @@ ngx_ssl_new_session(ngx_ssl_conn_t *ssl_conn, ngx_ssl_session_t *sess)
|
||||
}
|
||||
|
||||
sess_id = ngx_slab_alloc_locked(shpool, sizeof(ngx_ssl_sess_id_t));
|
||||
|
||||
if (sess_id == NULL) {
|
||||
goto failed;
|
||||
|
||||
/* drop the oldest non-expired session and try once more */
|
||||
|
||||
ngx_ssl_expire_sessions(cache, shpool, 0);
|
||||
|
||||
sess_id = ngx_slab_alloc_locked(shpool, sizeof(ngx_ssl_sess_id_t));
|
||||
|
||||
if (sess_id == NULL) {
|
||||
goto failed;
|
||||
}
|
||||
}
|
||||
|
||||
#if (NGX_PTR_SIZE == 8)
|
||||
@ -1853,8 +1863,18 @@ ngx_ssl_new_session(ngx_ssl_conn_t *ssl_conn, ngx_ssl_session_t *sess)
|
||||
#else
|
||||
|
||||
id = ngx_slab_alloc_locked(shpool, sess->session_id_length);
|
||||
|
||||
if (id == NULL) {
|
||||
goto failed;
|
||||
|
||||
/* drop the oldest non-expired session and try once more */
|
||||
|
||||
ngx_ssl_expire_sessions(cache, shpool, 0);
|
||||
|
||||
id = ngx_slab_alloc_locked(shpool, sess->session_id_length);
|
||||
|
||||
if (id == NULL) {
|
||||
goto failed;
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
|
Loading…
Reference in New Issue
Block a user