summaryrefslogtreecommitdiff
path: root/scene/2d/audio_stream_player_2d.cpp
diff options
context:
space:
mode:
authorRĂ©mi Verschelde <remi@verschelde.fr>2021-10-29 07:53:59 +0200
committerGitHub <noreply@github.com>2021-10-29 07:53:59 +0200
commitddecaf5451890fc7d2a931807c78fd1fe3a3e65e (patch)
tree0f379ec5b81d5ea9d812df221e10a37d9546852d /scene/2d/audio_stream_player_2d.cpp
parent93078089878296cca7548692fd2e472898379d1c (diff)
parentc088a2dd897de6c20ac8f5563700f3e455aa818b (diff)
Merge pull request #54366 from lyuma/audio_stream_player_finished_signal
Fix crash due to reentrancy in AudioStreamPlayer* finished signal.
Diffstat (limited to 'scene/2d/audio_stream_player_2d.cpp')
-rw-r--r--scene/2d/audio_stream_player_2d.cpp4
1 files changed, 3 insertions, 1 deletions
diff --git a/scene/2d/audio_stream_player_2d.cpp b/scene/2d/audio_stream_player_2d.cpp
index 18a50ae098..f73d52152e 100644
--- a/scene/2d/audio_stream_player_2d.cpp
+++ b/scene/2d/audio_stream_player_2d.cpp
@@ -78,7 +78,6 @@ void AudioStreamPlayer2D::_notification(int p_what) {
Vector<Ref<AudioStreamPlayback>> playbacks_to_remove;
for (Ref<AudioStreamPlayback> &playback : stream_playbacks) {
if (playback.is_valid() && !AudioServer::get_singleton()->is_playback_active(playback) && !AudioServer::get_singleton()->is_playback_paused(playback)) {
- emit_signal(SNAME("finished"));
playbacks_to_remove.push_back(playback);
}
}
@@ -91,6 +90,9 @@ void AudioStreamPlayer2D::_notification(int p_what) {
active.clear();
set_physics_process_internal(false);
}
+ if (!playbacks_to_remove.is_empty()) {
+ emit_signal(SNAME("finished"));
+ }
}
while (stream_playbacks.size() > max_polyphony) {