aboutsummaryrefslogtreecommitdiff
path: root/Src/external_dependencies/openmpt-trunk/mptrack/ExceptionHandler.h
diff options
context:
space:
mode:
authorJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
committerJef <jef@targetspot.com>2024-09-24 08:54:57 -0400
commit20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (patch)
tree12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/external_dependencies/openmpt-trunk/mptrack/ExceptionHandler.h
parent537bcbc86291b32fc04ae4133ce4d7cac8ebe9a7 (diff)
downloadwinamp-20d28e80a5c861a9d5f449ea911ab75b4f37ad0d.tar.gz
Initial community commit
Diffstat (limited to 'Src/external_dependencies/openmpt-trunk/mptrack/ExceptionHandler.h')
-rw-r--r--Src/external_dependencies/openmpt-trunk/mptrack/ExceptionHandler.h95
1 files changed, 95 insertions, 0 deletions
diff --git a/Src/external_dependencies/openmpt-trunk/mptrack/ExceptionHandler.h b/Src/external_dependencies/openmpt-trunk/mptrack/ExceptionHandler.h
new file mode 100644
index 00000000..28235001
--- /dev/null
+++ b/Src/external_dependencies/openmpt-trunk/mptrack/ExceptionHandler.h
@@ -0,0 +1,95 @@
+/*
+ * ExceptionHandler.h
+ * ------------------
+ * Purpose: Code for handling crashes (unhandled exceptions) in OpenMPT.
+ * Notes : (currently none)
+ * Authors: OpenMPT Devs
+ * The OpenMPT source code is released under the BSD license. Read LICENSE for more details.
+ */
+
+
+#pragma once
+
+#include "openmpt/all/BuildSettings.hpp"
+
+OPENMPT_NAMESPACE_BEGIN
+
+class ExceptionHandler
+{
+
+public:
+
+ struct Context
+ {
+ void SetDescription(mpt::ustring desc)
+ {
+ description = std::move(desc);
+ }
+ mpt::ustring description;
+ };
+
+public:
+
+ static bool fullMemDump;
+ static bool stopSoundDeviceOnCrash;
+ static bool stopSoundDeviceBeforeDump;
+ static bool delegateToWindowsHandler;
+ static bool debugExceptionHandler;
+
+ // these are expected to be set on startup and never changed again
+ static bool useAnyCrashHandler;
+ static bool useImplicitFallbackSEH;
+ static bool useExplicitSEH;
+ static bool handleStdTerminate;
+ static bool handleStdUnexpected;
+ static bool handleMfcExceptions;
+
+ // Call this to activate unhandled exception filtering
+ // and register a std::terminate_handler.
+ static void Register();
+ static void ConfigureSystemHandler();
+ static void UnconfigureSystemHandler();
+ static void Unregister();
+
+ enum class TaintReason
+ {
+ Driver,
+ Plugin,
+ };
+
+ static void TaintProcess(TaintReason reason);
+
+public:
+
+ static Context *SetContext(Context *newContext) noexcept;
+
+ class ContextSetter
+ {
+ private:
+ Context *m_OldContext;
+ public:
+ inline ContextSetter(Context *newContext) noexcept
+ : m_OldContext(SetContext(newContext))
+ {
+ return;
+ }
+ ContextSetter(const ContextSetter &) = delete;
+ ContextSetter &operator=(const ContextSetter &) = delete;
+ inline ~ContextSetter()
+ {
+ SetContext(m_OldContext);
+ }
+ };
+
+ static LONG WINAPI UnhandledExceptionFilterContinue(_EXCEPTION_POINTERS *pExceptionInfo);
+ static LONG WINAPI ExceptionFilter(_EXCEPTION_POINTERS *pExceptionInfo);
+
+ static void UnhandledMFCException(CException * e, const MSG * pMsg);
+
+};
+
+void DebugInjectCrash();
+
+void DebugTraceDump();
+
+OPENMPT_NAMESPACE_END