preserve errno while ngx_free()
diff --git a/src/os/win32/ngx_files.c b/src/os/win32/ngx_files.c
index c74ec58..d86b22b 100644
--- a/src/os/win32/ngx_files.c
+++ b/src/os/win32/ngx_files.c
@@ -18,9 +18,10 @@
 ngx_fd_t
 ngx_open_file(u_char *name, u_long mode, u_long create, u_long access)
 {
-    u_short   *u;
-    ngx_fd_t   fd;
-    u_short    utf16[NGX_UTF16_BUFLEN];
+    u_short    *u;
+    ngx_fd_t    fd;
+    ngx_err_t   err;
+    u_short     utf16[NGX_UTF16_BUFLEN];
 
     u = ngx_utf8_to_utf16(utf16, name, NGX_UTF16_BUFLEN);
 
@@ -33,7 +34,9 @@
                      NULL, create, FILE_FLAG_BACKUP_SEMANTICS, NULL);
 
     if (u != utf16) {
+        err = ngx_errno;
         ngx_free(u);
+        ngx_set_errno(err);
     }
 
     return fd;