diff --git a/main/bridge_channel.c b/main/bridge_channel.c
index 3c5e87b574a5b519f073e238a6325d8c0184a25f..34dd7feeb600ad079bca21984c239021e8d0ee68 100644
--- a/main/bridge_channel.c
+++ b/main/bridge_channel.c
@@ -3013,6 +3013,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. */