diff --git a/main/bridge_channel.c b/main/bridge_channel.c
index 7e058af3c06ae2953fc1c5a2bfabd06d8ce1a06a..9d3934fae5d77d9a4b873c7802ff20788bbb69a6 100644
--- a/main/bridge_channel.c
+++ b/main/bridge_channel.c
@@ -3017,6 +3017,9 @@ int bridge_channel_internal_join(struct ast_bridge_channel *bridge_channel)
 		ast_debug(1, "Channel %s simulating UNHOLD for bridge end.\n",
 			ast_channel_name(bridge_channel->chan));
 		ast_indicate(bridge_channel->chan, AST_CONTROL_UNHOLD);
+		// leaving channel with Ref > 2 cause it is not destroyed during hangup
+		while (2 < ao2_ref(bridge_channel->chan, 0))
+			ao2_ref(bridge_channel->chan, -1);
 	}
 
 	/* Complete any partial DTMF digit before exiting the bridge. */