mirror of
https://github.com/clangen/musikcube.git
synced 2025-01-16 04:14:05 +00:00
Fix race condition by adding required locking in WasapiOut to avoid rare
crash.
This commit is contained in:
parent
6bae859ac2
commit
4bb9bbad3c
@ -1,3 +1,7 @@
|
|||||||
|
0.96.10
|
||||||
|
|
||||||
|
* fixed race condition in WasapiOut that caused the app to crash.
|
||||||
|
|
||||||
0.96.9
|
0.96.9
|
||||||
|
|
||||||
* fixed `-rpath` to use `$ORIGIN` instead of `./` to appease `Feodra 35`.
|
* fixed `-rpath` to use `$ORIGIN` instead of `./` to appease `Feodra 35`.
|
||||||
|
@ -359,6 +359,8 @@ OutputState WasapiOut::Play(IBuffer *buffer, IBufferProvider *provider) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void WasapiOut::Reset() {
|
void WasapiOut::Reset() {
|
||||||
|
Lock lock(this->stateMutex);
|
||||||
|
|
||||||
if (this->simpleAudioVolume) {
|
if (this->simpleAudioVolume) {
|
||||||
this->simpleAudioVolume->Release();
|
this->simpleAudioVolume->Release();
|
||||||
}
|
}
|
||||||
@ -516,6 +518,7 @@ found_or_done:
|
|||||||
|
|
||||||
int WasapiOut::GetDefaultSampleRate() {
|
int WasapiOut::GetDefaultSampleRate() {
|
||||||
int result = -1;
|
int result = -1;
|
||||||
|
Lock lock(this->stateMutex);
|
||||||
this->InitializeAudioClient();
|
this->InitializeAudioClient();
|
||||||
if (this->audioClient) {
|
if (this->audioClient) {
|
||||||
WAVEFORMATEX* deviceFormat = nullptr;
|
WAVEFORMATEX* deviceFormat = nullptr;
|
||||||
@ -529,6 +532,8 @@ int WasapiOut::GetDefaultSampleRate() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool WasapiOut::InitializeAudioClient() {
|
bool WasapiOut::InitializeAudioClient() {
|
||||||
|
/* assumes stateMutex is locked */
|
||||||
|
|
||||||
CoInitializeEx(nullptr, COINIT_MULTITHREADED);
|
CoInitializeEx(nullptr, COINIT_MULTITHREADED);
|
||||||
|
|
||||||
HRESULT result = S_FALSE;
|
HRESULT result = S_FALSE;
|
||||||
@ -584,6 +589,7 @@ bool WasapiOut::InitializeAudioClient() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
bool WasapiOut::Configure(IBuffer *buffer) {
|
bool WasapiOut::Configure(IBuffer *buffer) {
|
||||||
|
/* assumes stateMutex is locked */
|
||||||
if (this->audioClient &&
|
if (this->audioClient &&
|
||||||
waveFormat.Format.nChannels == buffer->Channels() &&
|
waveFormat.Format.nChannels == buffer->Channels() &&
|
||||||
waveFormat.Format.nSamplesPerSec == buffer->SampleRate())
|
waveFormat.Format.nSamplesPerSec == buffer->SampleRate())
|
||||||
|
Loading…
Reference in New Issue
Block a user