Crash auto recovery

in the worst way possible
This commit is contained in:
Natsumi
2025-12-23 00:43:04 +13:00
parent 9b20d62a90
commit 3a8627fd0e
6 changed files with 46 additions and 23 deletions

View File

@@ -80,7 +80,7 @@ namespace VRCX
break;
case CefTerminationStatus.ProcessCrashed:
_logger.Error("Browser crashed while.");
_logger.Error("Browser crashed.");
break;
case CefTerminationStatus.OutOfMemory:
@@ -91,6 +91,12 @@ namespace VRCX
_logger.Error($"Browser terminated with unhandled status '{status}' while at address.");
break;
}
if (chromiumWebBrowser.IsDisposed || chromiumWebBrowser.IsLoading)
return;
_logger.Info("Attempting to reload browser...");
chromiumWebBrowser.Reload();
}
}
}

View File

@@ -1,6 +1,7 @@
using CefSharp.Internals;
using System;
using System.IO;
using System.Threading;
namespace VRCX;
@@ -26,7 +27,7 @@ public class BrowserSubprocess
if (string.IsNullOrEmpty(type))
{
// If --type param missing from command line CEF/Chromium assums
// If --type param missing from command line CEF/Chromium assumes
// this is the main process (as all subprocesses must have a type param).
return;
}
@@ -46,9 +47,22 @@ public class BrowserSubprocess
var methodArgs = new object[] { args };
var exitCode = mainMethod.Invoke(null, methodArgs);
Environment.Exit((int)exitCode);
int exitCode = -1;
while (true)
{
try
{
exitCode = (int)mainMethod.Invoke(null, methodArgs);
}
catch (Exception ex)
{
// TODO: Log this exception somewhere more useful
Console.WriteLine("Exception in BrowserSubprocess: " + ex);
Thread.Sleep(1000);
continue;
}
Environment.Exit(exitCode);
}
}
}