]> git.kaiwu.me - nginx.git/commitdiff
Syslog: enabled logging of send errors.
authorVladimir Homutov <vl@nginx.com>
Mon, 1 Sep 2014 13:55:07 +0000 (17:55 +0400)
committerVladimir Homutov <vl@nginx.com>
Mon, 1 Sep 2014 13:55:07 +0000 (17:55 +0400)
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.

src/core/ngx_syslog.c
src/core/ngx_syslog.h

index e6d40f48a2df3cf7a6af4a2bd9ff2f1e1c133e57..2555f29b881193055958f26658a92395d52ec83a 100644 (file)
@@ -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");
index 92d47d5f5fd0a8c8ccb7e8d9d9efa083c3d6936f..a9150516f6b70ef0bc350b76d77e6932be0421e7 100644 (file)
@@ -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;