]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
lib-sql: Initialize sqlpool db properly
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Fri, 20 Sep 2019 09:03:21 +0000 (12:03 +0300)
committerTimo Sirainen <timo.sirainen@open-xchange.com>
Fri, 20 Sep 2019 09:03:21 +0000 (12:03 +0300)
Fixes a crash at sql_unref() caused by recent changes.

src/lib-sql/driver-sqlpool.c
src/lib-sql/sql-api-private.h
src/lib-sql/sql-api.c

index b1d3bffe30ff000910b7473060db97ec810f84b9..9921bce990f0c5b5a5a59398d682c5618ea81e53 100644 (file)
@@ -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;
index f8b91c181833ce876fa0101b917f096152a9f06d..8987849e2eb705f44084b19e6dc1eefcd8b22d72 100644 (file)
@@ -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,
index 0a80e60646e427b585aec4bde37ebdce140fcd56..2b28623f962017df17d310c78db560ac79b84ea4 100644 (file)
@@ -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)