MINOR: pattern/map: Each pattern must free the associated sample
diff --git a/src/pattern.c b/src/pattern.c
index 99d6e8b..d667cef 100644
--- a/src/pattern.c
+++ b/src/pattern.c
@@ -775,6 +775,7 @@
 		free(pat->ptr.ptr);
 	}
 
+	free(pat->smp);
 	free(pat);
 }
 
@@ -795,6 +796,7 @@
 		next = eb_next(node);
 		eb_delete(node);
 		elt = container_of(node, struct pat_idx_elt, node);
+		free(elt->smp);
 		free(elt);
 		node = next;
 	}
@@ -1129,12 +1131,9 @@
 
 	pat = NULL;
 	elt = NULL;
-	/* The current pattern is a tree, try to look up */
-	if (!eb_is_empty(&expr->pattern_tree)) {
-		/* IPv6 is not indexed */
-		if (pattern.type == SMP_T_IPV6)
-			goto browse_list;
 
+	/* Try to look up the tree first. IPv6 is not indexed */
+	if (!eb_is_empty(&expr->pattern_tree) && pattern.type != SMP_T_IPV6) {
 		/* Check the pattern type */
 		if (pattern.type != SMP_T_STR &&
 		    pattern.type != SMP_T_CSTR &&
@@ -1176,6 +1175,7 @@
 	}
 
 browse_list:
+	elt = NULL;
 	if (expr->parse == pat_parse_int ||
 	         expr->parse == pat_parse_len) {
 		list_for_each_entry(pat, &expr->patterns, list) {