浏览代码

Merge pull request #59829 from RandomShaper/fix_null_stream_crash_3.x

[3.x] Fix crash when passing null to AudioStreamPlayer::set_stream()
Ellen Poe 3 年之前
父节点
当前提交
a5f9e1ce18
共有 3 个文件被更改,包括 12 次插入3 次删除
  1. 4 1
      scene/2d/audio_stream_player_2d.cpp
  2. 4 1
      scene/3d/audio_stream_player_3d.cpp
  3. 4 1
      scene/audio/audio_stream_player.cpp

+ 4 - 1
scene/2d/audio_stream_player_2d.cpp

@@ -272,7 +272,10 @@ void AudioStreamPlayer2D::_notification(int p_what) {
 
 void AudioStreamPlayer2D::set_stream(Ref<AudioStream> p_stream) {
 	// Instancing audio streams can cause large memory allocations, do it prior to AudioServer::lock.
-	Ref<AudioStreamPlayback> pre_instanced_playback = p_stream->instance_playback();
+	Ref<AudioStreamPlayback> pre_instanced_playback;
+	if (p_stream.is_valid()) {
+		pre_instanced_playback = p_stream->instance_playback();
+	}
 
 	AudioServer::get_singleton()->lock();
 

+ 4 - 1
scene/3d/audio_stream_player_3d.cpp

@@ -623,7 +623,10 @@ void AudioStreamPlayer3D::_notification(int p_what) {
 
 void AudioStreamPlayer3D::set_stream(Ref<AudioStream> p_stream) {
 	// Instancing audio streams can cause large memory allocations, do it prior to AudioServer::lock.
-	Ref<AudioStreamPlayback> pre_instanced_playback = p_stream->instance_playback();
+	Ref<AudioStreamPlayback> pre_instanced_playback;
+	if (p_stream.is_valid()) {
+		pre_instanced_playback = p_stream->instance_playback();
+	}
 
 	AudioServer::get_singleton()->lock();
 

+ 4 - 1
scene/audio/audio_stream_player.cpp

@@ -168,7 +168,10 @@ void AudioStreamPlayer::_notification(int p_what) {
 
 void AudioStreamPlayer::set_stream(Ref<AudioStream> p_stream) {
 	// Instancing audio streams can cause large memory allocations, do it prior to AudioServer::lock.
-	Ref<AudioStreamPlayback> pre_instanced_playback = p_stream->instance_playback();
+	Ref<AudioStreamPlayback> pre_instanced_playback;
+	if (p_stream.is_valid()) {
+		pre_instanced_playback = p_stream->instance_playback();
+	}
 
 	AudioServer::get_singleton()->lock();