From: Timo Sirainen Date: Fri, 20 Sep 2019 09:03:21 +0000 (+0300) Subject: lib-sql: Initialize sqlpool db properly X-Git-Tag: 2.3.9~143 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=48385f97689aa13b91b9b1871ac2fdd0e49a1f52;p=thirdparty%2Fdovecot%2Fcore.git lib-sql: Initialize sqlpool db properly Fixes a crash at sql_unref() caused by recent changes. --- diff --git a/src/lib-sql/driver-sqlpool.c b/src/lib-sql/driver-sqlpool.c index b1d3bffe30..9921bce990 100644 --- a/src/lib-sql/driver-sqlpool.c +++ b/src/lib-sql/driver-sqlpool.c @@ -296,7 +296,7 @@ sqlpool_add_connection(struct sqlpool_db *db, struct sqlpool_host *host, if (ret < 0) i_fatal("sqlpool: %s", error); - i_array_init(&conndb->module_contexts, 5); + sql_init_common(conndb); conndb->state_change_callback = sqlpool_state_changed; conndb->state_change_context = db; diff --git a/src/lib-sql/sql-api-private.h b/src/lib-sql/sql-api-private.h index f8b91c1818..8987849e2e 100644 --- a/src/lib-sql/sql-api-private.h +++ b/src/lib-sql/sql-api-private.h @@ -228,6 +228,7 @@ ARRAY_DEFINE_TYPE(sql_drivers, const struct sql_db *); extern ARRAY_TYPE(sql_drivers) sql_drivers; extern struct sql_result sql_not_connected_result; +void sql_init_common(struct sql_db *db); struct sql_db * driver_sqlpool_init(const char *connect_string, const struct sql_db *driver); int driver_sqlpool_init_full(const struct sql_settings *set, const struct sql_db *driver, diff --git a/src/lib-sql/sql-api.c b/src/lib-sql/sql-api.c index 0a80e60646..2b28623f96 100644 --- a/src/lib-sql/sql-api.c +++ b/src/lib-sql/sql-api.c @@ -103,12 +103,17 @@ int sql_init_full(const struct sql_settings *set, struct sql_db **db_r, if (ret < 0) return -1; - i_array_init(&db->module_contexts, 5); + sql_init_common(db); + *db_r = db; + return 0; +} + +void sql_init_common(struct sql_db *db) +{ db->refcount = 1; + i_array_init(&db->module_contexts, 5); hash_table_create(&db->prepared_stmt_hash, default_pool, 0, str_hash, strcmp); - *db_r = db; - return 0; } void sql_ref(struct sql_db *db)