Skip to content

Commit df020c7

Browse files
committed
Do not close file from deferred function
We were not propagating it correctly and if we were, we would not be correctly unmapping the file on error. This makes the flow control easier to follow. Closes #68
1 parent 302864b commit df020c7

File tree

1 file changed

+10
-10
lines changed

1 file changed

+10
-10
lines changed

reader_other.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,37 +15,37 @@ import (
1515
func Open(file string) (*Reader, error) {
1616
mapFile, err := os.Open(file)
1717
if err != nil {
18+
_ = mapFile.Close()
1819
return nil, err
1920
}
20-
defer func() {
21-
if rerr := mapFile.Close(); rerr != nil {
22-
err = rerr
23-
}
24-
}()
2521

2622
stats, err := mapFile.Stat()
2723
if err != nil {
24+
_ = mapFile.Close()
2825
return nil, err
2926
}
3027

3128
fileSize := int(stats.Size())
3229
mmap, err := mmap(int(mapFile.Fd()), fileSize)
3330
if err != nil {
31+
_ = mapFile.Close()
32+
return nil, err
33+
}
34+
35+
if err := mapFile.Close(); err != nil {
36+
_ = munmap(mmap)
3437
return nil, err
3538
}
3639

3740
reader, err := FromBytes(mmap)
3841
if err != nil {
39-
if err2 := munmap(mmap); err2 != nil {
40-
// failing to unmap the file is probably the more severe error
41-
return nil, err2
42-
}
42+
_ = munmap(mmap)
4343
return nil, err
4444
}
4545

4646
reader.hasMappedFile = true
4747
runtime.SetFinalizer(reader, (*Reader).Close)
48-
return reader, err
48+
return reader, nil
4949
}
5050

5151
// Close unmaps the database file from virtual memory and returns the

0 commit comments

Comments
 (0)