struct dict_vfuncs v;
unsigned int iter_count;
unsigned int transaction_count;
+ struct dict_transaction_context *transactions;
};
struct dict_iterate_context {
struct dict_transaction_context {
struct dict *dict;
+ struct dict_transaction_context *prev, *next;
struct timespec timestamp;
#include "lib.h"
#include "array.h"
+#include "llist.h"
#include "str.h"
#include "dict-sql.h"
#include "dict-private.h"
i_assert(dict->iter_count == 0);
i_assert(dict->transaction_count == 0);
+ i_assert(dict->transactions == NULL);
dict->v.deinit(dict);
}
passed as parameter, e.g. it can be dict-fail when
transactions are not supported. */
ctx->dict->transaction_count++;
+ DLLIST_PREPEND(&ctx->dict->transactions, ctx);
return ctx;
}
*_ctx = NULL;
i_assert(ctx->dict->transaction_count > 0);
ctx->dict->transaction_count--;
+ DLLIST_REMOVE(&ctx->dict->transactions, ctx);
return ctx->dict->v.transaction_commit(ctx, FALSE, NULL, NULL);
}
*_ctx = NULL;
i_assert(ctx->dict->transaction_count > 0);
ctx->dict->transaction_count--;
+ DLLIST_REMOVE(&ctx->dict->transactions, ctx);
ctx->dict->v.transaction_commit(ctx, TRUE, callback, context);
}
*_ctx = NULL;
i_assert(ctx->dict->transaction_count > 0);
ctx->dict->transaction_count--;
+ DLLIST_REMOVE(&ctx->dict->transactions, ctx);
ctx->dict->v.transaction_rollback(ctx);
}