2
0
Эх сурвалжийг харах

Merge pull request #10045 from marcelofg55/audioserver_finish

Fix double finalisation of audio drivers
Rémi Verschelde 8 жил өмнө
parent
commit
2bb8ab7b89

+ 15 - 5
drivers/rtaudio/audio_driver_rtaudio.cpp

@@ -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;
 }

+ 0 - 4
platform/windows/os_windows.cpp

@@ -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);
 

+ 0 - 4
platform/x11/os_x11.cpp

@@ -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);

+ 3 - 2
servers/audio_server.cpp

@@ -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() {
 }