summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorisanae <14251494+isanae@users.noreply.github.com>2020-11-07 19:05:15 -0500
committerisanae <14251494+isanae@users.noreply.github.com>2020-11-07 20:16:27 -0500
commit08c952e53a4efcd5b50c0ec947bf216101c027ef (patch)
tree30d077e801483d1e9e3cb3ee27a308d255cefe05
parentb4f6275c3ef888551e14e5d64739e1c32978b8e8 (diff)
stopped using core dump stuff from usvfs, mo has its own
set exception handler at the start, it can handle not having qt or data paths hopefully fixed infinite crash dumps
-rw-r--r--src/CMakeLists.txt1
-rw-r--r--src/env.cpp27
-rw-r--r--src/env.h21
-rw-r--r--src/envdump.h30
-rw-r--r--src/main.cpp27
-rw-r--r--src/mainwindow.cpp4
-rw-r--r--src/moapplication.cpp4
-rw-r--r--src/organizercore.cpp48
-rw-r--r--src/organizercore.h13
-rw-r--r--src/settings.cpp12
-rw-r--r--src/settings.h9
-rw-r--r--src/settingsdialogdiagnostics.cpp20
-rw-r--r--src/usvfsconnector.cpp33
-rw-r--r--src/usvfsconnector.h3
14 files changed, 146 insertions, 106 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index eec33460..30614e59 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -70,6 +70,7 @@ add_filter(NAME src/downloads GROUPS
add_filter(NAME src/env GROUPS
env
+ envdump
envfs
envmetrics
envmodule
diff --git a/src/env.cpp b/src/env.cpp
index 5bed84c1..98d2e6ea 100644
--- a/src/env.cpp
+++ b/src/env.cpp
@@ -4,6 +4,7 @@
#include "envsecurity.h"
#include "envshortcut.h"
#include "envwindows.h"
+#include "envdump.h"
#include "settings.h"
#include <log.h>
#include <utility.h>
@@ -1182,8 +1183,16 @@ HandlePtr tempFile(const std::wstring dir)
return {};
}
-HandlePtr dumpFile()
+HandlePtr dumpFile(const wchar_t* dir)
{
+ // try the given directory, if any
+ if (dir) {
+ HandlePtr h = tempFile(dir);
+ if (h.get() != INVALID_HANDLE_VALUE) {
+ return h;
+ }
+ }
+
// try the current directory
HandlePtr h = tempFile(L".");
if (h.get() != INVALID_HANDLE_VALUE) {
@@ -1193,10 +1202,10 @@ HandlePtr dumpFile()
std::wclog << L"cannot write dump file in current directory\n";
// try the temp directory
- const auto dir = tempDir();
+ const auto temp = tempDir();
- if (!dir.empty()) {
- h = tempFile(dir.c_str());
+ if (!temp.empty()) {
+ h = tempFile(temp.c_str());
if (h.get() != INVALID_HANDLE_VALUE) {
return h;
}
@@ -1235,11 +1244,11 @@ std::string toString(CoreDumpTypes type)
}
-bool createMiniDump(HANDLE process, CoreDumpTypes type)
+bool createMiniDump(const wchar_t* dir, HANDLE process, CoreDumpTypes type)
{
const DWORD pid = GetProcessId(process);
- const HandlePtr file = dumpFile();
+ const HandlePtr file = dumpFile(dir);
if (!file) {
std::wcerr << L"nowhere to write the dump file\n";
return false;
@@ -1278,10 +1287,10 @@ bool createMiniDump(HANDLE process, CoreDumpTypes type)
}
-bool coredump(CoreDumpTypes type)
+bool coredump(const wchar_t* dir, CoreDumpTypes type)
{
std::wclog << L"creating minidump for the current process\n";
- return createMiniDump(GetCurrentProcess(), type);
+ return createMiniDump(dir, GetCurrentProcess(), type);
}
bool coredumpOther(CoreDumpTypes type)
@@ -1309,7 +1318,7 @@ bool coredumpOther(CoreDumpTypes type)
return false;
}
- return createMiniDump(handle.get(), type);
+ return createMiniDump(nullptr, handle.get(), type);
}
} // namespace
diff --git a/src/env.h b/src/env.h
index dbbd5cf4..e9cb7a36 100644
--- a/src/env.h
+++ b/src/env.h
@@ -309,27 +309,6 @@ bool registryValueExists(const QString& key, const QString& value);
//
void deleteRegistryKeyIfEmpty(const QString& name);
-
-enum class CoreDumpTypes
-{
- Mini = 1,
- Data,
- Full
-};
-
-
-CoreDumpTypes coreDumpTypeFromString(const std::string& s);
-std::string toString(CoreDumpTypes type);
-
-// creates a minidump file for this process
-//
-bool coredump(CoreDumpTypes type);
-
-// finds another process with the same name as this one and creates a minidump
-// file for it
-//
-bool coredumpOther(CoreDumpTypes type);
-
} // namespace env
#endif // ENV_ENV_H
diff --git a/src/envdump.h b/src/envdump.h
new file mode 100644
index 00000000..355df783
--- /dev/null
+++ b/src/envdump.h
@@ -0,0 +1,30 @@
+#ifndef MODORGANIZER_ENVDUMP_INCLUDED
+#define MODORGANIZER_ENVDUMP_INCLUDED
+
+namespace env
+{
+
+enum class CoreDumpTypes
+{
+ None,
+ Mini,
+ Data,
+ Full
+};
+
+
+CoreDumpTypes coreDumpTypeFromString(const std::string& s);
+std::string toString(CoreDumpTypes type);
+
+// creates a minidump file for this process
+//
+bool coredump(const wchar_t* dir, CoreDumpTypes type);
+
+// finds another process with the same name as this one and creates a minidump
+// file for it
+//
+bool coredumpOther(CoreDumpTypes type);
+
+} // namespace
+
+#endif // MODORGANIZER_ENVDUMP_INCLUDED
diff --git a/src/main.cpp b/src/main.cpp
index a2e16cc0..ad074501 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -3,8 +3,9 @@
#include "moapplication.h"
#include "organizercore.h"
#include "commandline.h"
+#include "env.h"
+#include "thread_utils.h"
#include "shared/util.h"
-#include <usvfs.h>
#include <log.h>
using namespace MOBase;
@@ -17,6 +18,7 @@ int forwardToPrimary(SingleInstance& instance, const cl::CommandLine& cl);
int main(int argc, char *argv[])
{
MOShared::SetThisThreadName("main");
+ setExceptionHandlers();
cl::CommandLine cl;
if (auto r=cl.run(GetCommandLineW())) {
@@ -53,20 +55,20 @@ int forwardToPrimary(SingleInstance& instance, const cl::CommandLine& cl)
LONG WINAPI onUnhandledException(_EXCEPTION_POINTERS* ptrs)
{
- const std::wstring& dumpPath = OrganizerCore::crashDumpsPath();
+ const auto path = OrganizerCore::getGlobalCoreDumpPath();
+ const auto type = OrganizerCore::getGlobalCoreDumpType();
- const int r = CreateMiniDump(
- ptrs, OrganizerCore::getGlobalCrashDumpsType(), dumpPath.c_str());
+ const auto r = env::coredump(path.empty() ? nullptr : path.c_str(), type);
- if (r == 0) {
- log::error("ModOrganizer has crashed, crash dump created.");
+ if (r) {
+ log::error("ModOrganizer has crashed, core dump created.");
} else {
- log::error(
- "ModOrganizer has crashed, CreateMiniDump failed ({}, error {}).",
- r, GetLastError());
+ log::error("ModOrganizer has crashed, core dump failed");
}
- if (g_prevExceptionFilter && ptrs)
+ // g_prevExceptionFilter somehow sometimes point to this function, making this
+ // recurse and create hundreds of core dump, not sure why
+ if (g_prevExceptionFilter && ptrs && g_prevExceptionFilter != onUnhandledException)
return g_prevExceptionFilter(ptrs);
else
return EXCEPTION_CONTINUE_SEARCH;
@@ -95,6 +97,11 @@ void onTerminate() noexcept
void setExceptionHandlers()
{
+ if (g_prevExceptionFilter) {
+ // already called
+ return;
+ }
+
g_prevExceptionFilter = SetUnhandledExceptionFilter(onUnhandledException);
g_prevTerminateHandler = std::set_terminate(onTerminate);
}
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index ea8a0efe..41958b80 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -5084,7 +5084,7 @@ void MainWindow::on_actionSettings_triggered()
bool proxy = settings.network().useProxy();
DownloadManager *dlManager = m_OrganizerCore.downloadManager();
const bool oldCheckForUpdates = settings.checkForUpdates();
- const int oldMaxDumps = settings.diagnostics().crashDumpsMax();
+ const int oldMaxDumps = settings.diagnostics().maxCoreDumps();
SettingsDialog dialog(&m_PluginContainer, settings, this);
@@ -5171,7 +5171,7 @@ void MainWindow::on_actionSettings_triggered()
m_OrganizerCore.setLogLevel(settings.diagnostics().logLevel());
- if (settings.diagnostics().crashDumpsMax() != oldMaxDumps) {
+ if (settings.diagnostics().maxCoreDumps() != oldMaxDumps) {
m_OrganizerCore.cycleDiagnostics();
}
diff --git a/src/moapplication.cpp b/src/moapplication.cpp
index 24cafd05..bb7b4922 100644
--- a/src/moapplication.cpp
+++ b/src/moapplication.cpp
@@ -188,8 +188,6 @@ int MOApplication::doOneRun(SingleInstance& singleInstance)
const QString dataPath = currentInstance->directory();
setProperty("dataPath", dataPath);
- setExceptionHandlers();
-
if (!setLogDirectory(dataPath)) {
reportError("Failed to create log folder");
InstanceManager::singleton().clearCurrentInstance();
@@ -272,7 +270,7 @@ int MOApplication::runApplication(
// global crashDumpType sits in OrganizerCore to make a bit less ugly to
// update it when the settings are changed during runtime
- OrganizerCore::setGlobalCrashDumpsType(settings.diagnostics().crashDumpsType());
+ OrganizerCore::setGlobalCoreDumpType(settings.diagnostics().coreDumpType());
env::Environment env;
env.dump(settings);
diff --git a/src/organizercore.cpp b/src/organizercore.cpp
index d01aab96..f57903e2 100644
--- a/src/organizercore.cpp
+++ b/src/organizercore.cpp
@@ -76,8 +76,7 @@
using namespace MOShared;
using namespace MOBase;
-//static
-CrashDumpsType OrganizerCore::m_globalCrashDumpsType = CrashDumpsType::None;
+static env::CoreDumpTypes g_coreDumpType = env::CoreDumpTypes::Mini;
template <typename InputIterator>
QStringList toStringList(InputIterator current, InputIterator end)
@@ -478,7 +477,7 @@ bool OrganizerCore::bootstrap()
m_Settings.paths().mods(),
m_Settings.paths().downloads(),
m_Settings.paths().overwrite(),
- QString::fromStdWString(crashDumpsPath())
+ QString::fromStdWString(getGlobalCoreDumpPath())
};
for (auto&& dir : dirs) {
@@ -497,14 +496,14 @@ bool OrganizerCore::bootstrap()
// log if there are any dmp files
const auto hasCrashDumps =
- !QDir(QString::fromStdWString(crashDumpsPath()))
+ !QDir(QString::fromStdWString(getGlobalCoreDumpPath()))
.entryList({"*.dmp"}, QDir::Files)
.empty();
if (hasCrashDumps) {
log::debug(
"there are crash dumps in '{}'",
- QString::fromStdWString(crashDumpsPath()));
+ QString::fromStdWString(getGlobalCoreDumpPath()));
}
return true;
@@ -528,13 +527,14 @@ void OrganizerCore::prepareVFS()
}
void OrganizerCore::updateVFSParams(
- log::Levels logLevel, CrashDumpsType crashDumpsType,
+ log::Levels logLevel, env::CoreDumpTypes coreDumpType,
const QString& crashDumpsPath,
std::chrono::seconds spawnDelay, QString executableBlacklist)
{
- setGlobalCrashDumpsType(crashDumpsType);
+ setGlobalCoreDumpType(coreDumpType);
+
m_USVFS.updateParams(
- logLevel, crashDumpsType, crashDumpsPath, spawnDelay, executableBlacklist);
+ logLevel, coreDumpType, crashDumpsPath, spawnDelay, executableBlacklist);
}
void OrganizerCore::setLogLevel(log::Levels level)
@@ -543,8 +543,8 @@ void OrganizerCore::setLogLevel(log::Levels level)
updateVFSParams(
m_Settings.diagnostics().logLevel(),
- m_Settings.diagnostics().crashDumpsType(),
- QString::fromStdWString(crashDumpsPath()),
+ m_Settings.diagnostics().coreDumpType(),
+ QString::fromStdWString(getGlobalCoreDumpPath()),
m_Settings.diagnostics().spawnDelay(),
m_Settings.executablesBlacklist());
@@ -553,8 +553,8 @@ void OrganizerCore::setLogLevel(log::Levels level)
bool OrganizerCore::cycleDiagnostics()
{
- const auto maxDumps = settings().diagnostics().crashDumpsMax();
- const auto path = QString::fromStdWString(crashDumpsPath());
+ const auto maxDumps = settings().diagnostics().maxCoreDumps();
+ const auto path = QString::fromStdWString(getGlobalCoreDumpPath());
if (maxDumps > 0) {
removeOldFiles(path, "*.dmp", maxDumps, QDir::Time|QDir::Reversed);
@@ -563,16 +563,26 @@ bool OrganizerCore::cycleDiagnostics()
return true;
}
-void OrganizerCore::setGlobalCrashDumpsType(CrashDumpsType type)
+env::CoreDumpTypes OrganizerCore::getGlobalCoreDumpType()
+{
+ return g_coreDumpType;
+}
+
+void OrganizerCore::setGlobalCoreDumpType(env::CoreDumpTypes type)
{
- m_globalCrashDumpsType = type;
+ g_coreDumpType = type;
}
-std::wstring OrganizerCore::crashDumpsPath() {
- return (
- qApp->property("dataPath").toString() + "/"
- + QString::fromStdWString(AppConfig::dumpsDir())
- ).toStdWString();
+std::wstring OrganizerCore::getGlobalCoreDumpPath()
+{
+ if (qApp) {
+ const auto dp = qApp->property("dataPath");
+ if (!dp.isNull()) {
+ return dp.toString().toStdWString() + L"/" + AppConfig::dumpsDir();
+ }
+ }
+
+ return {};
}
void OrganizerCore::setCurrentProfile(const QString &profileName)
diff --git a/src/organizercore.h b/src/organizercore.h
index 80b89a43..b566e626 100644
--- a/src/organizercore.h
+++ b/src/organizercore.h
@@ -13,6 +13,7 @@
#include "moshortcut.h"
#include "processrunner.h"
#include "uilocker.h"
+#include "envdump.h"
#include <imoinfo.h>
#include <iplugindiagnose.h>
#include <versioninfo.h>
@@ -277,17 +278,17 @@ public:
void prepareVFS();
void updateVFSParams(
- MOBase::log::Levels logLevel, CrashDumpsType crashDumpsType,
- const QString& crashDumpsPath, std::chrono::seconds spawnDelay,
+ MOBase::log::Levels logLevel, env::CoreDumpTypes coreDumpType,
+ const QString& coreDumpsPath, std::chrono::seconds spawnDelay,
QString executableBlacklist);
void setLogLevel(MOBase::log::Levels level);
bool cycleDiagnostics();
- static CrashDumpsType getGlobalCrashDumpsType() { return m_globalCrashDumpsType; }
- static void setGlobalCrashDumpsType(CrashDumpsType crashDumpsType);
- static std::wstring crashDumpsPath();
+ static env::CoreDumpTypes getGlobalCoreDumpType();
+ static void setGlobalCoreDumpType(env::CoreDumpTypes type);
+ static std::wstring getGlobalCoreDumpPath();
/**
* @brief Returns the name of all the mods in the priority order of the given profile.
@@ -487,8 +488,6 @@ private:
UsvfsConnector m_USVFS;
UILocker m_UILocker;
-
- static CrashDumpsType m_globalCrashDumpsType;
};
#endif // ORGANIZERCORE_H
diff --git a/src/settings.cpp b/src/settings.cpp
index 99b41e1f..a8ada6ba 100644
--- a/src/settings.cpp
+++ b/src/settings.cpp
@@ -2110,23 +2110,23 @@ void DiagnosticsSettings::setLootLogLevel(lootcli::LogLevels level)
set(m_Settings, "Settings", "loot_log_level", level);
}
-CrashDumpsType DiagnosticsSettings::crashDumpsType() const
+env::CoreDumpTypes DiagnosticsSettings::coreDumpType() const
{
- return get<CrashDumpsType>(m_Settings,
- "Settings", "crash_dumps_type", CrashDumpsType::Mini);
+ return get<env::CoreDumpTypes>(m_Settings,
+ "Settings", "crash_dumps_type", env::CoreDumpTypes::Mini);
}
-void DiagnosticsSettings::setCrashDumpsType(CrashDumpsType type)
+void DiagnosticsSettings::setCoreDumpType(env::CoreDumpTypes type)
{
set(m_Settings, "Settings", "crash_dumps_type", type);
}
-int DiagnosticsSettings::crashDumpsMax() const
+int DiagnosticsSettings::maxCoreDumps() const
{
return get<int>(m_Settings, "Settings", "crash_dumps_max", 5);
}
-void DiagnosticsSettings::setCrashDumpsMax(int n)
+void DiagnosticsSettings::setMaxCoreDumps(int n)
{
set(m_Settings, "Settings", "crash_dumps_max", n);
}
diff --git a/src/settings.h b/src/settings.h
index fc7789f0..df081c5c 100644
--- a/src/settings.h
+++ b/src/settings.h
@@ -21,6 +21,7 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#define SETTINGS_H
#include "loadmechanism.h"
+#include "envdump.h"
#include <filterwidget.h>
#include <lootcli/lootcli.h>
#include <questionboxmemory.h>
@@ -651,13 +652,13 @@ public:
// crash dump type for both MO and usvfs
//
- CrashDumpsType crashDumpsType() const;
- void setCrashDumpsType(CrashDumpsType type);
+ env::CoreDumpTypes coreDumpType() const;
+ void setCoreDumpType(env::CoreDumpTypes type);
// maximum number of dump files keps, for both MO and usvfs
//
- int crashDumpsMax() const;
- void setCrashDumpsMax(int n);
+ int maxCoreDumps() const;
+ void setMaxCoreDumps(int n);
std::chrono::seconds spawnDelay() const;
void setSpawnDelay(std::chrono::seconds t);
diff --git a/src/settingsdialogdiagnostics.cpp b/src/settingsdialogdiagnostics.cpp
index 4ade6900..33175a66 100644
--- a/src/settingsdialogdiagnostics.cpp
+++ b/src/settingsdialogdiagnostics.cpp
@@ -13,7 +13,7 @@ DiagnosticsSettingsTab::DiagnosticsSettingsTab(Settings& s, SettingsDialog& d)
setLootLogLevel();
setCrashDumpTypesBox();
- ui->dumpsMaxEdit->setValue(settings().diagnostics().crashDumpsMax());
+ ui->dumpsMaxEdit->setValue(settings().diagnostics().maxCoreDumps());
QString logsPath = qApp->property("dataPath").toString()
+ "/" + QString::fromStdWString(AppConfig::logPath());
@@ -22,7 +22,7 @@ DiagnosticsSettingsTab::DiagnosticsSettingsTab(Settings& s, SettingsDialog& d)
ui->diagnosticsExplainedLabel->text()
.replace("LOGS_FULL_PATH", logsPath)
.replace("LOGS_DIR", QString::fromStdWString(AppConfig::logPath()))
- .replace("DUMPS_FULL_PATH", QString::fromStdWString(OrganizerCore::crashDumpsPath()))
+ .replace("DUMPS_FULL_PATH", QString::fromStdWString(OrganizerCore::getGlobalCoreDumpPath()))
.replace("DUMPS_DIR", QString::fromStdWString(AppConfig::dumpsDir()))
);
}
@@ -78,13 +78,13 @@ void DiagnosticsSettingsTab::setCrashDumpTypesBox()
ui->dumpsTypeBox->addItem(text, static_cast<int>(type));
};
- add(QObject::tr("None"), CrashDumpsType::None);
- add(QObject::tr("Mini (recommended)"), CrashDumpsType::Mini);
- add(QObject::tr("Data"), CrashDumpsType::Data);
- add(QObject::tr("Full"), CrashDumpsType::Full);
+ add(QObject::tr("None"), env::CoreDumpTypes::None);
+ add(QObject::tr("Mini (recommended)"), env::CoreDumpTypes::Mini);
+ add(QObject::tr("Data"), env::CoreDumpTypes::Data);
+ add(QObject::tr("Full"), env::CoreDumpTypes::Full);
const auto current = static_cast<int>(
- settings().diagnostics().crashDumpsType());
+ settings().diagnostics().coreDumpType());
for (int i=0; i<ui->dumpsTypeBox->count(); ++i) {
if (ui->dumpsTypeBox->itemData(i) == current) {
@@ -99,10 +99,10 @@ void DiagnosticsSettingsTab::update()
settings().diagnostics().setLogLevel(
static_cast<log::Levels>(ui->logLevelBox->currentData().toInt()));
- settings().diagnostics().setCrashDumpsType(
- static_cast<CrashDumpsType>(ui->dumpsTypeBox->currentData().toInt()));
+ settings().diagnostics().setCoreDumpType(
+ static_cast<env::CoreDumpTypes>(ui->dumpsTypeBox->currentData().toInt()));
- settings().diagnostics().setCrashDumpsMax(ui->dumpsMaxEdit->value());
+ settings().diagnostics().setMaxCoreDumps(ui->dumpsMaxEdit->value());
settings().diagnostics().setLootLogLevel(
static_cast<lootcli::LogLevels>(ui->lootLogLevel->currentData().toInt()));
diff --git a/src/usvfsconnector.cpp b/src/usvfsconnector.cpp
index ed6e31ce..c8f2f1c4 100644
--- a/src/usvfsconnector.cpp
+++ b/src/usvfsconnector.cpp
@@ -107,17 +107,22 @@ LogLevel toUsvfsLogLevel(log::Levels level)
}
}
-CrashDumpsType crashDumpsType(int type)
+CrashDumpsType toUsvfsCrashDumpsType(env::CoreDumpTypes type)
{
- switch (static_cast<CrashDumpsType>(type)) {
- case CrashDumpsType::Mini:
- return CrashDumpsType::Mini;
- case CrashDumpsType::Data:
- return CrashDumpsType::Data;
- case CrashDumpsType::Full:
- return CrashDumpsType::Full;
- default:
- return CrashDumpsType::None;
+ switch (type)
+ {
+ case env::CoreDumpTypes::None:
+ return CrashDumpsType::None;
+
+ case env::CoreDumpTypes::Data:
+ return CrashDumpsType::Data;
+
+ case env::CoreDumpTypes::Full:
+ return CrashDumpsType::Full;
+
+ case env::CoreDumpTypes::Mini:
+ default:
+ return CrashDumpsType::Mini;
}
}
@@ -128,9 +133,9 @@ UsvfsConnector::UsvfsConnector()
const auto& s = Settings::instance();
const LogLevel logLevel = toUsvfsLogLevel(s.diagnostics().logLevel());
- const CrashDumpsType dumpType = s.diagnostics().crashDumpsType();
+ const auto dumpType = toUsvfsCrashDumpsType(s.diagnostics().coreDumpType());
const auto delay = duration_cast<milliseconds>(s.diagnostics().spawnDelay());
- std::string dumpPath = MOShared::ToString(OrganizerCore::crashDumpsPath(), true);
+ std::string dumpPath = MOShared::ToString(OrganizerCore::getGlobalCoreDumpPath(), true);
usvfsParameters* params = usvfsCreateParameters();
@@ -224,7 +229,7 @@ void UsvfsConnector::updateMapping(const MappingType &mapping)
}
void UsvfsConnector::updateParams(
- MOBase::log::Levels logLevel, CrashDumpsType crashDumpsType,
+ MOBase::log::Levels logLevel, env::CoreDumpTypes coreDumpType,
const QString& crashDumpsPath, std::chrono::seconds spawnDelay,
QString executableBlacklist)
{
@@ -234,7 +239,7 @@ void UsvfsConnector::updateParams(
usvfsSetDebugMode(p, FALSE);
usvfsSetLogLevel(p, toUsvfsLogLevel(logLevel));
- usvfsSetCrashDumpType(p, crashDumpsType);
+ usvfsSetCrashDumpType(p, toUsvfsCrashDumpsType(coreDumpType));
usvfsSetCrashDumpPath(p, crashDumpsPath.toStdString().c_str());
usvfsSetProcessDelay(p, duration_cast<milliseconds>(spawnDelay).count());
diff --git a/src/usvfsconnector.h b/src/usvfsconnector.h
index 5982778b..bf5d49ce 100644
--- a/src/usvfsconnector.h
+++ b/src/usvfsconnector.h
@@ -31,6 +31,7 @@ along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
#include <usvfsparameters.h>
#include <log.h>
#include "executableinfo.h"
+#include "envdump.h"
class LogWorker : public QThread {
@@ -87,7 +88,7 @@ public:
void updateMapping(const MappingType &mapping);
void updateParams(
- MOBase::log::Levels logLevel, CrashDumpsType crashDumpsType,
+ MOBase::log::Levels logLevel, env::CoreDumpTypes coreDumpType,
const QString& crashDumpsPath, std::chrono::seconds spawnDelay,
QString executableBlacklist);