From 0a6fbe8f7eb577a56e18f98b24ce2e6bd3412386 Mon Sep 17 00:00:00 2001 From: Tobias Brunner Date: Mon, 6 Nov 2017 10:29:56 +0100 Subject: [PATCH] pool: Destroy enumerator before deleting existing pool The MySQL client doesn't like overlapping queries on the same connection, so we make sure to destroy the enumerator used to check for an existing pool before deleting it when --replace is used. --- src/pool/pool.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/pool/pool.c b/src/pool/pool.c index c0d855b73..b755365ec 100644 --- a/src/pool/pool.c +++ b/src/pool/pool.c @@ -60,20 +60,22 @@ static u_int create_pool(char *name, chunk_t start, chunk_t end, u_int timeout) { enumerator_t *e; int pool; + bool exists; e = db->query(db, "SELECT id FROM pools WHERE name = ?", DB_TEXT, name, DB_UINT); - if (e && e->enumerate(e, &pool)) + exists = e && e->enumerate(e, &pool); + DESTROY_IF(e); + + if (exists) { - if (replace_pool == FALSE) + if (!replace_pool) { fprintf(stderr, "pool '%s' exists.\n", name); - e->destroy(e); exit(EXIT_FAILURE); } del(name); } - DESTROY_IF(e); if (db->execute(db, &pool, "INSERT INTO pools (name, start, end, timeout) VALUES (?, ?, ?, ?)", DB_TEXT, name, DB_BLOB, start, DB_BLOB, end,