From: Timo Sirainen Date: Thu, 11 Jun 2026 20:02:15 +0000 (+0000) Subject: [PATCH] lib-sql: Run sql statement queries in their own data stack frame X-Git-Tag: archive/raspbian/1%2.4.1+dfsg1-6+rpi1+deb13u7^2~75 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=399b4d3df028e5a94457f41a5f17143de8e33bed;p=dovecot.git [PATCH] lib-sql: Run sql statement queries in their own data stack frame Gbp-Pq: Name 0007-lib-sql-Run-sql-statement-queries-in-their-own-data-.patch --- diff --git a/src/lib-sql/sql-api.c b/src/lib-sql/sql-api.c index 6fe2307..273dfa9 100644 --- a/src/lib-sql/sql-api.c +++ b/src/lib-sql/sql-api.c @@ -657,31 +657,37 @@ void sql_statement_query(struct sql_statement **_stmt, struct sql_statement *stmt = *_stmt; *_stmt = NULL; - if (stmt->db->v.statement_query != NULL) - stmt->db->v.statement_query(stmt, callback, context); - else if (stmt->db->v.statement_query_s != NULL) { - struct sql_db *db = stmt->db; - struct sql_query_result_delayed *cb = - i_new(struct sql_query_result_delayed, 1); - cb->db = db; - cb->callback = callback; - cb->context = context; - cb->result = sql_statement_query_s(&stmt); - cb->to = timeout_add_short(0, sql_query_delayed_callback, cb); - DLLIST_PREPEND(&db->query_delayed_list, cb); - } else - default_sql_statement_query(stmt, callback, context); + T_BEGIN { + if (stmt->db->v.statement_query != NULL) + stmt->db->v.statement_query(stmt, callback, context); + else if (stmt->db->v.statement_query_s != NULL) { + struct sql_db *db = stmt->db; + struct sql_query_result_delayed *cb = + i_new(struct sql_query_result_delayed, 1); + cb->db = db; + cb->callback = callback; + cb->context = context; + cb->result = sql_statement_query_s(&stmt); + cb->to = timeout_add_short(0, sql_query_delayed_callback, cb); + DLLIST_PREPEND(&db->query_delayed_list, cb); + } else + default_sql_statement_query(stmt, callback, context); + } T_END; } struct sql_result *sql_statement_query_s(struct sql_statement **_stmt) { struct sql_statement *stmt = *_stmt; + struct sql_result *result; *_stmt = NULL; - if (stmt->db->v.statement_query_s != NULL) - return stmt->db->v.statement_query_s(stmt); - else - return default_sql_statement_query_s(stmt); + T_BEGIN { + if (stmt->db->v.statement_query_s != NULL) + result = stmt->db->v.statement_query_s(stmt); + else + result = default_sql_statement_query_s(stmt); + } T_END; + return result; } void sql_result_ref(struct sql_result *result) @@ -1011,10 +1017,12 @@ void sql_update_stmt(struct sql_transaction_context *ctx, struct sql_statement *stmt = *_stmt; *_stmt = NULL; - if (ctx->db->v.update_stmt != NULL) - ctx->db->v.update_stmt(ctx, stmt, NULL); - else - default_sql_update_stmt(ctx, stmt, NULL); + T_BEGIN { + if (ctx->db->v.update_stmt != NULL) + ctx->db->v.update_stmt(ctx, stmt, NULL); + else + default_sql_update_stmt(ctx, stmt, NULL); + } T_END; } void sql_update_get_rows(struct sql_transaction_context *ctx, const char *query, @@ -1030,10 +1038,12 @@ void sql_update_stmt_get_rows(struct sql_transaction_context *ctx, struct sql_statement *stmt = *_stmt; *_stmt = NULL; - if (ctx->db->v.update_stmt != NULL) - ctx->db->v.update_stmt(ctx, stmt, affected_rows); - else - default_sql_update_stmt(ctx, stmt, affected_rows); + T_BEGIN { + if (ctx->db->v.update_stmt != NULL) + ctx->db->v.update_stmt(ctx, stmt, affected_rows); + else + default_sql_update_stmt(ctx, stmt, affected_rows); + } T_END; } void sql_db_set_state(struct sql_db *db, enum sql_db_state state)