Mercurial > hg > nginx
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 |