Mercurial > hg > nginx
comparison src/core/ngx_syslog.c @ 5708:aacd994167d3
Syslog: fixed possible resource leak and more verbose logging.
Found by Coverity (CID 1215646).
author | Vladimir Homutov <vl@nginx.com> |
---|---|
date | Mon, 26 May 2014 23:34:44 +0400 |
parents | 777202558122 |
children | 44532046d9d7 |
comparison
equal
deleted
inserted
replaced
5707:31dd63dcb9ea | 5708:aacd994167d3 |
---|---|
287 peer->conn.write = &ngx_syslog_dummy_event; | 287 peer->conn.write = &ngx_syslog_dummy_event; |
288 peer->conn.log = &ngx_syslog_dummy_log; | 288 peer->conn.log = &ngx_syslog_dummy_log; |
289 | 289 |
290 ngx_syslog_dummy_event.log = &ngx_syslog_dummy_log; | 290 ngx_syslog_dummy_event.log = &ngx_syslog_dummy_log; |
291 | 291 |
292 fd = ngx_socket(peer->server.sockaddr->sa_family, SOCK_DGRAM, 0); | |
293 if (fd == (ngx_socket_t) -1) { | |
294 ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, ngx_socket_errno, | |
295 ngx_socket_n " failed"); | |
296 return NGX_ERROR; | |
297 } | |
298 | |
299 if (ngx_nonblocking(fd) == -1) { | |
300 ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, ngx_socket_errno, | |
301 ngx_nonblocking_n " failed"); | |
302 goto failed; | |
303 } | |
304 | |
305 if (connect(fd, peer->server.sockaddr, peer->server.socklen) == -1) { | |
306 ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, ngx_socket_errno, | |
307 "connect() failed"); | |
308 goto failed; | |
309 } | |
310 | |
292 cln = ngx_pool_cleanup_add(peer->pool, 0); | 311 cln = ngx_pool_cleanup_add(peer->pool, 0); |
293 if (cln == NULL) { | 312 if (cln == NULL) { |
294 return NGX_ERROR; | 313 goto failed; |
295 } | 314 } |
296 | 315 |
297 cln->data = peer; | 316 cln->data = peer; |
298 cln->handler = ngx_syslog_cleanup; | 317 cln->handler = ngx_syslog_cleanup; |
299 | 318 |
300 fd = ngx_socket(peer->server.sockaddr->sa_family, SOCK_DGRAM, 0); | |
301 if (fd == (ngx_socket_t) -1) { | |
302 ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, ngx_socket_errno, | |
303 ngx_socket_n " failed"); | |
304 return NGX_ERROR; | |
305 } | |
306 | |
307 if (ngx_nonblocking(fd) == -1) { | |
308 ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, ngx_socket_errno, | |
309 ngx_nonblocking_n " failed"); | |
310 return NGX_ERROR; | |
311 } | |
312 | |
313 if (connect(fd, peer->server.sockaddr, peer->server.socklen) == -1) { | |
314 ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, ngx_socket_errno, | |
315 "connect() failed"); | |
316 return NGX_ERROR; | |
317 } | |
318 | |
319 peer->conn.fd = fd; | 319 peer->conn.fd = fd; |
320 return NGX_OK; | 320 return NGX_OK; |
321 | |
322 failed: | |
323 | |
324 if (ngx_close_socket(fd) == -1) { | |
325 ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, ngx_socket_errno, | |
326 ngx_close_socket_n " failed"); | |
327 } | |
328 | |
329 return NGX_ERROR; | |
321 } | 330 } |
322 | 331 |
323 | 332 |
324 static void | 333 static void |
325 ngx_syslog_cleanup(void *data) | 334 ngx_syslog_cleanup(void *data) |
326 { | 335 { |
327 ngx_syslog_peer_t *peer = data; | 336 ngx_syslog_peer_t *peer = data; |
328 | 337 |
329 if (peer->conn.fd != (ngx_socket_t) -1) { | 338 if (ngx_close_socket(peer->conn.fd) == -1) { |
330 (void) ngx_close_socket(peer->conn.fd); | 339 ngx_log_error(NGX_LOG_ALERT, ngx_cycle->log, ngx_socket_errno, |
331 } | 340 ngx_close_socket_n " failed"); |
332 } | 341 } |
342 } |