changeset 5857:2cb5275bf5e7

Syslog: enabled logging of send errors. The ngx_cycle->log is used when sending the message. This allows to log syslog send errors in another log. Logging to syslog after its cleanup handler has been executed was prohibited. Previously, this was possible from ngx_destroy_pool(), which resulted in error messages caused by attempts to write into the closed socket. The "processing" flag is renamed to "busy" to better match its semantics.
author Vladimir Homutov <vl@nginx.com>
date Mon, 01 Sep 2014 17:55:07 +0400
parents 1b8459a53e4b
children 02c2352d5b01
files src/core/ngx_syslog.c src/core/ngx_syslog.h
diffstat 2 files changed, 10 insertions(+), 5 deletions(-) [+]
line wrap: on
line diff
--- a/src/core/ngx_syslog.c
+++ b/src/core/ngx_syslog.c
@@ -234,11 +234,11 @@ ngx_syslog_writer(ngx_log_t *log, ngx_ui
 
     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_ui
 
     (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,
         }
     }
 
+    /* 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->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");
--- 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;