diff --git a/res/res_resolver_unbound.c b/res/res_resolver_unbound.c
index 25f61509aa6e277cd2902388d72ec5d9aeb92b0d..89a934c8f277e45a65b956584feb3f14da93ed95 100644
--- a/res/res_resolver_unbound.c
+++ b/res/res_resolver_unbound.c
@@ -432,20 +432,22 @@ static int unbound_config_preapply(struct unbound_config *cfg)
 
 	if (cfg->global->nameservers) {
 		struct ao2_iterator it_nameservers;
-		const char *nameserver;
+		char *nameserver;
 
 		it_nameservers = ao2_iterator_init(cfg->global->nameservers, 0);
-		while ((nameserver = ao2_iterator_next(&it_nameservers))) {
+		while (!res && (nameserver = ao2_iterator_next(&it_nameservers))) {
 			res = ub_ctx_set_fwd(cfg->global->state->resolver->context, (UNBOUND_CHAR *)nameserver);
 
 			if (res) {
 				ast_log(LOG_ERROR, "Failed to add nameserver '%s' to unbound resolver: %s\n",
 					nameserver, ub_strerror(res));
-				ao2_iterator_destroy(&it_nameservers);
-				return -1;
 			}
+			ao2_ref(nameserver, -1);
 		}
 		ao2_iterator_destroy(&it_nameservers);
+		if (res) {
+			return -1;
+		}
 	}
 
 	if (!strcmp(cfg->global->resolv, "system")) {