@@ -8,8 +8,9 @@ use std::io;
88
99use nginx_sys:: {
1010 ngx_addr_t, ngx_connection_t, ngx_destroy_pool, ngx_event_connect_peer, ngx_event_get_peer,
11- ngx_inet_set_port, ngx_int_t, ngx_log_t, ngx_peer_connection_t, ngx_pool_t, ngx_ssl_shutdown,
12- ngx_ssl_t, ngx_str_t, ngx_url_t, NGX_DEFAULT_POOL_SIZE , NGX_LOG_ERR , NGX_LOG_WARN ,
11+ ngx_inet_set_port, ngx_int_t, ngx_log_t, ngx_msec_t, ngx_peer_connection_t, ngx_pool_t,
12+ ngx_ssl_shutdown, ngx_ssl_t, ngx_str_t, ngx_url_t, NGX_DEFAULT_POOL_SIZE , NGX_LOG_ERR ,
13+ NGX_LOG_WARN ,
1314} ;
1415use ngx:: collections:: Vec ;
1516use ngx:: core:: Status ;
@@ -20,6 +21,8 @@ use super::connection::{Connection, ConnectionLogError};
2021use super :: resolver:: Resolver ;
2122use crate :: util:: OwnedPool ;
2223
24+ const ACME_DEFAULT_READ_TIMEOUT : ngx_msec_t = 60000 ;
25+
2326/// Async wrapper over an [ngx_peer_connection_t].
2427pub struct PeerConnection {
2528 pub pool : OwnedPool ,
@@ -56,7 +59,7 @@ impl hyper::rt::Read for PeerConnection {
5659 }
5760
5861 if rev. active ( ) != 0 {
59- unsafe { nginx_sys:: ngx_add_timer ( rev, 60000 ) } ;
62+ unsafe { nginx_sys:: ngx_add_timer ( rev, ACME_DEFAULT_READ_TIMEOUT ) } ;
6063 } else if rev. timer_set ( ) != 0 {
6164 unsafe { nginx_sys:: ngx_del_timer ( rev) } ;
6265 }
@@ -116,6 +119,7 @@ impl PeerConnection {
116119 let mut pool = OwnedPool :: new ( NGX_DEFAULT_POOL_SIZE as _ , log)
117120 . map_err ( |_| io:: ErrorKind :: OutOfMemory ) ?;
118121
122+ // We need a copy of the log object to avoid modifying log.connection on a cycle log.
119123 let new_log = ngx:: allocator:: allocate ( unsafe { log. read ( ) } , & * pool)
120124 . map_err ( |_| io:: ErrorKind :: OutOfMemory ) ?;
121125 ( * pool) . as_mut ( ) . log = new_log. as_ptr ( ) ;
@@ -287,7 +291,8 @@ impl PeerConnection {
287291 c. read ( ) . handler = Some ( ngx_peer_conn_read_handler) ;
288292 c. write ( ) . handler = Some ( ngx_peer_conn_write_handler) ;
289293
290- c. read ( ) . set_timer_set ( 60000 ) ;
294+ unsafe { nginx_sys:: ngx_add_timer ( c. read ( ) , ACME_DEFAULT_READ_TIMEOUT ) } ;
295+
291296 self . rev = Some ( cx. waker ( ) . clone ( ) ) ;
292297 self . wev = Some ( cx. waker ( ) . clone ( ) ) ;
293298
@@ -459,6 +464,8 @@ unsafe extern "C" fn ngx_peer_conn_write_handler(ev: *mut nginx_sys::ngx_event_t
459464
460465 if let Some ( waker) = ( * this) . wev . take ( ) {
461466 waker. wake ( ) ;
467+
468+ // Handle write events posted from the ngx_event_openssl code.
462469 } else if Status ( nginx_sys:: ngx_handle_write_event ( ev, 0 ) ) != Status :: NGX_OK {
463470 ngx_log_error ! (
464471 NGX_LOG_WARN ,
0 commit comments