diff --git a/src/core/ngx_syslog.c b/src/core/ngx_syslog.c index e6d40f48a..2555f29b8 100644 --- a/src/core/ngx_syslog.c +++ b/src/core/ngx_syslog.c @@ -234,11 +234,11 @@ ngx_syslog_writer(ngx_log_t *log, ngx_uint_t level, u_char *buf, peer = log->wdata; - if (peer->processing) { + if (peer->busy) { return; } - peer->processing = 1; + peer->busy = 1; peer->severity = level - 1; p = ngx_syslog_add_header(peer, msg); @@ -254,7 +254,7 @@ ngx_syslog_writer(ngx_log_t *log, ngx_uint_t level, u_char *buf, (void) ngx_syslog_send(peer, msg, p - msg); - peer->processing = 0; + peer->busy = 0; } @@ -267,6 +267,9 @@ ngx_syslog_send(ngx_syslog_peer_t *peer, u_char *buf, size_t len) } } + /* log syslog socket events with valid log */ + peer->conn.log = ngx_cycle->log; + if (ngx_send) { return ngx_send(&peer->conn, buf, len); @@ -285,7 +288,6 @@ ngx_syslog_init_peer(ngx_syslog_peer_t *peer) peer->conn.read = &ngx_syslog_dummy_event; peer->conn.write = &ngx_syslog_dummy_event; - peer->conn.log = &ngx_syslog_dummy_log; ngx_syslog_dummy_event.log = &ngx_syslog_dummy_log; @@ -339,6 +341,9 @@ ngx_syslog_cleanup(void *data) { ngx_syslog_peer_t *peer = data; + /* prevents further use of this peer */ + peer->busy = 1; + if (ngx_close_socket(peer->conn.fd) == -1) { ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, ngx_socket_errno, ngx_close_socket_n " failed"); diff --git a/src/core/ngx_syslog.h b/src/core/ngx_syslog.h index 92d47d5f5..a9150516f 100644 --- a/src/core/ngx_syslog.h +++ b/src/core/ngx_syslog.h @@ -16,7 +16,7 @@ typedef struct { ngx_addr_t server; ngx_connection_t conn; - ngx_uint_t processing; /* unsigned processing:1; */ + ngx_uint_t busy; /* unsigned busy:1; */ } ngx_syslog_peer_t;