From 5a04189c76aefcdba41d7b4486c92d00fdec7a2d Mon Sep 17 00:00:00 2001 From: Siavash Tavakoli Date: Mon, 27 Sep 2021 11:46:07 +0100 Subject: [PATCH] lib-sql: Add "wait" vfunc To be used in backends that support async operations. On deinit dicts should wait for results and then exit. --- src/lib-sql/sql-api-private.h | 1 + src/lib-sql/sql-api.c | 7 +++++++ src/lib-sql/sql-api.h | 3 +++ 3 files changed, 11 insertions(+) diff --git a/src/lib-sql/sql-api-private.h b/src/lib-sql/sql-api-private.h index 1148bf6462..192afb6f90 100644 --- a/src/lib-sql/sql-api-private.h +++ b/src/lib-sql/sql-api-private.h @@ -70,6 +70,7 @@ struct sql_db_vfuncs { const char **error); void (*deinit)(struct sql_db *db); void (*unref)(struct sql_db *db); + void (*wait) (struct sql_db *db); enum sql_db_flags (*get_flags)(struct sql_db *db); diff --git a/src/lib-sql/sql-api.c b/src/lib-sql/sql-api.c index abb264024d..919513b352 100644 --- a/src/lib-sql/sql-api.c +++ b/src/lib-sql/sql-api.c @@ -814,6 +814,13 @@ struct event_passthrough *sql_transaction_finished_event(struct sql_transaction_ set_name(SQL_TRANSACTION_FINISHED); } +void sql_wait(struct sql_db *db) +{ + if (db->v.wait != NULL) + db->v.wait(db); +} + + struct sql_result sql_not_connected_result = { .v = { sql_result_not_connected_free, diff --git a/src/lib-sql/sql-api.h b/src/lib-sql/sql-api.h index 9a74fc6452..7936b98628 100644 --- a/src/lib-sql/sql-api.h +++ b/src/lib-sql/sql-api.h @@ -243,4 +243,7 @@ void sql_update_stmt_get_rows(struct sql_transaction_context *ctx, struct sql_statement **stmt, unsigned int *affected_rows); +/* Wait for SQL query results. */ +void sql_wait(struct sql_db *db); + #endif -- 2.47.3