aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Robinson <[email protected]>2023-12-12 23:39:51 -0800
committerChris Robinson <[email protected]>2023-12-12 23:39:51 -0800
commitb81a270f6c1e795ca70d7684e0ccf35a19f247e2 (patch)
tree4cabf477f01f1b111f2340b79eae743a5802f7e8
parentc7774aa488961e0af2895008fb0063fb790b0a58 (diff)
Properly check that the device was playing before restarting it
-rw-r--r--alc/alc.cpp11
1 files changed, 4 insertions, 7 deletions
diff --git a/alc/alc.cpp b/alc/alc.cpp
index 3ab9325a..784c9661 100644
--- a/alc/alc.cpp
+++ b/alc/alc.cpp
@@ -3450,8 +3450,9 @@ FORCE_ALIGN ALCboolean ALC_APIENTRY alcReopenDeviceSOFT(ALCdevice *device,
}
std::lock_guard<std::mutex> _{dev->StateLock};
- /* Force the backend to stop mixing first since we're reopening. */
- if(dev->mDeviceState == DeviceState::Playing)
+ /* Force the backend device to stop first since we're opening another one. */
+ const bool wasPlaying{dev->mDeviceState == DeviceState::Playing};
+ if(wasPlaying)
{
dev->Backend->stop();
dev->mDeviceState = DeviceState::Configured;
@@ -3476,11 +3477,7 @@ FORCE_ALIGN ALCboolean ALC_APIENTRY alcReopenDeviceSOFT(ALCdevice *device,
alcSetError(dev.get(), (e.errorCode() == al::backend_error::OutOfMemory)
? ALC_OUT_OF_MEMORY : ALC_INVALID_VALUE);
- /* If the device is connected, not paused, and has contexts, ensure it
- * continues playing.
- */
- if(dev->Connected.load(std::memory_order_relaxed) && !dev->Flags.test(DevicePaused)
- && dev->mDeviceState == DeviceState::Configured)
+ if(dev->Connected.load(std::memory_order_relaxed) && wasPlaying)
{
try {
auto backend = dev->Backend.get();