From 116e735e8b30d22d376668c804ec979c68acd8d1 Mon Sep 17 00:00:00 2001 From: Marcelo Fernandez Date: Mon, 2 Oct 2017 10:39:32 -0300 Subject: [PATCH] Fix possible crash at exit on iOS --- platform/iphone/audio_driver_iphone.cpp | 11 ++++++++++- platform/iphone/os_iphone.cpp | 14 ++++++++------ servers/audio/audio_server_sw.cpp | 3 ++- 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/platform/iphone/audio_driver_iphone.cpp b/platform/iphone/audio_driver_iphone.cpp index b78c54ffc68..941093c95c4 100644 --- a/platform/iphone/audio_driver_iphone.cpp +++ b/platform/iphone/audio_driver_iphone.cpp @@ -175,8 +175,17 @@ void AudioDriverIphone::unlock() { }; void AudioDriverIphone::finish() { + 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"); + } - memdelete_arr(samples_in); + if (samples_in) { + memdelete_arr(samples_in); + samples_in = NULL; + } }; AudioDriverIphone::AudioDriverIphone() { diff --git a/platform/iphone/os_iphone.cpp b/platform/iphone/os_iphone.cpp index 10dc296327c..cfd36037ec8 100644 --- a/platform/iphone/os_iphone.cpp +++ b/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){}; diff --git a/servers/audio/audio_server_sw.cpp b/servers/audio/audio_server_sw.cpp index 28da2c1d22c..841552d2f2e 100644 --- a/servers/audio/audio_server_sw.cpp +++ b/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); } }