aboutsummaryrefslogtreecommitdiff
path: root/backup.go
diff options
context:
space:
mode:
authormattn <mattn.jp@gmail.com>2016-10-28 08:55:17 +0900
committerGitHub <noreply@github.com>2016-10-28 08:55:17 +0900
commit955dae4ebd0ea6e242d3ee953062cedb2f4381ff (patch)
tree0fb90e79837e067eaec23b243a9c58b15294271e /backup.go
parentMerge pull request #333 from nyarly/master (diff)
parentfix double free in SQLiteBackup.Close() on error (diff)
downloadgolite-955dae4ebd0ea6e242d3ee953062cedb2f4381ff.tar.gz
golite-955dae4ebd0ea6e242d3ee953062cedb2f4381ff.tar.xz
Merge pull request #345 from joeshaw/backup-finalizer-fix
fix double free in SQLiteBackup.Close() on error
Diffstat (limited to 'backup.go')
-rw-r--r--backup.go9
1 files changed, 7 insertions, 2 deletions
diff --git a/backup.go b/backup.go
index 4c1e38c..05f8038 100644
--- a/backup.go
+++ b/backup.go
@@ -65,10 +65,15 @@ func (b *SQLiteBackup) Finish() error {
func (b *SQLiteBackup) Close() error {
ret := C.sqlite3_backup_finish(b.b)
+
+ // sqlite3_backup_finish() never fails, it just returns the
+ // error code from previous operations, so clean up before
+ // checking and returning an error
+ b.b = nil
+ runtime.SetFinalizer(b, nil)
+
if ret != 0 {
return Error{Code: ErrNo(ret)}
}
- b.b = nil
- runtime.SetFinalizer(b, nil)
return nil
}