summary refs log tree commit diff stats
path: root/lib/pure
diff options
context:
space:
mode:
authorJamesP <jlp765@gmail.com>2015-09-22 16:16:51 +1000
committerJamesP <jlp765@gmail.com>2015-09-22 16:16:51 +1000
commitd23c697044e3d8d8d899b4c0d1355aeff25015f1 (patch)
treeae80a9e5affcb657a89d18cb4419ac92f4d719f4 /lib/pure
parentb6b2750327208477e84d4ebbdb289e8847ac2289 (diff)
downloadNim-d23c697044e3d8d8d899b4c0d1355aeff25015f1.tar.gz
Add wasOpened flag for windows, so not attempt close when unopened
Diffstat (limited to 'lib/pure')
-rw-r--r--lib/pure/memfiles.nim5
1 files changed, 4 insertions, 1 deletions
diff --git a/lib/pure/memfiles.nim b/lib/pure/memfiles.nim
index 27b989597..83d62b589 100644
--- a/lib/pure/memfiles.nim
+++ b/lib/pure/memfiles.nim
@@ -34,6 +34,7 @@ type
     when defined(windows):
       fHandle: int
       mapHandle: int
+      wasOpened: bool
     else:
       handle: cint
 
@@ -172,6 +173,8 @@ proc open*(filename: string, mode: FileMode = fmRead,
       if mappedSize != -1: result.size = min(fileSize, mappedSize).int
       else: result.size = fileSize.int
 
+    result.wasOpened = true
+
   else:
     template fail(errCode: OSErrorCode, msg: expr) =
       rollback()
@@ -226,7 +229,7 @@ proc close*(f: var MemFile) =
   var lastErr: OSErrorCode
 
   when defined(windows):
-    if f.fHandle != INVALID_HANDLE_VALUE:
+    if f.fHandle != INVALID_HANDLE_VALUE and wasOpened:
       error = unmapViewOfFile(f.mem) == 0
       lastErr = osLastError()
       error = (closeHandle(f.mapHandle) == 0) or error