mirror of
https://github.com/juce-framework/JUCE.git
synced 2026-01-10 23:44:24 +00:00
Windows: Catch and report exception when releasing dodgy ASIO drivers
This commit is contained in:
parent
b45ce09235
commit
da2cd2e619
1 changed files with 23 additions and 13 deletions
|
|
@ -336,7 +336,9 @@ public:
|
|||
|
||||
close();
|
||||
JUCE_ASIO_LOG ("closed");
|
||||
removeCurrentDriver();
|
||||
|
||||
if (! removeCurrentDriver())
|
||||
JUCE_ASIO_LOG ("** Driver crashed while being closed");
|
||||
}
|
||||
|
||||
void updateSampleRates()
|
||||
|
|
@ -451,7 +453,9 @@ public:
|
|||
if (needToReset)
|
||||
{
|
||||
JUCE_ASIO_LOG (" Resetting");
|
||||
removeCurrentDriver();
|
||||
|
||||
if (! removeCurrentDriver())
|
||||
JUCE_ASIO_LOG ("** Driver crashed while being closed");
|
||||
|
||||
loadDriver();
|
||||
String initError = initDriver();
|
||||
|
|
@ -1075,28 +1079,32 @@ private:
|
|||
}
|
||||
}
|
||||
|
||||
static bool shouldReleaseObject (const String& driverName)
|
||||
bool removeCurrentDriver()
|
||||
{
|
||||
return driverName != "Yamaha Steinberg USB ASIO";
|
||||
}
|
||||
bool releasedOK = true;
|
||||
|
||||
void removeCurrentDriver()
|
||||
{
|
||||
if (asioObject != nullptr)
|
||||
{
|
||||
char buffer[512] = {};
|
||||
asioObject->getDriverName (buffer);
|
||||
|
||||
if (shouldReleaseObject (buffer))
|
||||
#if ! JUCE_MINGW
|
||||
__try
|
||||
#endif
|
||||
{
|
||||
asioObject->Release();
|
||||
}
|
||||
#if ! JUCE_MINGW
|
||||
__except (EXCEPTION_EXECUTE_HANDLER) { releasedOK = false; }
|
||||
#endif
|
||||
|
||||
asioObject = nullptr;
|
||||
}
|
||||
|
||||
return releasedOK;
|
||||
}
|
||||
|
||||
bool loadDriver()
|
||||
{
|
||||
removeCurrentDriver();
|
||||
if (! removeCurrentDriver())
|
||||
JUCE_ASIO_LOG ("** Driver crashed while being closed");
|
||||
|
||||
bool crashed = false;
|
||||
bool ok = tryCreatingDriver (crashed);
|
||||
|
|
@ -1256,7 +1264,9 @@ private:
|
|||
{
|
||||
JUCE_ASIO_LOG_ERROR (error, err);
|
||||
disposeBuffers();
|
||||
removeCurrentDriver();
|
||||
|
||||
if (! removeCurrentDriver())
|
||||
JUCE_ASIO_LOG ("** Driver crashed while being closed");
|
||||
}
|
||||
else
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue