zephyr: serial_adapter: preserve buffer list against lock

It was possible that free_queue locks on the self referencing
node.
This patch introduce check for this issue

Signed-off-by: Andrzej Puzdrowski <andrzej.puzdrowski@nordicsemi.no>
Signed-off-by: Carles Cufi <carles.cufi@nordicsemi.no>
diff --git a/boot/zephyr/serial_adapter.c b/boot/zephyr/serial_adapter.c
index f51dc94..7ba4adb 100644
--- a/boot/zephyr/serial_adapter.c
+++ b/boot/zephyr/serial_adapter.c
@@ -157,17 +157,23 @@
 {
 	static struct line_input *cmd;
 	sys_snode_t *node;
+	int key;
 
+	key = irq_lock();
 	/* Recycle cmd buffer returned previous time */
 	if (cmd != NULL) {
-		sys_slist_append(&free_queue, &cmd->node);
+		if (sys_slist_peek_tail(&free_queue) != &cmd->node) {
+			sys_slist_append(&free_queue, &cmd->node);
+		}
 	}
 
 	node = sys_slist_get(&used_queue);
+	irq_unlock(key);
 
 	if (node == NULL) {
 		cmd = NULL;
 		*line = NULL;
+
 		return 0;
 	}