diff --git a/apps/app_chanspy.c b/apps/app_chanspy.c
index ab056e0aa0d6775ed8ac34a80b1669fb95aff848..f37de3889c459fd9cdd45888ac5d48ddf8b9d9ba 100644
--- a/apps/app_chanspy.c
+++ b/apps/app_chanspy.c
@@ -714,8 +714,10 @@ static int common_exec(struct ast_channel *chan, const struct ast_flags *flags,
 					res = ast_streamfile(chan, peer_name, chan->language);
 					if (!res)
 						res = ast_waitstream(chan, "");
-					if (res)
+					if (res) {
+						chanspy_ds_free(peer_chanspy_ds);
 						break;
+					}
 				} else
 					res = ast_say_character_str(chan, peer_name, "", chan->language);
 				if ((num = atoi(ptr)))
@@ -731,6 +733,7 @@ static int common_exec(struct ast_channel *chan, const struct ast_flags *flags,
 				goto exit;
 			} else if (res == -2) {
 				res = 0;
+				chanspy_ds_free(peer_chanspy_ds);
 				goto exit;
 			} else if (res > 1 && spec) {
 				struct ast_channel *next;