aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile7
-rw-r--r--db.go33
2 files changed, 29 insertions, 11 deletions
diff --git a/Makefile b/Makefile
index 4cc71b6..2d0fd3f 100644
--- a/Makefile
+++ b/Makefile
@@ -18,10 +18,15 @@ cpuprofile: fmt
@go test -c
@./bolt.test -test.v -test.run="^X" -test.bench=$(BENCH) -test.cpuprofile cpu.prof
+# go get github.com/kisielk/errcheck
+errcheck:
+ @echo "=== errcheck ==="
+ @errcheck github.com/boltdb/bolt
+
fmt:
@go fmt ./...
-test: fmt
+test: fmt errcheck
@echo "=== TESTS ==="
@go test -v -cover -test.run=$(TEST)
@echo ""
diff --git a/db.go b/db.go
index ab7c5a1..51c24d3 100644
--- a/db.go
+++ b/db.go
@@ -66,11 +66,11 @@ func (db *DB) Open(path string, mode os.FileMode) error {
// Open data file and separate sync handler for metadata writes.
db.path = path
if db.file, err = os.OpenFile(db.path, os.O_RDWR|os.O_CREATE, mode); err != nil {
- db.close()
+ _ = db.close()
return err
}
if db.metafile, err = os.OpenFile(db.path, os.O_RDWR|os.O_SYNC, mode); err != nil {
- db.close()
+ _ = db.close()
return err
}
@@ -96,7 +96,7 @@ func (db *DB) Open(path string, mode os.FileMode) error {
// Memory map the data file.
if err := db.mmap(0); err != nil {
- db.close()
+ _ = db.close()
return err
}
@@ -369,7 +369,7 @@ func (db *DB) Do(fn func(*Tx) error) error {
err = fn(t)
t.managed = false
if err != nil {
- t.Rollback()
+ _ = t.Rollback()
return err
}
@@ -385,7 +385,6 @@ func (db *DB) With(fn func(*Tx) error) error {
if err != nil {
return err
}
- defer t.Rollback()
// Mark as a managed tx so that the inner function cannot manually rollback.
t.managed = true
@@ -393,8 +392,16 @@ func (db *DB) With(fn func(*Tx) error) error {
// If an error is returned from the function then pass it through.
err = fn(t)
t.managed = false
+ if err != nil {
+ _ = t.Rollback()
+ return err
+ }
+
+ if err := t.Rollback(); err != nil {
+ return err
+ }
- return err
+ return nil
}
// Copy writes the entire database to a writer.
@@ -406,20 +413,26 @@ func (db *DB) Copy(w io.Writer) error {
if err != nil {
return err
}
- defer t.Rollback()
// Open reader on the database.
f, err := os.Open(db.path)
if err != nil {
+ _ = t.Rollback()
return err
}
- defer f.Close()
// Copy everything.
if _, err := io.Copy(w, f); err != nil {
+ _ = t.Rollback()
+ _ = f.Close()
return err
}
- return nil
+
+ if err := t.Rollback(); err != nil {
+ _ = f.Close()
+ return err
+ }
+ return f.Close()
}
// CopyFile copies the entire database to file at the given path.
@@ -430,10 +443,10 @@ func (db *DB) CopyFile(path string, mode os.FileMode) error {
if err != nil {
return err
}
- defer f.Close()
err = db.Copy(f)
if err != nil {
+ _ = f.Close()
return err
}
return f.Close()