Make sure SQLiteStatement objects get destroyed before the database is closed. There are 2 issues with destroying a SQLiteStatement after a database is closed: 1. The underlying call to close the sqlite database will fail if the database still has statements and we will leak the database. 2. SQLiteStatement has a reference to the database so it cannot outlive the SQLiteDatabase.
Created attachment 428862 [details] Patch
Created attachment 428910 [details] Patch
Comment on attachment 428910 [details] Patch View in context: https://bugs.webkit.org/attachment.cgi?id=428910&action=review > Source/WebCore/platform/sql/SQLiteDatabase.cpp:225 > + ASSERT_WITH_MESSAGE(!m_statementCount, "All SQLiteTransaction objects should be destroyed before closing the database"); "should" -> "must" > Source/WebCore/platform/sql/SQLiteDatabase.cpp:727 > +void SQLiteDatabase::incrementStatementCount() > +{ > +#if ASSERT_ENABLED > + ++m_statementCount; > +#endif > +} > + > +void SQLiteDatabase::decrementStatementCount() > +{ > +#if ASSERT_ENABLED > + ASSERT(m_statementCount); > + --m_statementCount; > +#endif > +} When asserts are disabled you’d want this empty function inlined. Can we put these in the header?
Created attachment 428935 [details] Patch
Committed r277653 (237859@main): <https://commits.webkit.org/237859@main> All reviewed patches have been landed. Closing bug and clearing flags on attachment 428935 [details].
<rdar://problem/78156408>