comparison src/core/ngx_syslog.c @ 7277:7f9935f07fe9

Syslog: install cleanup handler only once. If a socket was re-opened due to an error (02c2352d5b01 and fa0e093b64d7), additional cleanup handler was installed each time.
author Vladimir Homutov <vl@nginx.com>
date Mon, 14 May 2018 22:50:57 +0300
parents fa0e093b64d7
children 29adacffdefa
comparison
equal deleted inserted replaced
7276:a90f7812de35 7277:7f9935f07fe9
37 37
38 38
39 char * 39 char *
40 ngx_syslog_process_conf(ngx_conf_t *cf, ngx_syslog_peer_t *peer) 40 ngx_syslog_process_conf(ngx_conf_t *cf, ngx_syslog_peer_t *peer)
41 { 41 {
42 peer->pool = cf->pool; 42 ngx_pool_cleanup_t *cln;
43
43 peer->facility = NGX_CONF_UNSET_UINT; 44 peer->facility = NGX_CONF_UNSET_UINT;
44 peer->severity = NGX_CONF_UNSET_UINT; 45 peer->severity = NGX_CONF_UNSET_UINT;
45 46
46 if (ngx_syslog_parse_args(cf, peer) != NGX_CONF_OK) { 47 if (ngx_syslog_parse_args(cf, peer) != NGX_CONF_OK) {
47 return NGX_CONF_ERROR; 48 return NGX_CONF_ERROR;
64 if (peer->tag.data == NULL) { 65 if (peer->tag.data == NULL) {
65 ngx_str_set(&peer->tag, "nginx"); 66 ngx_str_set(&peer->tag, "nginx");
66 } 67 }
67 68
68 peer->conn.fd = (ngx_socket_t) -1; 69 peer->conn.fd = (ngx_socket_t) -1;
70
71 peer->conn.read = &ngx_syslog_dummy_event;
72 peer->conn.write = &ngx_syslog_dummy_event;
73
74 ngx_syslog_dummy_event.log = &ngx_syslog_dummy_log;
75
76 cln = ngx_pool_cleanup_add(cf->pool, 0);
77 if (cln == NULL) {
78 return NGX_CONF_ERROR;
79 }
80
81 cln->data = peer;
82 cln->handler = ngx_syslog_cleanup;
69 83
70 return NGX_CONF_OK; 84 return NGX_CONF_OK;
71 } 85 }
72 86
73 87
304 318
305 319
306 static ngx_int_t 320 static ngx_int_t
307 ngx_syslog_init_peer(ngx_syslog_peer_t *peer) 321 ngx_syslog_init_peer(ngx_syslog_peer_t *peer)
308 { 322 {
309 ngx_socket_t fd; 323 ngx_socket_t fd;
310 ngx_pool_cleanup_t *cln;
311
312 peer->conn.read = &ngx_syslog_dummy_event;
313 peer->conn.write = &ngx_syslog_dummy_event;
314
315 ngx_syslog_dummy_event.log = &ngx_syslog_dummy_log;
316 324
317 fd = ngx_socket(peer->server.sockaddr->sa_family, SOCK_DGRAM, 0); 325 fd = ngx_socket(peer->server.sockaddr->sa_family, SOCK_DGRAM, 0);
318 if (fd == (ngx_socket_t) -1) { 326 if (fd == (ngx_socket_t) -1) {
319 ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, ngx_socket_errno, 327 ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, ngx_socket_errno,
320 ngx_socket_n " failed"); 328 ngx_socket_n " failed");
331 ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, ngx_socket_errno, 339 ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, ngx_socket_errno,
332 "connect() failed"); 340 "connect() failed");
333 goto failed; 341 goto failed;
334 } 342 }
335 343
336 cln = ngx_pool_cleanup_add(peer->pool, 0);
337 if (cln == NULL) {
338 goto failed;
339 }
340
341 cln->data = peer;
342 cln->handler = ngx_syslog_cleanup;
343
344 peer->conn.fd = fd; 344 peer->conn.fd = fd;
345 345
346 /* UDP sockets are always ready to write */ 346 /* UDP sockets are always ready to write */
347 peer->conn.write->ready = 1; 347 peer->conn.write->ready = 1;
348 348