aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorVladimir Homutov <vl@nginx.com>2014-09-01 17:55:07 +0400
committerVladimir Homutov <vl@nginx.com>2014-09-01 17:55:07 +0400
commitd79cbf15e6ba119767d2a035047ff67c19465961 (patch)
tree9e363552e99868e815615f9ae419c65f42a632c1 /src
parentbba2ce8aae96cfc81fa338dde1675397dd3bed4c (diff)
downloadnginx-d79cbf15e6ba119767d2a035047ff67c19465961.tar.gz
nginx-d79cbf15e6ba119767d2a035047ff67c19465961.zip
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.
Diffstat (limited to 'src')
-rw-r--r--src/core/ngx_syslog.c13
-rw-r--r--src/core/ngx_syslog.h2
2 files changed, 10 insertions, 5 deletions
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;