Fix double finalisation of audio drivers

This commit is contained in:
Marcelo Fernandez 2017-08-02 11:45:19 -03:00
parent 0586524b9c
commit 1ca107a057
4 changed files with 18 additions and 15 deletions

View file

@ -79,7 +79,7 @@ int AudioDriverRtAudio::callback(void *outputBuffer, void *inputBuffer, unsigned
Error AudioDriverRtAudio::init() {
active = false;
mutex = NULL;
mutex = Mutex::create(true);
dac = memnew(RtAudio);
ERR_EXPLAIN("Cannot initialize RtAudio audio driver: No devices present.")
@ -136,7 +136,6 @@ Error AudioDriverRtAudio::init() {
try {
dac->openStream(&parameters, NULL, RTAUDIO_SINT32, mix_rate, &buffer_size, &callback, this, &options);
mutex = Mutex::create(true);
active = true;
break;
@ -162,6 +161,7 @@ Error AudioDriverRtAudio::init() {
try {
dac->closeStream();
active = false;
} catch (RtAudioError &e) {
ERR_PRINT(e.what());
ERR_FAIL_V(ERR_UNAVAILABLE);
@ -212,17 +212,27 @@ void AudioDriverRtAudio::unlock() {
void AudioDriverRtAudio::finish() {
if (active && dac->isStreamOpen())
lock();
if (active && dac->isStreamOpen()) {
dac->closeStream();
if (mutex)
active = false;
}
unlock();
if (mutex) {
memdelete(mutex);
if (dac)
mutex = NULL;
}
if (dac) {
memdelete(dac);
dac = NULL;
}
}
AudioDriverRtAudio::AudioDriverRtAudio() {
mutex = NULL;
dac = NULL;
mix_rate = 44100;
speaker_mode = SPEAKER_MODE_STEREO;
}

View file

@ -1192,10 +1192,6 @@ void OS_Windows::finalize() {
main_loop = NULL;
for (int i = 0; i < get_audio_driver_count(); i++) {
AudioDriverManager::get_driver(i)->finish();
}
memdelete(joypad);
memdelete(input);

View file

@ -529,10 +529,6 @@ void OS_X11::finalize() {
memdelete(main_loop);
main_loop = NULL;
for (int i = 0; i < get_audio_driver_count(); i++) {
AudioDriverManager::get_driver(i)->finish();
}
/*
if (debugger_connection_console) {
memdelete(debugger_connection_console);

View file

@ -772,10 +772,11 @@ void AudioServer::finish() {
buses.clear();
if (AudioDriver::get_singleton()) {
AudioDriver::get_singleton()->finish();
for (int i = 0; i < AudioDriverManager::get_driver_count(); i++) {
AudioDriverManager::get_driver(i)->finish();
}
}
void AudioServer::update() {
}