From f45f1ed8d4abb610333db8f86ce0e3a1b0808c1a Mon Sep 17 00:00:00 2001 From: Ben Johnson Date: Tue, 25 Mar 2014 08:48:58 -0600 Subject: [PATCH] Fix DB.Copy() meta lock and partial write checks. --- db.go | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/db.go b/db.go index 1acef14..cbcc322 100644 --- a/db.go +++ b/db.go @@ -453,13 +453,24 @@ func (db *DB) Copy(w io.Writer) error { return err } - // Copy everything. + // Copy the meta pages. + db.metalock.Lock() + _, err = io.CopyN(w, f, int64(db.pageSize*2)) + db.metalock.Unlock() + if err != nil { + _ = t.Rollback() + _ = f.Close() + return fmt.Errorf("meta copy: %s", err) + } + + // Copy data pages. if _, err := io.Copy(w, f); err != nil { _ = t.Rollback() _ = f.Close() return err } + // Close read transaction and exit. if err := t.Rollback(); err != nil { _ = f.Close() return err