From 61cc49163b34db20f9f457589178ead9b89179db Mon Sep 17 00:00:00 2001 From: baldurk Date: Wed, 22 Oct 2014 18:44:27 +0100 Subject: [PATCH] Add API function to unload breakpad crash handler --- renderdoc/api/app/renderdoc_app.h | 3 +++ renderdoc/core/core.cpp | 15 ++++++++++----- renderdoc/core/core.h | 1 + renderdoc/replay/entry_points.cpp | 6 ++++++ 4 files changed, 20 insertions(+), 5 deletions(-) diff --git a/renderdoc/api/app/renderdoc_app.h b/renderdoc/api/app/renderdoc_app.h index bfc59aae9..c0c39ef05 100644 --- a/renderdoc/api/app/renderdoc_app.h +++ b/renderdoc/api/app/renderdoc_app.h @@ -271,3 +271,6 @@ typedef void (RENDERDOC_CC *pRENDERDOC_SetCaptureKeys)(KeyButton *keys, int num) extern "C" RENDERDOC_API void RENDERDOC_CC RENDERDOC_InitRemoteAccess(uint32_t *ident); typedef void (RENDERDOC_CC *pRENDERDOC_InitRemoteAccess)(uint32_t *ident); + +extern "C" RENDERDOC_API void RENDERDOC_CC RENDERDOC_UnloadCrashHandler(); +typedef void (RENDERDOC_CC *pRENDERDOC_UnloadCrashHandler)(); diff --git a/renderdoc/core/core.cpp b/renderdoc/core/core.cpp index 584f84d51..e7100e575 100644 --- a/renderdoc/core/core.cpp +++ b/renderdoc/core/core.cpp @@ -119,8 +119,7 @@ RenderDoc &RenderDoc::Inst() void RenderDoc::RecreateCrashHandler() { - if(m_ExHandler) - m_ExHandler->UnregisterMemoryRegion(this); + UnloadCrashHandler(); #ifdef CRASH_HANDLER_ENABLED m_ExHandler = new CrashHandler(m_ExHandler); @@ -130,6 +129,14 @@ void RenderDoc::RecreateCrashHandler() m_ExHandler->RegisterMemoryRegion(this, sizeof(RenderDoc)); } +void RenderDoc::UnloadCrashHandler() +{ + if(m_ExHandler) + m_ExHandler->UnregisterMemoryRegion(this); + + SAFE_DELETE(m_ExHandler); +} + RenderDoc::RenderDoc() { m_LogFile = L""; @@ -240,9 +247,7 @@ RenderDoc::~RenderDoc() { if(m_ExHandler) { - m_ExHandler->UnregisterMemoryRegion(this); - - SAFE_DELETE(m_ExHandler); + UnloadCrashHandler(); } for(size_t i=0; i < m_Captures.size(); i++) diff --git a/renderdoc/core/core.h b/renderdoc/core/core.h index c4974b5e4..9f80741c3 100644 --- a/renderdoc/core/core.h +++ b/renderdoc/core/core.h @@ -179,6 +179,7 @@ class RenderDoc const CaptureOptions &GetCaptureOptions() const { return m_Options; } void RecreateCrashHandler(); + void UnloadCrashHandler(); ICrashHandler *GetCrashHandler() const { return m_ExHandler; } Serialiser *OpenWriteSerialiser(uint32_t frameNum, RDCInitParams *params, void *thpixels, size_t thlen, uint32_t thwidth, uint32_t thheight); diff --git a/renderdoc/replay/entry_points.cpp b/renderdoc/replay/entry_points.cpp index b75db27da..b610f1fcd 100644 --- a/renderdoc/replay/entry_points.cpp +++ b/renderdoc/replay/entry_points.cpp @@ -153,6 +153,12 @@ void RENDERDOC_CC RENDERDOC_TriggerExceptionHandler(void *exceptionPtrs, bool32 } } +extern "C" RENDERDOC_API +void RENDERDOC_CC RENDERDOC_UnloadCrashHandler() +{ + RenderDoc::Inst().UnloadCrashHandler(); +} + extern "C" RENDERDOC_API bool32 RENDERDOC_CC RENDERDOC_SupportLocalReplay(const wchar_t *logfile, rdctype::wstr *driver) {