]> dgit.raspbian.org Git - dovecot.git/commitdiff
[PATCH] lib-sql: Run sql statement queries in their own data stack frame
authorTimo Sirainen <timo.sirainen@open-xchange.com>
Thu, 11 Jun 2026 20:02:15 +0000 (20:02 +0000)
committerNoah Meyerhans <noahm@debian.org>
Wed, 16 Sep 2026 19:06:35 +0000 (15:06 -0400)
Gbp-Pq: Name 0007-lib-sql-Run-sql-statement-queries-in-their-own-data-.patch

src/lib-sql/sql-api.c

index 6fe23074c3f98714283433388aa7d3bf6a3947ba..273dfa98827bb5cf569985b2a466d959ad34ac4f 100644 (file)
@@ -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)