Skip to content

Commit e9f47da

Browse files
committed
do not bail out on finalize error in closeCachedStmtsLocked
Finalize all cached statements even if one fails. Leaving a finalized statement in the cache map would be a use-after-finalize bug per SQLite documentation.
1 parent 325cb8d commit e9f47da

1 file changed

Lines changed: 3 additions & 8 deletions

File tree

sqlite3.go

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1884,9 +1884,7 @@ func (c *SQLiteConn) Close() error {
18841884
return nil
18851885
}
18861886
runtime.SetFinalizer(c, nil)
1887-
if err := c.closeCachedStmtsLocked(); err != nil {
1888-
return err
1889-
}
1887+
c.closeCachedStmtsLocked()
18901888
rv := C.sqlite3_close_v2(c.db)
18911889
if rv != C.SQLITE_OK {
18921890
return lastError(c.db)
@@ -1949,23 +1947,20 @@ func (c *SQLiteConn) putCachedStmt(s *SQLiteStmt) bool {
19491947
return true
19501948
}
19511949

1952-
func (c *SQLiteConn) closeCachedStmtsLocked() error {
1950+
func (c *SQLiteConn) closeCachedStmtsLocked() {
19531951
for key, stmts := range c.stmtCache {
19541952
for _, s := range stmts {
19551953
if s == nil || s.s == nil {
19561954
continue
19571955
}
19581956
runtime.SetFinalizer(s, nil)
1959-
if rv := C.sqlite3_finalize(s.s); rv != C.SQLITE_OK {
1960-
return lastError(c.db)
1961-
}
1957+
C.sqlite3_finalize(s.s)
19621958
s.s = nil
19631959
s.c = nil
19641960
}
19651961
delete(c.stmtCache, key)
19661962
}
19671963
c.stmtCacheCount = 0
1968-
return nil
19691964
}
19701965

19711966
// Prepare the query string. Return a new statement.

0 commit comments

Comments
 (0)