mirror of
https://github.com/goatcorp/Dalamud.git
synced 2025-12-12 18:27:23 +01:00
chore: don't report crashes when shutting down the game, if no devplugin is loaded
This commit is contained in:
parent
4f1257e79b
commit
ec0f52b7c3
4 changed files with 41 additions and 1 deletions
|
|
@ -244,6 +244,11 @@ internal sealed class DalamudConfiguration : IServiceType
|
|||
/// </summary>
|
||||
public int? PluginWaitBeforeFree { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets a value indicating whether or not crashes during shutdown should be reported.
|
||||
/// </summary>
|
||||
public bool ReportShutdownCrashes { get; set; }
|
||||
|
||||
/// <summary>
|
||||
/// Gets or sets a list of saved styles.
|
||||
/// </summary>
|
||||
|
|
|
|||
|
|
@ -11,6 +11,7 @@ using Dalamud.Game.Gui.Internal;
|
|||
using Dalamud.Interface.Internal;
|
||||
using Dalamud.Plugin.Internal;
|
||||
using Dalamud.Utility;
|
||||
using PInvoke;
|
||||
using Serilog;
|
||||
|
||||
#if DEBUG
|
||||
|
|
@ -103,6 +104,16 @@ internal sealed class Dalamud : IServiceType
|
|||
public void Unload()
|
||||
{
|
||||
Log.Information("Trigger unload");
|
||||
|
||||
var reportCrashesSetting = Service<DalamudConfiguration>.GetNullable()?.ReportShutdownCrashes ?? true;
|
||||
var pmHasDevPlugins = Service<PluginManager>.GetNullable()?.InstalledPlugins.Any(x => x.IsDev) ?? false;
|
||||
if (!reportCrashesSetting && !pmHasDevPlugins)
|
||||
{
|
||||
// Leaking on purpose for now
|
||||
var attribs = Kernel32.SECURITY_ATTRIBUTES.Create();
|
||||
Kernel32.CreateMutex(attribs, false, "DALAMUD_CRASHES_NO_MORE");
|
||||
}
|
||||
|
||||
this.unloadSignal.Set();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -759,6 +759,12 @@ internal class DalamudInterface : IDisposable, IServiceType
|
|||
}
|
||||
}
|
||||
|
||||
if (ImGui.MenuItem("Report crashes at shutdown", null, configuration.ReportShutdownCrashes))
|
||||
{
|
||||
configuration.ReportShutdownCrashes = !configuration.ReportShutdownCrashes;
|
||||
configuration.QueueSave();
|
||||
}
|
||||
|
||||
ImGui.Separator();
|
||||
|
||||
if (ImGui.MenuItem("Open Dalamud branch switcher"))
|
||||
|
|
|
|||
|
|
@ -739,6 +739,11 @@ int main() {
|
|||
|
||||
std::cout << "Crash triggered" << std::endl;
|
||||
|
||||
auto shutup_mutex = CreateMutex(NULL, false, L"DALAMUD_CRASHES_NO_MORE");
|
||||
bool shutup = false;
|
||||
if (shutup_mutex == NULL && GetLastError() == ERROR_ALREADY_EXISTS)
|
||||
shutup = true;
|
||||
|
||||
/*
|
||||
Hard won wisdom: changing symbol path with SymSetSearchPath() after modules
|
||||
have been loaded (invadeProcess=TRUE in SymInitialize() or SymRefreshModuleList())
|
||||
|
|
@ -795,7 +800,11 @@ int main() {
|
|||
std::wstring dumpError;
|
||||
if (dumpPath.empty()) {
|
||||
std::cout << "Skipping dump path, as log directory has not been specified" << std::endl;
|
||||
} else {
|
||||
} else if (shutup) {
|
||||
std::cout << "Skipping dump, was shutdown" << std::endl;
|
||||
}
|
||||
else
|
||||
{
|
||||
MINIDUMP_EXCEPTION_INFORMATION mdmp_info{};
|
||||
mdmp_info.ThreadId = GetThreadId(exinfo.hThreadHandle);
|
||||
mdmp_info.ExceptionPointers = exinfo.pExceptionPointers;
|
||||
|
|
@ -821,6 +830,10 @@ int main() {
|
|||
std::wostringstream log;
|
||||
log << std::format(L"Unhandled native exception occurred at {}", to_address_string(exinfo.ContextRecord.Rip, false)) << std::endl;
|
||||
log << std::format(L"Code: {:X}", exinfo.ExceptionRecord.ExceptionCode) << std::endl;
|
||||
|
||||
if (shutup)
|
||||
log << L"======= Crash handler was globally muted(shutdown?) =======" << std::endl;
|
||||
|
||||
if (dumpPath.empty())
|
||||
log << L"Dump skipped" << std::endl;
|
||||
else if (dumpError.empty())
|
||||
|
|
@ -971,6 +984,11 @@ int main() {
|
|||
submitThread = {};
|
||||
}
|
||||
|
||||
if (shutup) {
|
||||
TerminateProcess(g_hProcess, exinfo.ExceptionRecord.ExceptionCode);
|
||||
return 0;
|
||||
}
|
||||
|
||||
int nButtonPressed = 0, nRadioButton = 0;
|
||||
if (FAILED(TaskDialogIndirect(&config, &nButtonPressed, &nRadioButton, nullptr))) {
|
||||
ResumeThread(exinfo.hThreadHandle);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue