diff options
author | Jean-Francois Mauguit <jfmauguit@mac.com> | 2024-09-24 09:03:25 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-09-24 09:03:25 -0400 |
commit | bab614c421ed7ae329d26bf028c4a3b1d2450f5a (patch) | |
tree | 12f17f78986871dd2cfb0a56e5e93b545c1ae0d0 /Src/external_dependencies/openmpt-trunk/mptrack/ExceptionHandler.h | |
parent | 4bde6044fddf053f31795b9eaccdd2a5a527d21f (diff) | |
parent | 20d28e80a5c861a9d5f449ea911ab75b4f37ad0d (diff) | |
download | winamp-bab614c421ed7ae329d26bf028c4a3b1d2450f5a.tar.gz |
Merge pull request #5 from WinampDesktop/community
Merge to main
Diffstat (limited to 'Src/external_dependencies/openmpt-trunk/mptrack/ExceptionHandler.h')
-rw-r--r-- | Src/external_dependencies/openmpt-trunk/mptrack/ExceptionHandler.h | 95 |
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 |