From: Timo Sirainen Date: Mon, 12 Sep 2011 11:43:31 +0000 (+0300) Subject: stats: Avoid duplicate "Couldn't find session GUID" warnings. X-Git-Tag: 2.1.alpha2~21 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c7639a2e0abe475e4db7651b1d49293c7411bcaf;p=thirdparty%2Fdovecot%2Fcore.git stats: Avoid duplicate "Couldn't find session GUID" warnings. When it happens, just create a dummy session for it and log a warning once. --- diff --git a/src/stats/mail-command.c b/src/stats/mail-command.c index ce52121040..cab7a42fa6 100644 --- a/src/stats/mail-command.c +++ b/src/stats/mail-command.c @@ -97,15 +97,14 @@ int mail_command_update_parse(const char *const *args, const char **error_r) const char *error; unsigned int cmd_id; bool done; - int ret; /* [key=value ..] */ if (str_array_length(args) < 4) { *error_r = "UPDATE-CMD: Too few parameters"; return -1; } - if ((ret = mail_session_lookup(args[0], &session, error_r)) <= 0) - return ret; + if (mail_session_get(args[0], &session, error_r) < 0) + return -1; if (str_to_uint(args[1], &cmd_id) < 0 || cmd_id == 0) { *error_r = "UPDATE-CMD: Invalid command id"; diff --git a/src/stats/mail-session.c b/src/stats/mail-session.c index 4936364377..f0124b8fbb 100644 --- a/src/stats/mail-session.c +++ b/src/stats/mail-session.c @@ -160,13 +160,35 @@ int mail_session_lookup(const char *guid, struct mail_session **session_r, } *session_r = hash_table_lookup(mail_sessions_hash, session_guid); if (*session_r == NULL) { - i_warning("mail disconnect couldn't find session GUID: %s", + i_warning("Couldn't find session GUID: %s", guid_128_to_string(session_guid)); return 0; } return 1; } +int mail_session_get(const char *guid, struct mail_session **session_r, + const char **error_r) +{ + const char *new_args[5]; + int ret; + + if ((ret = mail_session_lookup(guid, session_r, error_r)) != 0) + return ret; + + /* Create a new dummy session to avoid repeated warnings */ + new_args[0] = guid; + new_args[1] = ""; /* username */ + new_args[2] = ""; /* service */ + new_args[3] = "0"; /* pid */ + new_args[4] = NULL; + if (mail_session_connect_parse(new_args, error_r) < 0) + i_unreached(); + if (mail_session_lookup(guid, session_r, error_r) != 1) + i_unreached(); + return 0; +} + int mail_session_disconnect_parse(const char *const *args, const char **error_r) { struct mail_session *session; @@ -203,11 +225,10 @@ int mail_session_update_parse(const char *const *args, const char **error_r) struct mail_session *session; struct mail_stats stats, diff_stats; const char *error; - int ret; /* [key=value ..] */ - if ((ret = mail_session_lookup(args[0], &session, error_r)) <= 0) - return ret; + if (mail_session_get(args[0], &session, error_r) < 0) + return -1; if (mail_stats_parse(args+1, &stats, error_r) < 0) { *error_r = t_strconcat("UPDATE-SESSION: ", *error_r, NULL); diff --git a/src/stats/mail-session.h b/src/stats/mail-session.h index fa72065d0f..39141298f1 100644 --- a/src/stats/mail-session.h +++ b/src/stats/mail-session.h @@ -16,6 +16,8 @@ void mail_session_unref(struct mail_session **session); int mail_session_lookup(const char *guid, struct mail_session **session_r, const char **error_r); +int mail_session_get(const char *guid, struct mail_session **session_r, + const char **error_r); void mail_session_refresh(struct mail_session *session, const struct mail_stats *diff_stats);