]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
CLEANUP: pools: make the local cache allocator fall back to the shared cache
authorWilly Tarreau <w@1wt.eu>
Mon, 19 Apr 2021 06:56:22 +0000 (08:56 +0200)
committerWilly Tarreau <w@1wt.eu>
Mon, 19 Apr 2021 13:24:33 +0000 (15:24 +0200)
Now when pool_get_from_local_cache() fails, it automatically falls back
to pool_get_from_shared_cache(), which used to always be done in
pool_get_from_cache(). Thus now the API is simpler as we always allocate
and free from/to the local caches.

include/haproxy/pool.h

index d7ae5f06877137e3088aec3e69cc6cd91e839a16..b873c465c9f7d375995da72501e129cfac0ffead 100644 (file)
@@ -74,6 +74,7 @@ extern THREAD_LOCAL size_t pool_cache_count;   /* #cache objects   */
 
 void pool_evict_from_local_cache(struct pool_head *pool);
 void pool_evict_from_local_caches();
+static inline void *pool_get_from_shared_cache(struct pool_head *pool);
 
 /* returns true if the pool is considered to have too many free objects */
 static inline int pool_is_crowded(const struct pool_head *pool)
@@ -83,7 +84,8 @@ static inline int pool_is_crowded(const struct pool_head *pool)
 }
 
 /* Tries to retrieve an object from the local pool cache corresponding to pool
- * <pool>. Returns NULL if none is available.
+ * <pool>. If none is available, tries to allocate from the shared cache, and
+ * returns NULL if nothing is available.
  */
 static inline void *pool_get_from_local_cache(struct pool_head *pool)
 {
@@ -92,7 +94,7 @@ static inline void *pool_get_from_local_cache(struct pool_head *pool)
 
        ph = &pool->cache[tid];
        if (LIST_ISEMPTY(&ph->list))
-               return NULL; // empty
+               return pool_get_from_shared_cache(pool);
 
        item = LIST_NEXT(&ph->list, typeof(item), by_pool);
        ph->count--;
@@ -278,8 +280,6 @@ static inline void *pool_get_from_cache(struct pool_head *pool)
        void *ptr;
 
        ptr = pool_get_from_local_cache(pool);
-       if (!ptr)
-               ptr = pool_get_from_shared_cache(pool);
        return ptr;
 }