diff --git a/main/channel.c b/main/channel.c
index 287ed305e82d8fd8913fa09fe6efffb944d34949..8e9f13dc974fef3f8d623e890599dd6f57add2d6 100644
--- a/main/channel.c
+++ b/main/channel.c
@@ -10217,12 +10217,14 @@ int ast_channel_is_leaving_bridge(struct ast_channel *chan)
 {
 	int hangup_flags = ast_channel_softhangup_internal_flag(chan);
 	int hangup_test = hangup_flags & AST_SOFTHANGUP_ASYNCGOTO;
+	int unbridge = ast_channel_unbridged(chan);
 
-	/* This function should only return true if only the ASYNCGOTO
-	 * is set. It should false if any other flag is set or if the
-	 * ASYNCGOTO flag is not set.
+	/* This function should only return true if either the unbridged flag or
+	 * the ASYNCGOTO soft hangup flag is set and when no other soft hangup
+	 * flags are set. Any other soft hangup flags being set should make it
+	 * return false.
 	 */
-	return (hangup_test && (hangup_test == hangup_flags));
+	return ((hangup_test || unbridge) && (hangup_test == hangup_flags));
 }
 
 struct ast_channel *ast_channel_bridge_peer(struct ast_channel *chan)