[nginx] Cleaned up unsafe ngx_errno and ngx_socket_errno usage.
Maxim Dounin
mdounin at mdounin.ru
Wed Jan 7 15:38:31 UTC 2026
details: http://freenginx.org/hg/nginx/rev/d596a1fb8b9c
branches:
changeset: 9457:d596a1fb8b9c
user: Maxim Dounin <mdounin at mdounin.ru>
date: Wed Jan 07 18:27:50 2026 +0300
description:
Cleaned up unsafe ngx_errno and ngx_socket_errno usage.
Typical incorrect pattern is to call a function, then log some debugging
information with a ngx_log_debugN() call, and then use ngx_errno if the
function returned an error. This might lead to incorrect ngx_errno value
being checked or logged, since ngx_log_debugN() might clobber errno if
debugging is enabled.
Fix is to save ngx_errno (and ngx_socket_errno) before debug logging,
similarly to what we already do in many other places, or to reorder the
code if appropriate.
diffstat:
src/core/ngx_cycle.c | 12 ++++-
src/core/ngx_file.c | 4 +-
src/core/ngx_log.c | 11 +++-
src/core/ngx_resolver.c | 8 +-
src/event/modules/ngx_epoll_module.c | 4 +-
src/event/ngx_event_acceptex.c | 7 +-
src/event/ngx_event_connect.c | 6 +-
src/event/ngx_event_openssl.c | 76 +++++++++++++++++++++++++----------
src/os/unix/ngx_file_aio_read.c | 3 +-
src/os/unix/ngx_freebsd_init.c | 10 +++-
src/os/unix/ngx_recv.c | 4 +-
src/os/unix/ngx_send.c | 4 +-
src/os/unix/ngx_udp_recv.c | 4 +-
src/os/unix/ngx_udp_send.c | 4 +-
src/os/unix/ngx_writev_chain.c | 4 +-
src/os/win32/ngx_process.c | 5 +-
src/os/win32/ngx_shmem.c | 4 +-
src/os/win32/ngx_udp_wsarecv.c | 5 +-
src/os/win32/ngx_wsarecv.c | 5 +-
src/os/win32/ngx_wsasend.c | 11 ++--
20 files changed, 121 insertions(+), 70 deletions(-)
diffs (799 lines):
diff --git a/src/core/ngx_cycle.c b/src/core/ngx_cycle.c
--- a/src/core/ngx_cycle.c
+++ b/src/core/ngx_cycle.c
@@ -42,8 +42,9 @@ ngx_init_cycle(ngx_cycle_t *old_cycle)
{
void *rv;
char **senv;
+ ngx_err_t err;
+ ngx_log_t *log;
ngx_uint_t i, n;
- ngx_log_t *log;
ngx_time_t *tp;
ngx_conf_t conf;
ngx_pool_t *pool;
@@ -387,12 +388,14 @@ ngx_init_cycle(ngx_cycle_t *old_cycle)
NGX_FILE_CREATE_OR_OPEN,
NGX_FILE_DEFAULT_ACCESS);
+ err = ngx_errno;
+
ngx_log_debug3(NGX_LOG_DEBUG_CORE, log, 0,
"log: %p %d \"%s\"",
&file[i], file[i].fd, file[i].name.data);
if (file[i].fd == NGX_INVALID_FILE) {
- ngx_log_error(NGX_LOG_EMERG, log, ngx_errno,
+ ngx_log_error(NGX_LOG_EMERG, log, err,
ngx_open_file_n " \"%s\" failed",
file[i].name.data);
goto failed;
@@ -1238,6 +1241,7 @@ void
ngx_reopen_files(ngx_cycle_t *cycle, ngx_uid_t user)
{
ngx_fd_t fd;
+ ngx_err_t err;
ngx_uint_t i;
ngx_list_part_t *part;
ngx_open_file_t *file;
@@ -1267,12 +1271,14 @@ ngx_reopen_files(ngx_cycle_t *cycle, ngx
fd = ngx_open_file(file[i].name.data, NGX_FILE_APPEND,
NGX_FILE_CREATE_OR_OPEN, NGX_FILE_DEFAULT_ACCESS);
+ err = ngx_errno;
+
ngx_log_debug3(NGX_LOG_DEBUG_EVENT, cycle->log, 0,
"reopen file \"%s\", old:%d new:%d",
file[i].name.data, file[i].fd, fd);
if (fd == NGX_INVALID_FILE) {
- ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_errno,
+ ngx_log_error(NGX_LOG_EMERG, cycle->log, err,
ngx_open_file_n " \"%s\" failed", file[i].name.data);
continue;
}
diff --git a/src/core/ngx_file.c b/src/core/ngx_file.c
--- a/src/core/ngx_file.c
+++ b/src/core/ngx_file.c
@@ -201,6 +201,8 @@ ngx_create_temp_file(ngx_file_t *file, n
file->fd = ngx_open_tempfile(file->name.data, persistent, access);
+ err = ngx_errno;
+
ngx_log_debug1(NGX_LOG_DEBUG_CORE, file->log, 0,
"temp fd:%d", file->fd);
@@ -216,8 +218,6 @@ ngx_create_temp_file(ngx_file_t *file, n
return NGX_OK;
}
- err = ngx_errno;
-
if (err == NGX_EEXIST_FILE) {
n = (uint32_t) ngx_next_temp_number(1);
continue;
diff --git a/src/core/ngx_log.c b/src/core/ngx_log.c
--- a/src/core/ngx_log.c
+++ b/src/core/ngx_log.c
@@ -387,8 +387,9 @@ ngx_log_check_rate(ngx_log_t *log, ngx_u
ngx_log_t *
ngx_log_init(u_char *prefix, u_char *error_log)
{
- u_char *p, *name;
- size_t nlen, plen;
+ u_char *p, *name;
+ size_t nlen, plen;
+ ngx_err_t err;
ngx_log.file = &ngx_log_file;
ngx_log.log_level = NGX_LOG_NOTICE;
@@ -448,11 +449,13 @@ ngx_log_init(u_char *prefix, u_char *err
NGX_FILE_DEFAULT_ACCESS);
if (ngx_log_file.fd == NGX_INVALID_FILE) {
- ngx_log_stderr(ngx_errno,
+ err = ngx_errno;
+
+ ngx_log_stderr(err,
"[alert] could not open error log file: "
ngx_open_file_n " \"%s\" failed", name);
#if (NGX_WIN32)
- ngx_event_log(ngx_errno,
+ ngx_event_log(err,
"could not open error log file: "
ngx_open_file_n " \"%s\" failed", name);
#endif
diff --git a/src/core/ngx_resolver.c b/src/core/ngx_resolver.c
--- a/src/core/ngx_resolver.c
+++ b/src/core/ngx_resolver.c
@@ -4465,14 +4465,14 @@ ngx_udp_connect(ngx_resolver_connection_
s = ngx_socket(rec->sockaddr->sa_family, SOCK_DGRAM, 0);
- ngx_log_debug1(NGX_LOG_DEBUG_EVENT, &rec->log, 0, "UDP socket %d", s);
-
if (s == (ngx_socket_t) -1) {
ngx_log_error(NGX_LOG_ALERT, &rec->log, ngx_socket_errno,
ngx_socket_n " failed");
return NGX_ERROR;
}
+ ngx_log_debug1(NGX_LOG_DEBUG_EVENT, &rec->log, 0, "UDP socket %d", s);
+
c = ngx_get_connection(s, &rec->log);
if (c == NULL) {
@@ -4553,14 +4553,14 @@ ngx_tcp_connect(ngx_resolver_connection_
s = ngx_socket(rec->sockaddr->sa_family, SOCK_STREAM, 0);
- ngx_log_debug1(NGX_LOG_DEBUG_EVENT, &rec->log, 0, "TCP socket %d", s);
-
if (s == (ngx_socket_t) -1) {
ngx_log_error(NGX_LOG_ALERT, &rec->log, ngx_socket_errno,
ngx_socket_n " failed");
return NGX_ERROR;
}
+ ngx_log_debug1(NGX_LOG_DEBUG_EVENT, &rec->log, 0, "TCP socket %d", s);
+
c = ngx_get_connection(s, &rec->log);
if (c == NULL) {
diff --git a/src/event/modules/ngx_epoll_module.c b/src/event/modules/ngx_epoll_module.c
--- a/src/event/modules/ngx_epoll_module.c
+++ b/src/event/modules/ngx_epoll_module.c
@@ -980,6 +980,8 @@ ngx_epoll_eventfd_handler(ngx_event_t *e
events = io_getevents(ngx_aio_ctx, 1, 64, event, &ts);
+ err = ngx_errno;
+
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, ev->log, 0,
"io_getevents: %d", events);
@@ -1013,7 +1015,7 @@ ngx_epoll_eventfd_handler(ngx_event_t *e
}
/* events == -1 */
- ngx_log_error(NGX_LOG_ALERT, ev->log, ngx_errno,
+ ngx_log_error(NGX_LOG_ALERT, ev->log, err,
"io_getevents() failed");
return;
}
diff --git a/src/event/ngx_event_acceptex.c b/src/event/ngx_event_acceptex.c
--- a/src/event/ngx_event_acceptex.c
+++ b/src/event/ngx_event_acceptex.c
@@ -106,16 +106,15 @@ ngx_event_post_acceptex(ngx_listening_t
s = ngx_socket(ls->sockaddr->sa_family, ls->type, 0);
- ngx_log_debug1(NGX_LOG_DEBUG_EVENT, &ls->log, 0,
- ngx_socket_n " s:%d", s);
-
if (s == (ngx_socket_t) -1) {
ngx_log_error(NGX_LOG_ALERT, &ls->log, ngx_socket_errno,
ngx_socket_n " failed");
-
return NGX_ERROR;
}
+ ngx_log_debug1(NGX_LOG_DEBUG_EVENT, &ls->log, 0,
+ ngx_socket_n " s:%d", s);
+
c = ngx_get_connection(s, &ls->log);
if (c == NULL) {
diff --git a/src/event/ngx_event_connect.c b/src/event/ngx_event_connect.c
--- a/src/event/ngx_event_connect.c
+++ b/src/event/ngx_event_connect.c
@@ -40,15 +40,15 @@ ngx_event_connect_peer(ngx_peer_connecti
s = ngx_socket(pc->sockaddr->sa_family, type, 0);
- ngx_log_debug2(NGX_LOG_DEBUG_EVENT, pc->log, 0, "%s socket %d",
- (type == SOCK_STREAM) ? "stream" : "dgram", s);
-
if (s == (ngx_socket_t) -1) {
ngx_log_error(NGX_LOG_ALERT, pc->log, ngx_socket_errno,
ngx_socket_n " failed");
return NGX_ERROR;
}
+ ngx_log_debug2(NGX_LOG_DEBUG_EVENT, pc->log, 0, "%s socket %d",
+ (type == SOCK_STREAM) ? "stream" : "dgram", s);
+
c = ngx_get_connection(s, pc->log);
diff --git a/src/event/ngx_event_openssl.c b/src/event/ngx_event_openssl.c
--- a/src/event/ngx_event_openssl.c
+++ b/src/event/ngx_event_openssl.c
@@ -38,7 +38,8 @@ static void ngx_ssl_handshake_handler(ng
static ssize_t ngx_ssl_recv_early(ngx_connection_t *c, u_char *buf,
size_t size);
#endif
-static ngx_int_t ngx_ssl_handle_recv(ngx_connection_t *c, int n);
+static ngx_int_t ngx_ssl_handle_recv(ngx_connection_t *c, int n,
+ ngx_err_t err);
static void ngx_ssl_write_handler(ngx_event_t *wev);
#ifdef SSL_READ_EARLY_DATA_SUCCESS
static ssize_t ngx_ssl_write_early(ngx_connection_t *c, u_char *data,
@@ -2324,6 +2325,8 @@ ngx_ssl_handshake(ngx_connection_t *c)
n = SSL_do_handshake(c->ssl->connection);
+ err = ngx_socket_errno;
+
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, "SSL_do_handshake: %d", n);
if (n == 1) {
@@ -2423,7 +2426,9 @@ ngx_ssl_handshake(ngx_connection_t *c)
return NGX_AGAIN;
}
- err = (sslerr == SSL_ERROR_SYSCALL) ? ngx_socket_errno : 0;
+ if (sslerr != SSL_ERROR_SYSCALL) {
+ err = 0;
+ }
c->ssl->no_wait_shutdown = 1;
c->ssl->no_send_shutdown = 1;
@@ -2468,6 +2473,8 @@ ngx_ssl_try_early_data(ngx_connection_t
n = SSL_read_early_data(c->ssl->connection, &buf, 1, &readbytes);
+ err = ngx_socket_errno;
+
ngx_log_debug2(NGX_LOG_DEBUG_EVENT, c->log, 0,
"SSL_read_early_data: %d, %uz", n, readbytes);
@@ -2570,7 +2577,9 @@ ngx_ssl_try_early_data(ngx_connection_t
return NGX_AGAIN;
}
- err = (sslerr == SSL_ERROR_SYSCALL) ? ngx_socket_errno : 0;
+ if (sslerr != SSL_ERROR_SYSCALL) {
+ err = 0;
+ }
c->ssl->no_wait_shutdown = 1;
c->ssl->no_send_shutdown = 1;
@@ -2738,7 +2747,8 @@ ngx_ssl_recv_chain(ngx_connection_t *c,
ssize_t
ngx_ssl_recv(ngx_connection_t *c, u_char *buf, size_t size)
{
- int n, bytes;
+ int n, bytes;
+ ngx_err_t err;
#ifdef SSL_READ_EARLY_DATA_SUCCESS
if (c->ssl->in_early) {
@@ -2771,13 +2781,15 @@ ngx_ssl_recv(ngx_connection_t *c, u_char
n = SSL_read(c->ssl->connection, buf, size);
+ err = ngx_socket_errno;
+
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, "SSL_read: %d", n);
if (n > 0) {
bytes += n;
}
- c->ssl->last = ngx_ssl_handle_recv(c, n);
+ c->ssl->last = ngx_ssl_handle_recv(c, n, err);
if (c->ssl->last == NGX_OK) {
@@ -2870,6 +2882,7 @@ ngx_ssl_recv_early(ngx_connection_t *c,
{
int n, bytes;
size_t readbytes;
+ ngx_err_t err;
if (c->ssl->last == NGX_ERROR) {
c->read->ready = 0;
@@ -2919,12 +2932,14 @@ ngx_ssl_recv_early(ngx_connection_t *c,
n = SSL_read_early_data(c->ssl->connection, buf, size, &readbytes);
+ err = ngx_socket_errno;
+
ngx_log_debug2(NGX_LOG_DEBUG_EVENT, c->log, 0,
"SSL_read_early_data: %d, %uz", n, readbytes);
if (n == SSL_READ_EARLY_DATA_SUCCESS) {
- c->ssl->last = ngx_ssl_handle_recv(c, 1);
+ c->ssl->last = ngx_ssl_handle_recv(c, 1, 0);
bytes += readbytes;
size -= readbytes;
@@ -2941,7 +2956,7 @@ ngx_ssl_recv_early(ngx_connection_t *c,
if (n == SSL_READ_EARLY_DATA_FINISH) {
- c->ssl->last = ngx_ssl_handle_recv(c, 1);
+ c->ssl->last = ngx_ssl_handle_recv(c, 1, 0);
c->ssl->in_early = 0;
if (bytes) {
@@ -2954,7 +2969,7 @@ ngx_ssl_recv_early(ngx_connection_t *c,
/* SSL_READ_EARLY_DATA_ERROR */
- c->ssl->last = ngx_ssl_handle_recv(c, 0);
+ c->ssl->last = ngx_ssl_handle_recv(c, 0, err);
if (bytes) {
if (c->ssl->last != NGX_AGAIN) {
@@ -2987,10 +3002,9 @@ ngx_ssl_recv_early(ngx_connection_t *c,
static ngx_int_t
-ngx_ssl_handle_recv(ngx_connection_t *c, int n)
+ngx_ssl_handle_recv(ngx_connection_t *c, int n, ngx_err_t err)
{
- int sslerr;
- ngx_err_t err;
+ int sslerr;
#if (!defined SSL_OP_NO_RENEGOTIATION \
&& !defined SSL_OP_NO_CLIENT_RENEGOTIATION)
@@ -3039,8 +3053,6 @@ ngx_ssl_handle_recv(ngx_connection_t *c,
sslerr = SSL_get_error(c->ssl->connection, n);
- err = (sslerr == SSL_ERROR_SYSCALL) ? ngx_socket_errno : 0;
-
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, "SSL_get_error: %d", sslerr);
if (sslerr == SSL_ERROR_WANT_READ) {
@@ -3085,6 +3097,10 @@ ngx_ssl_handle_recv(ngx_connection_t *c,
return NGX_AGAIN;
}
+ if (sslerr != SSL_ERROR_SYSCALL) {
+ err = 0;
+ }
+
c->ssl->no_wait_shutdown = 1;
c->ssl->no_send_shutdown = 1;
@@ -3327,6 +3343,8 @@ ngx_ssl_write(ngx_connection_t *c, u_cha
n = SSL_write(c->ssl->connection, data, size);
+ err = ngx_socket_errno;
+
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, "SSL_write: %d", n);
if (n > 0) {
@@ -3363,8 +3381,6 @@ ngx_ssl_write(ngx_connection_t *c, u_cha
sslerr = SSL_ERROR_SYSCALL;
}
- err = (sslerr == SSL_ERROR_SYSCALL) ? ngx_socket_errno : 0;
-
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, "SSL_get_error: %d", sslerr);
if (sslerr == SSL_ERROR_WANT_WRITE) {
@@ -3410,6 +3426,10 @@ ngx_ssl_write(ngx_connection_t *c, u_cha
return NGX_AGAIN;
}
+ if (sslerr != SSL_ERROR_SYSCALL) {
+ err = 0;
+ }
+
c->ssl->no_wait_shutdown = 1;
c->ssl->no_send_shutdown = 1;
c->write->error = 1;
@@ -3437,6 +3457,8 @@ ngx_ssl_write_early(ngx_connection_t *c,
n = SSL_write_early_data(c->ssl->connection, data, size, &written);
+ err = ngx_socket_errno;
+
ngx_log_debug2(NGX_LOG_DEBUG_EVENT, c->log, 0,
"SSL_write_early_data: %d, %uz", n, written);
@@ -3467,8 +3489,6 @@ ngx_ssl_write_early(ngx_connection_t *c,
sslerr = SSL_get_error(c->ssl->connection, n);
- err = (sslerr == SSL_ERROR_SYSCALL) ? ngx_socket_errno : 0;
-
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, "SSL_get_error: %d", sslerr);
if (sslerr == SSL_ERROR_WANT_WRITE) {
@@ -3525,6 +3545,10 @@ ngx_ssl_write_early(ngx_connection_t *c,
return NGX_AGAIN;
}
+ if (sslerr != SSL_ERROR_SYSCALL) {
+ err = 0;
+ }
+
c->ssl->no_wait_shutdown = 1;
c->ssl->no_send_shutdown = 1;
c->write->error = 1;
@@ -3569,6 +3593,8 @@ ngx_ssl_sendfile(ngx_connection_t *c, ng
n = SSL_sendfile(c->ssl->connection, file->file->fd, file->file_pos,
size, flags);
+ err = ngx_socket_errno;
+
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, "SSL_sendfile: %z", n);
if (n > 0) {
@@ -3624,7 +3650,7 @@ ngx_ssl_sendfile(ngx_connection_t *c, ng
if (sslerr == SSL_ERROR_SSL
&& ERR_GET_REASON(ERR_peek_error()) == SSL_R_UNINITIALIZED
- && ngx_socket_errno != 0)
+ && err != 0)
{
/*
* OpenSSL fails to return SSL_ERROR_SYSCALL if an error
@@ -3635,8 +3661,6 @@ ngx_ssl_sendfile(ngx_connection_t *c, ng
sslerr = SSL_ERROR_SYSCALL;
}
- err = (sslerr == SSL_ERROR_SYSCALL) ? ngx_socket_errno : 0;
-
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, "SSL_get_error: %d", sslerr);
if (sslerr == SSL_ERROR_WANT_WRITE) {
@@ -3656,7 +3680,7 @@ ngx_ssl_sendfile(ngx_connection_t *c, ng
#if (NGX_HAVE_SENDFILE_NODISKIO)
- if (ngx_socket_errno == EBUSY) {
+ if (err == EBUSY) {
c->busy_count++;
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0,
@@ -3699,6 +3723,10 @@ ngx_ssl_sendfile(ngx_connection_t *c, ng
return NGX_AGAIN;
}
+ if (sslerr != SSL_ERROR_SYSCALL) {
+ err = 0;
+ }
+
c->ssl->no_wait_shutdown = 1;
c->ssl->no_send_shutdown = 1;
c->write->error = 1;
@@ -3803,6 +3831,8 @@ ngx_ssl_shutdown(ngx_connection_t *c)
n = SSL_shutdown(c->ssl->connection);
+ err = ngx_socket_errno;
+
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, c->log, 0, "SSL_shutdown: %d", n);
if (n == 1) {
@@ -3848,7 +3878,9 @@ ngx_ssl_shutdown(ngx_connection_t *c)
goto done;
}
- err = (sslerr == SSL_ERROR_SYSCALL) ? ngx_socket_errno : 0;
+ if (sslerr != SSL_ERROR_SYSCALL) {
+ err = 0;
+ }
ngx_ssl_connection_error(c, sslerr, err, "SSL_shutdown() failed");
diff --git a/src/os/unix/ngx_file_aio_read.c b/src/os/unix/ngx_file_aio_read.c
--- a/src/os/unix/ngx_file_aio_read.c
+++ b/src/os/unix/ngx_file_aio_read.c
@@ -153,11 +153,12 @@ ngx_file_aio_result(ngx_file_t *file, ng
n = aio_error(&aio->aiocb);
+ err = ngx_errno;
+
ngx_log_debug2(NGX_LOG_DEBUG_CORE, file->log, 0,
"aio_error: fd:%d %d", file->fd, n);
if (n == -1) {
- err = ngx_errno;
aio->err = err;
ngx_log_error(NGX_LOG_ALERT, file->log, err,
diff --git a/src/os/unix/ngx_freebsd_init.c b/src/os/unix/ngx_freebsd_init.c
--- a/src/os/unix/ngx_freebsd_init.c
+++ b/src/os/unix/ngx_freebsd_init.c
@@ -109,10 +109,12 @@ ngx_os_specific_init(ngx_log_t *log)
size = sizeof(ngx_freebsd_kern_ostype);
if (sysctlbyname("kern.ostype",
ngx_freebsd_kern_ostype, &size, NULL, 0) == -1) {
- ngx_log_error(NGX_LOG_ALERT, log, ngx_errno,
+ err = ngx_errno;
+
+ ngx_log_error(NGX_LOG_ALERT, log, err,
"sysctlbyname(kern.ostype) failed");
- if (ngx_errno != NGX_ENOMEM) {
+ if (err != NGX_ENOMEM) {
return NGX_ERROR;
}
@@ -122,7 +124,9 @@ ngx_os_specific_init(ngx_log_t *log)
size = sizeof(ngx_freebsd_kern_osrelease);
if (sysctlbyname("kern.osrelease",
ngx_freebsd_kern_osrelease, &size, NULL, 0) == -1) {
- ngx_log_error(NGX_LOG_ALERT, log, ngx_errno,
+ err = ngx_errno;
+
+ ngx_log_error(NGX_LOG_ALERT, log, err,
"sysctlbyname(kern.osrelease) failed");
if (ngx_errno != NGX_ENOMEM) {
diff --git a/src/os/unix/ngx_recv.c b/src/os/unix/ngx_recv.c
--- a/src/os/unix/ngx_recv.c
+++ b/src/os/unix/ngx_recv.c
@@ -70,6 +70,8 @@ ngx_unix_recv(ngx_connection_t *c, u_cha
do {
n = recv(c->fd, buf, size, 0);
+ err = ngx_socket_errno;
+
ngx_log_debug3(NGX_LOG_DEBUG_EVENT, c->log, 0,
"recv: fd:%d %z of %uz", c->fd, n, size);
@@ -179,8 +181,6 @@ ngx_unix_recv(ngx_connection_t *c, u_cha
return n;
}
- err = ngx_socket_errno;
-
if (err == NGX_EAGAIN || err == NGX_EINTR) {
ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err,
"recv() not ready");
diff --git a/src/os/unix/ngx_send.c b/src/os/unix/ngx_send.c
--- a/src/os/unix/ngx_send.c
+++ b/src/os/unix/ngx_send.c
@@ -33,6 +33,8 @@ ngx_unix_send(ngx_connection_t *c, u_cha
for ( ;; ) {
n = send(c->fd, buf, size, 0);
+ err = ngx_socket_errno;
+
ngx_log_debug3(NGX_LOG_DEBUG_EVENT, c->log, 0,
"send: fd:%d %z of %uz", c->fd, n, size);
@@ -46,8 +48,6 @@ ngx_unix_send(ngx_connection_t *c, u_cha
return n;
}
- err = ngx_socket_errno;
-
if (n == 0) {
ngx_log_error(NGX_LOG_ALERT, c->log, err, "send() returned zero");
wev->ready = 0;
diff --git a/src/os/unix/ngx_udp_recv.c b/src/os/unix/ngx_udp_recv.c
--- a/src/os/unix/ngx_udp_recv.c
+++ b/src/os/unix/ngx_udp_recv.c
@@ -22,6 +22,8 @@ ngx_udp_unix_recv(ngx_connection_t *c, u
do {
n = recv(c->fd, buf, size, 0);
+ err = ngx_socket_errno;
+
ngx_log_debug3(NGX_LOG_DEBUG_EVENT, c->log, 0,
"recv: fd:%d %z of %uz", c->fd, n, size);
@@ -48,8 +50,6 @@ ngx_udp_unix_recv(ngx_connection_t *c, u
return n;
}
- err = ngx_socket_errno;
-
if (err == NGX_EAGAIN || err == NGX_EINTR) {
ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err,
"recv() not ready");
diff --git a/src/os/unix/ngx_udp_send.c b/src/os/unix/ngx_udp_send.c
--- a/src/os/unix/ngx_udp_send.c
+++ b/src/os/unix/ngx_udp_send.c
@@ -22,6 +22,8 @@ ngx_udp_unix_send(ngx_connection_t *c, u
for ( ;; ) {
n = sendto(c->fd, buf, size, 0, c->sockaddr, c->socklen);
+ err = ngx_socket_errno;
+
ngx_log_debug4(NGX_LOG_DEBUG_EVENT, c->log, 0,
"sendto: fd:%d %z of %uz to \"%V\"",
c->fd, n, size, &c->addr_text);
@@ -38,8 +40,6 @@ ngx_udp_unix_send(ngx_connection_t *c, u
return n;
}
- err = ngx_socket_errno;
-
if (err == NGX_EAGAIN) {
wev->ready = 0;
ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, NGX_EAGAIN,
diff --git a/src/os/unix/ngx_writev_chain.c b/src/os/unix/ngx_writev_chain.c
--- a/src/os/unix/ngx_writev_chain.c
+++ b/src/os/unix/ngx_writev_chain.c
@@ -188,12 +188,12 @@ eintr:
n = writev(c->fd, vec->iovs, vec->count);
+ err = ngx_errno;
+
ngx_log_debug2(NGX_LOG_DEBUG_EVENT, c->log, 0,
"writev: %z of %uz", n, vec->size);
if (n == -1) {
- err = ngx_errno;
-
switch (err) {
case NGX_EAGAIN:
ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err,
diff --git a/src/os/win32/ngx_process.c b/src/os/win32/ngx_process.c
--- a/src/os/win32/ngx_process.c
+++ b/src/os/win32/ngx_process.c
@@ -23,6 +23,7 @@ ngx_spawn_process(ngx_cycle_t *cycle, ch
u_long rc, n, code;
ngx_int_t s;
ngx_pid_t pid;
+ ngx_err_t err;
ngx_exec_ctx_t ctx;
HANDLE events[2];
char file[MAX_PATH + 1];
@@ -86,6 +87,8 @@ ngx_spawn_process(ngx_cycle_t *cycle, ch
rc = WaitForMultipleObjects(2, events, 0, 5000);
+ err = ngx_errno;
+
ngx_time_update();
ngx_log_debug1(NGX_LOG_DEBUG_CORE, cycle->log, 0,
@@ -150,7 +153,7 @@ ngx_spawn_process(ngx_cycle_t *cycle, ch
goto failed;
case WAIT_FAILED:
- ngx_log_error(NGX_LOG_ALERT, cycle->log, ngx_errno,
+ ngx_log_error(NGX_LOG_ALERT, cycle->log, err,
"WaitForSingleObject(\"%s\") failed",
ngx_master_process_event_name);
diff --git a/src/os/win32/ngx_shmem.c b/src/os/win32/ngx_shmem.c
--- a/src/os/win32/ngx_shmem.c
+++ b/src/os/win32/ngx_shmem.c
@@ -73,12 +73,12 @@ ngx_shm_alloc(ngx_shm_t *shm)
return NGX_ERROR;
}
- ngx_free(name);
-
if (ngx_errno == ERROR_ALREADY_EXISTS) {
shm->exists = 1;
}
+ ngx_free(name);
+
shm->addr = MapViewOfFileEx(shm->handle, FILE_MAP_WRITE, 0, 0, 0, base);
if (shm->addr != NULL) {
diff --git a/src/os/win32/ngx_udp_wsarecv.c b/src/os/win32/ngx_udp_wsarecv.c
--- a/src/os/win32/ngx_udp_wsarecv.c
+++ b/src/os/win32/ngx_udp_wsarecv.c
@@ -26,6 +26,8 @@ ngx_udp_wsarecv(ngx_connection_t *c, u_c
rc = WSARecv(c->fd, wsabuf, 1, &bytes, &flags, NULL, NULL);
+ err = ngx_socket_errno;
+
ngx_log_debug4(NGX_LOG_DEBUG_EVENT, c->log, 0,
"WSARecv: fd:%d rc:%d %ul of %z", c->fd, rc, bytes, size);
@@ -33,7 +35,6 @@ ngx_udp_wsarecv(ngx_connection_t *c, u_c
if (rc == -1) {
rev->ready = 0;
- err = ngx_socket_errno;
if (err == WSAEWOULDBLOCK) {
ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err,
@@ -112,13 +113,13 @@ ngx_udp_overlapped_wsarecv(ngx_connectio
rc = WSARecv(c->fd, wsabuf, 1, &bytes, &flags, ovlp, NULL);
rev->complete = 0;
+ err = ngx_socket_errno;
ngx_log_debug4(NGX_LOG_DEBUG_EVENT, c->log, 0,
"WSARecv ovlp: fd:%d rc:%d %ul of %z",
c->fd, rc, bytes, size);
if (rc == -1) {
- err = ngx_socket_errno;
if (err == WSA_IO_PENDING) {
rev->active = 1;
ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err,
diff --git a/src/os/win32/ngx_wsarecv.c b/src/os/win32/ngx_wsarecv.c
--- a/src/os/win32/ngx_wsarecv.c
+++ b/src/os/win32/ngx_wsarecv.c
@@ -27,6 +27,8 @@ ngx_wsarecv(ngx_connection_t *c, u_char
rc = WSARecv(c->fd, wsabuf, 1, &bytes, &flags, NULL, NULL);
+ err = ngx_socket_errno;
+
ngx_log_debug4(NGX_LOG_DEBUG_EVENT, c->log, 0,
"WSARecv: fd:%d rc:%d %ul of %z", c->fd, rc, bytes, size);
@@ -34,7 +36,6 @@ ngx_wsarecv(ngx_connection_t *c, u_char
if (rc == -1) {
rev->ready = 0;
- err = ngx_socket_errno;
if (err == WSAEWOULDBLOCK) {
ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err,
@@ -166,13 +167,13 @@ ngx_overlapped_wsarecv(ngx_connection_t
rc = WSARecv(c->fd, wsabuf, 1, &bytes, &flags, ovlp, NULL);
rev->complete = 0;
+ err = ngx_socket_errno;
ngx_log_debug4(NGX_LOG_DEBUG_EVENT, c->log, 0,
"WSARecv ovlp: fd:%d rc:%d %ul of %z",
c->fd, rc, bytes, size);
if (rc == -1) {
- err = ngx_socket_errno;
if (err == WSA_IO_PENDING) {
rev->active = 1;
ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err,
diff --git a/src/os/win32/ngx_wsasend.c b/src/os/win32/ngx_wsasend.c
--- a/src/os/win32/ngx_wsasend.c
+++ b/src/os/win32/ngx_wsasend.c
@@ -37,6 +37,8 @@ ngx_wsasend(ngx_connection_t *c, u_char
n = WSASend(c->fd, &wsabuf, 1, &sent, 0, NULL, NULL);
+ err = ngx_socket_errno;
+
ngx_log_debug4(NGX_LOG_DEBUG_EVENT, c->log, 0,
"WSASend: fd:%d, %d, %ul of %uz", c->fd, n, sent, size);
@@ -50,8 +52,6 @@ ngx_wsasend(ngx_connection_t *c, u_char
return sent;
}
- err = ngx_socket_errno;
-
if (err == WSAEWOULDBLOCK) {
ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err, "WSASend() not ready");
wev->ready = 0;
@@ -103,11 +103,12 @@ ngx_overlapped_wsasend(ngx_connection_t
n = WSASend(c->fd, &wsabuf, 1, &sent, 0, ovlp, NULL);
+ wev->complete = 0;
+ err = ngx_socket_errno;
+
ngx_log_debug4(NGX_LOG_DEBUG_EVENT, c->log, 0,
"WSASend: fd:%d, %d, %ul of %uz", c->fd, n, sent, size);
- wev->complete = 0;
-
if (n == 0) {
if (ngx_event_flags & NGX_USE_IOCP_EVENT) {
@@ -130,8 +131,6 @@ ngx_overlapped_wsasend(ngx_connection_t
return sent;
}
- err = ngx_socket_errno;
-
if (err == WSA_IO_PENDING) {
ngx_log_debug0(NGX_LOG_DEBUG_EVENT, c->log, err,
"WSASend() posted");
More information about the nginx-devel
mailing list