mirror of
https://github.com/nginx/nginx.git
synced 2025-01-06 22:23:00 -06:00
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.
This commit is contained in:
parent
f8075f1ef5
commit
94d8cea620
@ -236,10 +236,16 @@ ngx_win32_rename_file(ngx_str_t *from, ngx_str_t *to, ngx_log_t *log)
|
|||||||
break;
|
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);
|
"MoveFile() \"%s\" to \"%s\" failed", to->data, name);
|
||||||
|
goto failed;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (MoveFile((const char *) from->data, (const char *) to->data) == 0) {
|
if (MoveFile((const char *) from->data, (const char *) to->data) == 0) {
|
||||||
@ -254,6 +260,8 @@ ngx_win32_rename_file(ngx_str_t *from, ngx_str_t *to, ngx_log_t *log)
|
|||||||
"DeleteFile() \"%s\" failed", name);
|
"DeleteFile() \"%s\" failed", name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
failed:
|
||||||
|
|
||||||
/* mutex_unlock() */
|
/* mutex_unlock() */
|
||||||
|
|
||||||
ngx_free(name);
|
ngx_free(name);
|
||||||
|
Loading…
Reference in New Issue
Block a user