[nginx] Win32: reworked ngx_win32_rename_file() to check errors.
Sergey Kandaurov
pluknet at nginx.com
Fri Feb 24 10:33:02 UTC 2023
details: https://hg.nginx.org/nginx/rev/8880fe0b193c
branches:
changeset: 8135:8880fe0b193c
user: Maxim Dounin <mdounin at mdounin.ru>
date: Thu Feb 23 20:49:50 2023 +0300
description:
Win32: reworked ngx_win32_rename_file() to check errors.
Previously, ngx_win32_rename_file() retried on all errors returned by
MoveFile() to a temporary name. It only make sense, however, to retry
when the destination file already exists, similarly to the condition
when ngx_win32_rename_file() is called. Retrying on other errors is
meaningless and might result in an infinite loop.
diffstat:
src/os/win32/ngx_files.c | 12 ++++++++++--
1 files changed, 10 insertions(+), 2 deletions(-)
diffs (31 lines):
diff -r 7d60e4584d9e -r 8880fe0b193c src/os/win32/ngx_files.c
--- a/src/os/win32/ngx_files.c Thu Feb 23 20:49:47 2023 +0300
+++ b/src/os/win32/ngx_files.c Thu Feb 23 20:49:50 2023 +0300
@@ -236,10 +236,16 @@ ngx_win32_rename_file(ngx_str_t *from, n
break;
}
- collision = 1;
+ err = ngx_errno;
- ngx_log_error(NGX_LOG_CRIT, log, ngx_errno,
+ if (err == NGX_EEXIST || err == NGX_EEXIST_FILE) {
+ collision = 1;
+ continue;
+ }
+
+ ngx_log_error(NGX_LOG_CRIT, log, err,
"MoveFile() \"%s\" to \"%s\" failed", to->data, name);
+ goto failed;
}
if (MoveFile((const char *) from->data, (const char *) to->data) == 0) {
@@ -254,6 +260,8 @@ ngx_win32_rename_file(ngx_str_t *from, n
"DeleteFile() \"%s\" failed", name);
}
+failed:
+
/* mutex_unlock() */
ngx_free(name);
More information about the nginx-devel
mailing list