Terminate early when hang in encoder is detected

This commit is contained in:
Yukino Song
2025-02-03 03:28:32 +08:00
parent 8b0053437a
commit 6d8d063454
7 changed files with 75 additions and 9 deletions

View File

@@ -213,9 +213,20 @@ void closeVDisplayDevice() {
}
DRIVER_STATUS openVDisplayDevice() {
SUDOVDA_DRIVER_HANDLE = OpenDevice(&SUVDA_INTERFACE_GUID);
if (SUDOVDA_DRIVER_HANDLE == INVALID_HANDLE_VALUE) {
return DRIVER_STATUS::FAILED;
uint32_t retryInterval = 20;
while (true) {
SUDOVDA_DRIVER_HANDLE = OpenDevice(&SUVDA_INTERFACE_GUID);
if (SUDOVDA_DRIVER_HANDLE == INVALID_HANDLE_VALUE) {
if (retryInterval > 320) {
printf("[SUDOVDA] Open device failed!\n");
return DRIVER_STATUS::FAILED;
}
retryInterval *= 2;
Sleep(retryInterval);
continue;
}
break;
}
if (!CheckProtocolCompatible(SUDOVDA_DRIVER_HANDLE)) {
@@ -317,7 +328,7 @@ std::wstring createVirtualDisplay(
wchar_t deviceName[CCHDEVICENAME]{};
while (!GetAddedDisplayName(output, deviceName)) {
Sleep(retryInterval);
if (retryInterval > 160) {
if (retryInterval > 320) {
printf("[SUDOVDA] Cannot get name for newly added virtual display!\n");
return std::wstring();
}