Pārlūkot izejas kodu

Merge pull request #11781 from marcelofg55/iphone_crashfix

Fix possible crash at exit on iOS
Rémi Verschelde 8 gadi atpakaļ
vecāks
revīzija
87afd1800b

+ 11 - 2
platform/iphone/audio_driver_iphone.cpp

@@ -175,8 +175,17 @@ void AudioDriverIphone::unlock() {
 };
 
 void AudioDriverIphone::finish() {
-
-	memdelete_arr(samples_in);
+	AURenderCallbackStruct callback;
+	zeromem(&callback, sizeof(AURenderCallbackStruct));
+	OSStatus result = AudioUnitSetProperty(audio_unit, kAudioUnitProperty_SetRenderCallback, kAudioUnitScope_Input, 0, &callback, sizeof(callback));
+	if (result != noErr) {
+		ERR_PRINT("AudioUnitSetProperty failed");
+	}
+
+	if (samples_in) {
+		memdelete_arr(samples_in);
+		samples_in = NULL;
+	}
 };
 
 AudioDriverIphone::AudioDriverIphone() {

+ 8 - 6
platform/iphone/os_iphone.cpp

@@ -371,6 +371,14 @@ void OSIPhone::finalize() {
 	if (main_loop) // should not happen?
 		memdelete(main_loop);
 
+	spatial_sound_server->finish();
+	memdelete(spatial_sound_server);
+	spatial_sound_2d_server->finish();
+	memdelete(spatial_sound_2d_server);
+
+	audio_server->finish();
+	memdelete(audio_server);
+
 	visual_server->finish();
 	memdelete(visual_server);
 	memdelete(rasterizer);
@@ -381,13 +389,7 @@ void OSIPhone::finalize() {
 	physics_2d_server->finish();
 	memdelete(physics_2d_server);
 
-	spatial_sound_server->finish();
-	memdelete(spatial_sound_server);
-
 	memdelete(input);
-
-	spatial_sound_2d_server->finish();
-	memdelete(spatial_sound_2d_server);
 };
 
 void OSIPhone::set_mouse_show(bool p_show){};

+ 2 - 1
servers/audio/audio_server_sw.cpp

@@ -726,7 +726,8 @@ void AudioServerSW::_thread_func(void *self) {
 
 	while (!as->exit_update_thread) {
 		as->_update_streams(true);
-		OS::get_singleton()->delay_usec(5000);
+		if (OS::get_singleton())
+			OS::get_singleton()->delay_usec(5000);
 	}
 }