commit 138b68a: [Minor] Redis_pool: Slightly improve style
Vsevolod Stakhov
vsevolod at highsecure.ru
Sun Sep 12 11:42:05 UTC 2021
Author: Vsevolod Stakhov
Date: 2021-09-12 12:39:57 +0100
URL: https://github.com/rspamd/rspamd/commit/138b68aa5a49d96cd913cad0a563eeec84d019fc (HEAD -> master)
[Minor] Redis_pool: Slightly improve style
---
src/libserver/redis_pool.cxx | 32 +++++++++++++++++++++++---------
1 file changed, 23 insertions(+), 9 deletions(-)
diff --git a/src/libserver/redis_pool.cxx b/src/libserver/redis_pool.cxx
index a3c5a7ebb..84e101105 100644
--- a/src/libserver/redis_pool.cxx
+++ b/src/libserver/redis_pool.cxx
@@ -96,6 +96,7 @@ class redis_pool_elt {
*/
std::list<redis_pool_connection_ptr> active;
std::list<redis_pool_connection_ptr> inactive;
+ std::list<redis_pool_connection_ptr> terminating;
std::string ip;
std::string db;
std::string password;
@@ -121,19 +122,31 @@ public:
auto new_connection() -> redisAsyncContext *;
- auto release_active(const redis_pool_connection *conn) -> void
+ auto release_connection(const redis_pool_connection *conn) -> void
{
- active.erase(conn->elt_pos);
+ switch(conn->state) {
+ case RSPAMD_REDIS_POOL_CONN_ACTIVE:
+ active.erase(conn->elt_pos);
+ break;
+ case RSPAMD_REDIS_POOL_CONN_INACTIVE:
+ inactive.erase(conn->elt_pos);
+ break;
+ case RSPAMD_REDIS_POOL_CONN_FINALISING:
+ terminating.erase(conn->elt_pos);
+ break;
+ }
}
- auto release_inactive(const redis_pool_connection *conn) -> void
+ auto move_to_inactive(redis_pool_connection *conn) -> void
{
- inactive.erase(conn->elt_pos);
+ inactive.splice(std::end(inactive), active, conn->elt_pos);
+ conn->elt_pos = std::prev(std::end(inactive));
}
- auto move_to_inactive(const redis_pool_connection *conn) -> void
+ auto move_to_terminating(redis_pool_connection *conn) -> void
{
- inactive.splice(std::end(inactive), active, conn->elt_pos);
+ inactive.splice(std::end(inactive), terminating, conn->elt_pos);
+ conn->elt_pos = std::prev(std::end(terminating));
}
inline static auto make_key(const gchar *db, const gchar *password,
@@ -308,6 +321,7 @@ redis_pool_connection::redis_conn_timeout_cb(EV_P_ ev_timer *w, int revents) ->
conn->state = RSPAMD_REDIS_POOL_CONN_FINALISING;
ev_timer_again(EV_A_ w);
redisAsyncCommand(conn->ctx, redis_pool_connection::redis_quit_cb, conn, "QUIT");
+ conn->elt->move_to_terminating(conn);
}
else {
/* Finalising by timeout */
@@ -316,7 +330,7 @@ redis_pool_connection::redis_conn_timeout_cb(EV_P_ ev_timer *w, int revents) ->
conn->ctx);
/* Erasure of shared pointer will cause it to be removed */
- conn->elt->release_inactive(conn);
+ conn->elt->release_connection(conn);
}
}
@@ -338,7 +352,7 @@ redis_pool_connection::redis_on_disconnect(const struct redisAsyncContext *ac, i
}
/* Erasure of shared pointer will cause it to be removed */
- conn->elt->release_inactive(conn);
+ conn->elt->release_connection(conn);
}
}
@@ -523,7 +537,7 @@ auto redis_pool::release_connection(redisAsyncContext *ctx,
}
}
- conn->elt->release_active(conn);
+ conn->elt->release_connection(conn);
}
else {
RSPAMD_UNREACHABLE;
More information about the Commits
mailing list