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