diff options
author | Ben Johnson <benbjohnson@yahoo.com> | 2014-03-26 11:00:25 -0600 |
---|---|---|
committer | Ben Johnson <benbjohnson@yahoo.com> | 2014-03-26 11:00:25 -0600 |
commit | b10aa18c8872572072890a59eda62c4387084271 (patch) | |
tree | f10836fe819a9c8d38d2052a3371292288113160 | |
parent | Merge pull request #91 from benbjohnson/quickcheck (diff) | |
parent | Fix DB.Copy() meta lock and partial write checks. (diff) | |
download | dedo-b10aa18c8872572072890a59eda62c4387084271.tar.gz dedo-b10aa18c8872572072890a59eda62c4387084271.tar.xz |
Merge pull request #92 from benbjohnson/safe-copy
Fix DB.Copy() meta lock and partial write checks.
-rw-r--r-- | db.go | 13 |
1 files changed, 12 insertions, 1 deletions
@@ -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 |