]> git.kaiwu.me - njs.git/commitdiff
Modules: abort shared dict state save on close failure
authorDmitry Volyntsev <xeioex@nginx.com>
Fri, 9 Oct 2026 23:03:38 +0000 (16:03 -0700)
committerDmitry Volyntsev <xeioexception@gmail.com>
Thu, 15 Oct 2026 01:49:05 +0000 (18:49 -0700)
A close failure may report a delayed write error.  Do not rename the
temporary file over the previous state file in this case.  Invalidate
the descriptor before cleanup to avoid closing it twice.

nginx/ngx_js_shared_dict.c

index 35631f2cbe3c9bd11c9485bf57546243ff1ad7a9..2631f7e713f1e9f57b3339044dfce67afa7bbb8e 100644 (file)
@@ -2659,6 +2659,8 @@ ngx_js_dict_save(ngx_js_dict_t *dict)
     if (ngx_close_file(file.fd) == NGX_FILE_ERROR) {
         ngx_log_error(NGX_LOG_ALERT, log, ngx_errno,
                      ngx_close_file_n " \"%s\" failed", file.name.data);
+        file.fd = NGX_INVALID_FILE;
+        goto error;
     }
 
     file.fd = NGX_INVALID_FILE;