]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
driver-mysql: Allocate mysql connection ourselves
authorAki Tuomi <aki.tuomi@dovecot.fi>
Fri, 31 Aug 2018 11:07:44 +0000 (14:07 +0300)
committerVille Savolainen <ville.savolainen@dovecot.fi>
Wed, 14 Nov 2018 08:12:47 +0000 (10:12 +0200)
This allows reusing the same mysql object on reconnect,
and simplifies cleanup in case initialization fails.

src/lib-sql/driver-mysql.c

index 213d307299c7f2454f9eb7f636e2a7a65b36d0ea..eca58494e5b54406dc1ad33543b7ea02dc0d2ce2 100644 (file)
@@ -89,6 +89,9 @@ static int driver_mysql_connect(struct sql_db *_db)
 
        sql_db_set_state(&db->api, SQL_DB_STATE_CONNECTING);
 
+       if (mysql_init(db->mysql) == NULL)
+               i_fatal("mysql_init() failed");
+
        if (db->host == NULL) {
                /* assume option_file overrides the host, or if not we'll just
                   connect to localhost */
@@ -162,8 +165,10 @@ static int driver_mysql_connect(struct sql_db *_db)
        }
 }
 
-static void driver_mysql_disconnect(struct sql_db *_db ATTR_UNUSED)
+static void driver_mysql_disconnect(struct sql_db *_db)
 {
+       struct mysql_db *db = (struct mysql_db *)_db;
+       mysql_close(db->mysql);
 }
 
 static int driver_mysql_parse_connect_string(struct mysql_db *db,
@@ -260,9 +265,7 @@ static int driver_mysql_parse_connect_string(struct mysql_db *db,
                *error_r = "No hosts given in connect string";
                return -1;
        }
-       db->mysql = mysql_init(NULL);
-       if (db->mysql == NULL)
-               i_fatal("mysql_init() failed");
+       db->mysql = p_new(db->pool, MYSQL, 1);
        return 0;
 }