From 9f4b3b9d3c0e251a7cd6d7b849eed299102e1f8c Mon Sep 17 00:00:00 2001 From: Daniel Salzman <daniel.salzman@nic.cz> Date: Fri, 1 Jul 2016 14:43:44 +0200 Subject: [PATCH] ctl: add memory pool --- src/knot/ctl/commands.c | 10 +++++----- src/knot/ctl/commands.h | 3 ++- src/knot/ctl/process.c | 7 +++++++ 3 files changed, 14 insertions(+), 6 deletions(-) diff --git a/src/knot/ctl/commands.c b/src/knot/ctl/commands.c index 69046f4548..69502e5f82 100644 --- a/src/knot/ctl/commands.c +++ b/src/knot/ctl/commands.c @@ -617,13 +617,13 @@ static const desc_t cmd_table[] = { [CTL_CONF_GET] = { "conf-get", ctl_conf_read }, [CTL_CONF_SET] = { "conf-set", ctl_conf_modify }, [CTL_CONF_UNSET] = { "conf-unset", ctl_conf_modify }, - - { NULL } }; -const char* ctl_cmd_to_str(ctl_cmd_t cmd) +#define MAX_CTL_CODE (sizeof(cmd_table) / sizeof(desc_t) - 1) + +const char *ctl_cmd_to_str(ctl_cmd_t cmd) { - if (cmd < CTL_STATUS || cmd > CTL_CONF_UNSET) { + if (cmd <= CTL_NONE || cmd > MAX_CTL_CODE) { return NULL; } @@ -636,7 +636,7 @@ ctl_cmd_t ctl_str_to_cmd(const char *cmd_str) return CTL_NONE; } - for (ctl_cmd_t cmd = CTL_NONE; cmd_table[cmd].name != NULL; cmd++) { + for (ctl_cmd_t cmd = CTL_NONE + 1; cmd <= MAX_CTL_CODE; cmd++) { if (strcmp(cmd_str, cmd_table[cmd].name) == 0) { return cmd; } diff --git a/src/knot/ctl/commands.h b/src/knot/ctl/commands.h index 2e62ddc852..d8ebcab254 100644 --- a/src/knot/ctl/commands.h +++ b/src/knot/ctl/commands.h @@ -55,6 +55,7 @@ typedef enum { /*! Control command parameters. */ typedef struct { + knot_mm_t mm; knot_ctl_t *ctl; knot_ctl_type_t type; knot_ctl_data_t data; @@ -68,7 +69,7 @@ typedef struct { * * \return Command string or NULL. */ -const char* ctl_cmd_to_str(ctl_cmd_t cmd); +const char *ctl_cmd_to_str(ctl_cmd_t cmd); /*! * Returns a command corresponding to the string. diff --git a/src/knot/ctl/process.c b/src/knot/ctl/process.c index b002dfa685..30eeca106e 100644 --- a/src/knot/ctl/process.c +++ b/src/knot/ctl/process.c @@ -14,6 +14,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */ +#include "contrib/mempattern.h" +#include "contrib/ucw/mempool.h" #include "knot/common/log.h" #include "knot/ctl/commands.h" #include "knot/ctl/process.h" @@ -31,6 +33,8 @@ int ctl_process(knot_ctl_t *ctl, server_t *server) .server = server }; + mm_ctx_mempool(&args.mm, MM_DEFAULT_BLKSIZE); + // Strip redundant/unprocessed data units in the current block. bool strip = false; @@ -40,6 +44,7 @@ int ctl_process(knot_ctl_t *ctl, server_t *server) if (ret != KNOT_EOK) { log_debug("control, failed to receive (%s)", knot_strerror(ret)); + mp_delete(args.mm.ctx); return ret; } @@ -61,6 +66,7 @@ int ctl_process(knot_ctl_t *ctl, server_t *server) strip = false; continue; case KNOT_CTL_TYPE_END: + mp_delete(args.mm.ctx); return KNOT_EOF; default: assert(0); @@ -109,6 +115,7 @@ int ctl_process(knot_ctl_t *ctl, server_t *server) knot_strerror(ret)); } + mp_delete(args.mm.ctx); return cmd_ret; } } -- GitLab