Fix double finalisation of audio drivers
This commit is contained in:
parent
0586524b9c
commit
1ca107a057
4 changed files with 18 additions and 15 deletions
|
@ -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(¶meters, 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;
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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() {
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue