bool retry_errors;
bool no_replies;
bool unfinished;
+ bool background;
void (*callback)(struct client_dict_cmd *cmd,
const char *line, const char *error);
/* more lines needed for this command */
return 1;
}
- diff = timeval_diff_msecs(&ioloop_timeval, &cmds[0]->start_time);
+ diff = cmds[0]->background ? 0 :
+ timeval_diff_msecs(&ioloop_timeval, &cmds[0]->start_time);
if (diff >= DICT_CLIENT_REQUEST_WARN_TIMEOUT_MSECS) {
i_warning("read(%s): dict lookup took %u.%03u seconds: %s",
dict->conn.conn.name, diff/1000, diff % 1000,
struct client_dict_iter_result *result;
const char *key = NULL, *value = NULL;
+ if (ctx->deinit)
+ cmd->background = TRUE;
+
if (error != NULL) {
/* failed */
} else switch (*line) {
cmd->callback = client_dict_transaction_commit_callback;
cmd->api_callback.commit = callback;
cmd->api_callback.context = context;
+ if (callback == dict_transaction_commit_async_noop_callback)
+ cmd->background = TRUE;
if (client_dict_cmd_send(dict, &cmd, NULL)) {
if (!async)
client_dict_wait(_ctx->dict);
bool changed:1;
};
+void dict_transaction_commit_async_noop_callback(
+ const struct dict_commit_result *result, void *context);
+
extern struct dict dict_driver_client;
extern struct dict dict_driver_file;
extern struct dict dict_driver_fs;
return NULL;
}
-static
-void dict_transaction_commit_default_callback(const struct dict_commit_result *result ATTR_UNUSED,
+void dict_transaction_commit_async_noop_callback(
+ const struct dict_commit_result *result ATTR_UNUSED,
void *context ATTR_UNUSED)
{
/* do nothing */
*_ctx = NULL;
if (callback == NULL)
- callback = dict_transaction_commit_default_callback;
+ callback = dict_transaction_commit_async_noop_callback;
ctx->dict->v.transaction_commit(ctx, TRUE, callback, context);
}