mirror of
http://git.haproxy.org/git/haproxy.git/
synced 2025-04-11 03:31:36 +00:00
MINOR: memory: add a callback function to create a pool
The new function create_pool_callback() takes 3 args including the return pointer, and creates a pool with the specified name and size. In case of allocation error, it emits an error message and returns. The new macro REGISTER_POOL() registers a callback using this function and will be usable to request some pools creation and guarantee that the allocation will be checked. An even simpler approach is to use DECLARE_POOL() and DECLARE_STATIC_POOL() which declare and register the pool.
This commit is contained in:
parent
e655251e80
commit
7107c8b494
@ -32,6 +32,7 @@
|
||||
#include <common/config.h>
|
||||
#include <common/mini-clist.h>
|
||||
#include <common/hathreads.h>
|
||||
#include <common/initcall.h>
|
||||
|
||||
#ifndef DEBUG_DONT_SHARE_POOLS
|
||||
#define MEM_F_SHARED 0x1
|
||||
@ -116,6 +117,21 @@ void *pool_refill_alloc(struct pool_head *pool, unsigned int avail);
|
||||
* is available for a new creation.
|
||||
*/
|
||||
struct pool_head *create_pool(char *name, unsigned int size, unsigned int flags);
|
||||
void create_pool_callback(struct pool_head **ptr, char *name, unsigned int size);
|
||||
|
||||
/* This registers a call to create_pool_callback(ptr, name, size) */
|
||||
#define REGISTER_POOL(ptr, name, size) \
|
||||
INITCALL3(STG_POOL, create_pool_callback, (ptr), (name), (size))
|
||||
|
||||
/* This macro declares a pool head <ptr> and registers its creation */
|
||||
#define DECLARE_POOL(ptr, name, size) \
|
||||
struct pool_head *(ptr) = NULL; \
|
||||
REGISTER_POOL(&ptr, name, size)
|
||||
|
||||
/* This macro declares a static pool head <ptr> and registers its creation */
|
||||
#define DECLARE_STATIC_POOL(ptr, name, size) \
|
||||
static struct pool_head *(ptr); \
|
||||
REGISTER_POOL(&ptr, name, size)
|
||||
|
||||
/* Dump statistics on pools usage.
|
||||
*/
|
||||
|
16
src/memory.c
16
src/memory.c
@ -9,6 +9,7 @@
|
||||
* 2 of the License, or (at your option) any later version.
|
||||
*
|
||||
*/
|
||||
#include <errno.h>
|
||||
|
||||
#include <types/applet.h>
|
||||
#include <types/cli.h>
|
||||
@ -521,6 +522,21 @@ static int cli_io_handler_dump_pools(struct appctx *appctx)
|
||||
return 1;
|
||||
}
|
||||
|
||||
/* callback used to create early pool <name> of size <size> and store the
|
||||
* resulting pointer into <ptr>. If the allocation fails, it quits with after
|
||||
* emitting an error message.
|
||||
*/
|
||||
void create_pool_callback(struct pool_head **ptr, char *name, unsigned int size)
|
||||
{
|
||||
*ptr = create_pool(name, size, MEM_F_SHARED);
|
||||
if (!*ptr) {
|
||||
ha_alert("Failed to allocate pool '%s' of size %u : %s. Aborting.\n",
|
||||
name, size, strerror(errno));
|
||||
exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/* register cli keywords */
|
||||
static struct cli_kw_list cli_kws = {{ },{
|
||||
{ { "show", "pools", NULL }, "show pools : report information about the memory pools usage", NULL, cli_io_handler_dump_pools },
|
||||
|
Loading…
Reference in New Issue
Block a user