From 3c7eb7b05861f5d06a418aa3403f23fdd74b518b Mon Sep 17 00:00:00 2001 From: Andrew Bettison Date: Tue, 30 Oct 2012 16:12:40 +1030 Subject: [PATCH] Add missing sqlite3_blob_close() Fixes #33. --- rhizome_database.c | 12 ++++++++---- rhizome_direct_http.c | 1 + 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/rhizome_database.c b/rhizome_database.c index 72565679..c5afc410 100644 --- a/rhizome_database.c +++ b/rhizome_database.c @@ -226,9 +226,14 @@ int rhizome_opendb() RETURN(0); } -int rhizome_close_db(){ - if (rhizome_db){ - // TODO if we prepare statements globally we need to make sure any prepared statements are closed first. +int rhizome_close_db() +{ + if (rhizome_db) { + sqlite3_stmt *stmt = NULL; + while ((stmt = sqlite3_next_stmt(rhizome_db, stmt))) { + const char *sql = sqlite3_sql(stmt); + WARNF("closing Rhizome db with unfinalised statement: %s", sql ? sql : "BLOB"); + } int r = sqlite3_close(rhizome_db); if (r != SQLITE_OK) return WHYF("Failed to close sqlite database, %s",sqlite3_errmsg(rhizome_db)); @@ -354,7 +359,6 @@ sqlite3_stmt *_sqlite_prepare_loglevel(struct __sourceloc __whence, int log_leve while (1) { switch (sqlite3_prepare_v2(rhizome_db, strbuf_str(stmt), -1, &statement, NULL)) { case SQLITE_OK: - case SQLITE_DONE: return statement; case SQLITE_BUSY: case SQLITE_LOCKED: diff --git a/rhizome_direct_http.c b/rhizome_direct_http.c index 584b08db..8be65c10 100644 --- a/rhizome_direct_http.c +++ b/rhizome_direct_http.c @@ -998,6 +998,7 @@ void rhizome_direct_http_dispatch(rhizome_direct_sync_request *r) goto closeit; } } + sqlite3_blob_close(blob); /* Send final mime boundary */ len=snprintf(buffer,8192,"\r\n--%s--\r\n",boundary);