diff options
author | Vsevolod Stakhov <vsevolod@rspamd.com> | 2022-07-18 09:19:26 +0100 |
---|---|---|
committer | Vsevolod Stakhov <vsevolod@rspamd.com> | 2022-07-18 09:19:26 +0100 |
commit | 635709b5acfd7717e75b7e52a8bdf0988117c825 (patch) | |
tree | 342d177ac2a6a5804af3bcafeea34b066d81b5ec /src | |
parent | 2089d0e3f2c20685f1c379213049057893929427 (diff) | |
download | rspamd-635709b5acfd7717e75b7e52a8bdf0988117c825.tar.gz rspamd-635709b5acfd7717e75b7e52a8bdf0988117c825.zip |
[Minor] Fix hash usage after rework to address pointer stability issue
Diffstat (limited to 'src')
-rw-r--r-- | src/libserver/redis_pool.cxx | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src/libserver/redis_pool.cxx b/src/libserver/redis_pool.cxx index 2ea8b727c..19acaa828 100644 --- a/src/libserver/redis_pool.cxx +++ b/src/libserver/redis_pool.cxx @@ -23,9 +23,11 @@ #include "contrib/hiredis/adapters/libev.h" #include "cryptobox.h" #include "logger.h" -#include <list> #include "contrib/ankerl/unordered_dense.h" +#include <list> +#include <unordered_map> + namespace rspamd { class redis_pool_elt; class redis_pool; @@ -201,7 +203,11 @@ class redis_pool final { /* We want to have references integrity */ ankerl::unordered_dense::map<redisAsyncContext *, redis_pool_connection *> conns_by_ctx; - ankerl::unordered_dense::map<redis_pool_key_t, redis_pool_elt> elts_by_key; + /* + * We store a pointer to the element in each connection, so this has to be + * a buckets map with pointers/references stability guarantees. + */ + std::unordered_map<redis_pool_key_t, redis_pool_elt> elts_by_key; bool wanna_die = false; /* Hiredis is 'clever' so we can call ourselves from destructor */ public: double timeout = default_timeout; @@ -495,9 +501,8 @@ redis_pool::new_connection(const gchar *db, const gchar *password, } else { /* Need to create a pool */ - auto nconn = redis_pool_elt{this, db, password, ip, port}; auto nelt = elts_by_key.try_emplace(key, - std::move(nconn)); + this, db, password, ip, port); return nelt.first->second.new_connection(); } |