diff options
Diffstat (limited to 'db.go')
-rw-r--r-- | db.go | 25 |
1 files changed, 15 insertions, 10 deletions
@@ -162,16 +162,6 @@ func (db *DB) mmap(minsz int) error { db.mmaplock.Lock() defer db.mmaplock.Unlock() - // Dereference all mmap references before unmapping. - if db.rwtx != nil { - db.rwtx.root.dereference() - } - - // Unmap existing data before continuing. - if err := db.munmap(); err != nil { - return err - } - info, err := db.file.Stat() if err != nil { return fmt.Errorf("mmap stat error: %s", err) @@ -186,6 +176,21 @@ func (db *DB) mmap(minsz int) error { } size = db.mmapSize(size) + // Verify the map size is not above the maximum allowed. + if size > maxMapSize { + return fmt.Errorf("mmap too large") + } + + // Dereference all mmap references before unmapping. + if db.rwtx != nil { + db.rwtx.root.dereference() + } + + // Unmap existing data before continuing. + if err := db.munmap(); err != nil { + return err + } + // Memory-map the data file as a byte slice. if err := mmap(db, size); err != nil { return err |