diff options
author | Chris Robinson <[email protected]> | 2012-12-02 11:20:20 -0800 |
---|---|---|
committer | Chris Robinson <[email protected]> | 2012-12-02 11:30:23 -0800 |
commit | 1fb9311d82ff7e591aabb209eb5aaba108efc20e (patch) | |
tree | 5d7a6485ec0723394f18f4a60a43d7ec917e1940 /Alc/backends/mmdevapi.c | |
parent | dd34daed42adb98fe2a167f6fc9aaf98947a3cc3 (diff) |
Lock the device before calling aluHandleDisconnect
PulseAudio causes an assert if being relocked inside a callback on the worker
thread, where aluHandleDisconnect is called. We can assume it's already locked
there, so just make sure the device is locked before being calling it.
Diffstat (limited to 'Alc/backends/mmdevapi.c')
-rw-r--r-- | Alc/backends/mmdevapi.c | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/Alc/backends/mmdevapi.c b/Alc/backends/mmdevapi.c index de4201dd..9c934095 100644 --- a/Alc/backends/mmdevapi.c +++ b/Alc/backends/mmdevapi.c @@ -229,7 +229,9 @@ static ALuint MMDevApiProc(ALvoid *ptr) if(FAILED(hr)) { ERR("CoInitialize(NULL) failed: 0x%08lx\n", hr); + ALCdevice_Lock(device); aluHandleDisconnect(device); + ALCdevice_Unlock(device); return 0; } @@ -243,7 +245,9 @@ static ALuint MMDevApiProc(ALvoid *ptr) if(FAILED(hr)) { ERR("Failed to get padding: 0x%08lx\n", hr); + ALCdevice_Lock(device); aluHandleDisconnect(device); + ALCdevice_Unlock(device); break; } data->Padding = written; @@ -271,7 +275,9 @@ static ALuint MMDevApiProc(ALvoid *ptr) if(FAILED(hr)) { ERR("Failed to buffer data: 0x%08lx\n", hr); + ALCdevice_Lock(device); aluHandleDisconnect(device); + ALCdevice_Unlock(device); break; } } |