aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--router/alc.cpp72
1 files changed, 34 insertions, 38 deletions
diff --git a/router/alc.cpp b/router/alc.cpp
index 1a8538b8..92fe69f7 100644
--- a/router/alc.cpp
+++ b/router/alc.cpp
@@ -249,7 +249,7 @@ static const ALCint alcMajorVersion = 1;
static const ALCint alcMinorVersion = 1;
-static std::mutex EnumerationLock;
+static std::recursive_mutex EnumerationLock;
static std::mutex ContextSwitchLock;
static std::atomic<ALCenum> LastError{ALC_NO_ERROR};
@@ -325,7 +325,8 @@ ALC_API ALCdevice* ALC_APIENTRY alcOpenDevice(const ALCchar *devicename)
devicename = nullptr;
if(devicename)
{
- { std::lock_guard<std::mutex> _{EnumerationLock};
+ {
+ std::lock_guard<std::recursive_mutex> _{EnumerationLock};
if(DevicesList.Names.empty())
(void)alcGetString(nullptr, ALC_DEVICE_SPECIFIER);
idx = GetDriverIndexForName(&DevicesList, devicename);
@@ -623,18 +624,18 @@ ALC_API const ALCchar* ALC_APIENTRY alcGetString(ALCdevice *device, ALCenum para
return alcExtensionList;
case ALC_DEVICE_SPECIFIER:
- { std::lock_guard<std::mutex> _{EnumerationLock};
+ {
+ std::lock_guard<std::recursive_mutex> _{EnumerationLock};
DevicesList.clear();
- ALint idx = 0;
+ ALint idx{0};
for(const auto &drv : DriverList)
{
/* Only enumerate names from drivers that support it. */
- if(drv.ALCVer >= MAKE_ALC_VER(1, 1) ||
- drv.alcIsExtensionPresent(nullptr, "ALC_ENUMERATION_EXT"))
+ if(drv.ALCVer >= MAKE_ALC_VER(1, 1)
+ || drv.alcIsExtensionPresent(nullptr, "ALC_ENUMERATION_EXT"))
AppendDeviceList(&DevicesList,
- drv.alcGetString(nullptr, ALC_DEVICE_SPECIFIER), idx
- );
- idx++;
+ drv.alcGetString(nullptr, ALC_DEVICE_SPECIFIER), idx);
+ ++idx;
}
/* Ensure the list is double-null termianted. */
if(DevicesList.Names.empty())
@@ -644,9 +645,10 @@ ALC_API const ALCchar* ALC_APIENTRY alcGetString(ALCdevice *device, ALCenum para
}
case ALC_ALL_DEVICES_SPECIFIER:
- { std::lock_guard<std::mutex> _{EnumerationLock};
+ {
+ std::lock_guard<std::recursive_mutex> _{EnumerationLock};
AllDevicesList.clear();
- ALint idx = 0;
+ ALint idx{0};
for(const auto &drv : DriverList)
{
/* If the driver doesn't support ALC_ENUMERATE_ALL_EXT, substitute
@@ -654,13 +656,11 @@ ALC_API const ALCchar* ALC_APIENTRY alcGetString(ALCdevice *device, ALCenum para
*/
if(drv.alcIsExtensionPresent(nullptr, "ALC_ENUMERATE_ALL_EXT"))
AppendDeviceList(&AllDevicesList,
- drv.alcGetString(nullptr, ALC_ALL_DEVICES_SPECIFIER), idx
- );
- else if(drv.ALCVer >= MAKE_ALC_VER(1, 1) ||
- drv.alcIsExtensionPresent(nullptr, "ALC_ENUMERATION_EXT"))
+ drv.alcGetString(nullptr, ALC_ALL_DEVICES_SPECIFIER), idx);
+ else if(drv.ALCVer >= MAKE_ALC_VER(1, 1)
+ || drv.alcIsExtensionPresent(nullptr, "ALC_ENUMERATION_EXT"))
AppendDeviceList(&AllDevicesList,
- drv.alcGetString(nullptr, ALC_DEVICE_SPECIFIER), idx
- );
+ drv.alcGetString(nullptr, ALC_DEVICE_SPECIFIER), idx);
++idx;
}
/* Ensure the list is double-null termianted. */
@@ -671,16 +671,16 @@ ALC_API const ALCchar* ALC_APIENTRY alcGetString(ALCdevice *device, ALCenum para
}
case ALC_CAPTURE_DEVICE_SPECIFIER:
- { std::lock_guard<std::mutex> _{EnumerationLock};
+ {
+ std::lock_guard<std::recursive_mutex> _{EnumerationLock};
CaptureDevicesList.clear();
- ALint idx = 0;
+ ALint idx{0};
for(const auto &drv : DriverList)
{
- if(drv.ALCVer >= MAKE_ALC_VER(1, 1) ||
- drv.alcIsExtensionPresent(nullptr, "ALC_EXT_CAPTURE"))
+ if(drv.ALCVer >= MAKE_ALC_VER(1, 1)
+ || drv.alcIsExtensionPresent(nullptr, "ALC_EXT_CAPTURE"))
AppendDeviceList(&CaptureDevicesList,
- drv.alcGetString(nullptr, ALC_CAPTURE_DEVICE_SPECIFIER), idx
- );
+ drv.alcGetString(nullptr, ALC_CAPTURE_DEVICE_SPECIFIER), idx);
++idx;
}
/* Ensure the list is double-null termianted. */
@@ -695,8 +695,8 @@ ALC_API const ALCchar* ALC_APIENTRY alcGetString(ALCdevice *device, ALCenum para
auto iter = std::find_if(DriverList.cbegin(), DriverList.cend(),
[](const DriverIface &drv) -> bool
{
- return drv.ALCVer >= MAKE_ALC_VER(1, 1) ||
- drv.alcIsExtensionPresent(nullptr, "ALC_ENUMERATION_EXT");
+ return drv.ALCVer >= MAKE_ALC_VER(1, 1)
+ || drv.alcIsExtensionPresent(nullptr, "ALC_ENUMERATION_EXT");
}
);
if(iter != DriverList.cend())
@@ -708,8 +708,7 @@ ALC_API const ALCchar* ALC_APIENTRY alcGetString(ALCdevice *device, ALCenum para
{
auto iter = std::find_if(DriverList.cbegin(), DriverList.cend(),
[](const DriverIface &drv) -> bool
- { return drv.alcIsExtensionPresent(nullptr, "ALC_ENUMERATE_ALL_EXT") != ALC_FALSE; }
- );
+ { return drv.alcIsExtensionPresent(nullptr, "ALC_ENUMERATE_ALL_EXT") != ALC_FALSE; });
if(iter != DriverList.cend())
return iter->alcGetString(nullptr, ALC_DEFAULT_ALL_DEVICES_SPECIFIER);
return "";
@@ -720,8 +719,8 @@ ALC_API const ALCchar* ALC_APIENTRY alcGetString(ALCdevice *device, ALCenum para
auto iter = std::find_if(DriverList.cbegin(), DriverList.cend(),
[](const DriverIface &drv) -> bool
{
- return drv.ALCVer >= MAKE_ALC_VER(1, 1) ||
- drv.alcIsExtensionPresent(nullptr, "ALC_EXT_CAPTURE");
+ return drv.ALCVer >= MAKE_ALC_VER(1, 1)
+ || drv.alcIsExtensionPresent(nullptr, "ALC_EXT_CAPTURE");
}
);
if(iter != DriverList.cend())
@@ -800,7 +799,8 @@ ALC_API ALCdevice* ALC_APIENTRY alcCaptureOpenDevice(const ALCchar *devicename,
devicename = nullptr;
if(devicename)
{
- { std::lock_guard<std::mutex> _{EnumerationLock};
+ {
+ std::lock_guard<std::recursive_mutex> _{EnumerationLock};
if(CaptureDevicesList.Names.empty())
(void)alcGetString(nullptr, ALC_CAPTURE_DEVICE_SPECIFIER);
idx = GetDriverIndexForName(&CaptureDevicesList, devicename);
@@ -813,21 +813,17 @@ ALC_API ALCdevice* ALC_APIENTRY alcCaptureOpenDevice(const ALCchar *devicename,
return nullptr;
}
TRACE("Found driver %d for name \"%s\"\n", idx, devicename);
- device = DriverList[idx].alcCaptureOpenDevice(
- devicename, frequency, format, buffersize
- );
+ device = DriverList[idx].alcCaptureOpenDevice(devicename, frequency, format, buffersize);
}
else
{
for(const auto &drv : DriverList)
{
- if(drv.ALCVer >= MAKE_ALC_VER(1, 1) ||
- drv.alcIsExtensionPresent(nullptr, "ALC_EXT_CAPTURE"))
+ if(drv.ALCVer >= MAKE_ALC_VER(1, 1)
+ || drv.alcIsExtensionPresent(nullptr, "ALC_EXT_CAPTURE"))
{
TRACE("Using default capture device from driver %d\n", idx);
- device = drv.alcCaptureOpenDevice(
- nullptr, frequency, format, buffersize
- );
+ device = drv.alcCaptureOpenDevice(nullptr, frequency, format, buffersize);
break;
}
++idx;