]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Don't rely on *os.File finalizer for close
authorMatt Joiner <anacrolix@gmail.com>
Sun, 29 Sep 2013 04:20:18 +0000 (14:20 +1000)
committerMatt Joiner <anacrolix@gmail.com>
Sun, 29 Sep 2013 04:20:18 +0000 (14:20 +1000)
client.go

index 51e518fe800e757e13a7ec3eb3c5846c32121276..a787fd9ffd37e817beaddffa1783e2b5125b65f8 100644 (file)
--- a/client.go
+++ b/client.go
@@ -156,26 +156,32 @@ func mmapTorrentData(metaInfo *metainfo.MetaInfo, location string) (mms MMapSpan
                if err != nil {
                        return
                }
-               var fi os.FileInfo
-               fi, err = file.Stat()
-               if err != nil {
-                       return
-               }
-               if fi.Size() < miFile.Length {
-                       err = file.Truncate(miFile.Length)
+               func() {
+                       defer file.Close()
+                       var fi os.FileInfo
+                       fi, err = file.Stat()
                        if err != nil {
                                return
                        }
-               }
-               var mMap gommap.MMap
-               mMap, err = gommap.MapRegion(file.Fd(), 0, miFile.Length, gommap.PROT_READ|gommap.PROT_WRITE, gommap.MAP_SHARED)
+                       if fi.Size() < miFile.Length {
+                               err = file.Truncate(miFile.Length)
+                               if err != nil {
+                                       return
+                               }
+                       }
+                       var mMap gommap.MMap
+                       mMap, err = gommap.MapRegion(file.Fd(), 0, miFile.Length, gommap.PROT_READ|gommap.PROT_WRITE, gommap.MAP_SHARED)
+                       if err != nil {
+                               return
+                       }
+                       if int64(len(mMap)) != miFile.Length {
+                               panic("mmap has wrong length")
+                       }
+                       mms = append(mms, MMap{mMap})
+               }()
                if err != nil {
                        return
                }
-               if int64(len(mMap)) != miFile.Length {
-                       panic("mmap has wrong length")
-               }
-               mms = append(mms, MMap{mMap})
        }
        return
 }