diff --git a/channels/chan_dahdi.c b/channels/chan_dahdi.c
index de2d0f4cad3c326d513e9c19b2829e97d66892d8..f4a81131b2bd9f5a5bc1cbbeeb4314d3e98b1232 100644
--- a/channels/chan_dahdi.c
+++ b/channels/chan_dahdi.c
@@ -9986,7 +9986,10 @@ static void *analog_ss_thread(void *data)
 			/* some switches require a minimum guard time between
 			   the last FGD wink and something that answers
 			   immediately. This ensures it */
-			if (ast_safe_sleep(chan,100)) goto quit;
+			if (ast_safe_sleep(chan, 100)) {
+				ast_hangup(chan);
+				goto quit;
+			}
 		}
 		dahdi_enable_ec(p);
 		if (NEED_MFDETECT(p)) {
diff --git a/channels/sig_analog.c b/channels/sig_analog.c
index 92eb19144e531bd704307299764a4bca2ead1fc5..5fcb485eea2e0ce00b06bd3dae63a59d6fd7f180 100644
--- a/channels/sig_analog.c
+++ b/channels/sig_analog.c
@@ -2010,10 +2010,13 @@ static void *__analog_ss_thread(void *data)
 		}
 		if ((p->sig == ANALOG_SIG_FEATDMF) || (p->sig == ANALOG_SIG_FEATDMF_TA)) {
 			analog_wink(p, idx);
-			/* some switches require a minimum guard time between
-			the last FGD wink and something that answers
-			immediately. This ensures it */
-			if (ast_safe_sleep(chan,100)) {
+			/*
+			 * Some switches require a minimum guard time between the last
+			 * FGD wink and something that answers immediately.  This
+			 * ensures it.
+			 */
+			if (ast_safe_sleep(chan, 100)) {
+				ast_hangup(chan);
 				goto quit;
 			}
 		}