dovecot-2.1: lib-dict: Abort async transaction commits if client...
dovecot at dovecot.org
dovecot at dovecot.org
Mon Oct 29 16:37:21 EET 2012
details: http://hg.dovecot.org/dovecot-2.1/rev/67e9cb0b06ec
changeset: 14790:67e9cb0b06ec
user: Timo Sirainen <tss at iki.fi>
date: Mon Oct 29 16:36:59 2012 +0200
description:
lib-dict: Abort async transaction commits if client gets disconnected from dict server.
diffstat:
src/lib-dict/dict-client.c | 11 +++++++++++
1 files changed, 11 insertions(+), 0 deletions(-)
diffs (38 lines):
diff -r 22875bcaa952 -r 67e9cb0b06ec src/lib-dict/dict-client.c
--- a/src/lib-dict/dict-client.c Fri Oct 26 13:05:43 2012 +0300
+++ b/src/lib-dict/dict-client.c Mon Oct 29 16:36:59 2012 +0200
@@ -72,6 +72,7 @@
unsigned int failed:1;
unsigned int sent_begin:1;
+ unsigned int async:1;
};
static int client_dict_connect(struct client_dict *dict);
@@ -444,9 +445,18 @@
static void client_dict_disconnect(struct client_dict *dict)
{
+ struct client_dict_transaction_context *ctx, *next;
+
dict->connect_counter++;
dict->handshaked = FALSE;
+ /* abort all pending async commits */
+ for (ctx = dict->transactions; ctx != NULL; ctx = next) {
+ next = ctx->next;
+ if (ctx->async)
+ client_dict_finish_transaction(dict, ctx->id, -1);
+ }
+
if (dict->to_idle != NULL)
timeout_remove(&dict->to_idle);
if (dict->io != NULL)
@@ -706,6 +716,7 @@
else if (async) {
ctx->callback = callback;
ctx->context = context;
+ ctx->async = TRUE;
if (dict->async_commits++ == 0) {
dict->io = io_add(dict->fd, IO_READ,
dict_async_input, dict);
More information about the dovecot-cvs
mailing list