Parcourir la source

[Minor] Redis_pool: Slightly improve style

tags/3.1
Vsevolod Stakhov il y a 2 ans
Parent
révision
138b68aa5a
1 fichiers modifiés avec 23 ajouts et 9 suppressions
  1. 23
    9
      src/libserver/redis_pool.cxx

+ 23
- 9
src/libserver/redis_pool.cxx Voir le fichier

@@ -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;

Chargement…
Annuler
Enregistrer