From bb0e8328e3c5a6f1522bdd582f8ce2ac7d35761e Mon Sep 17 00:00:00 2001 From: "SND\\EreTIk_cp" Date: Wed, 2 Mar 2011 19:58:41 +0000 Subject: [PATCH] [~] singleton dbgEventCallbacks and work with him moved into a class DbgEventCallbacks git-svn-id: https://pykd.svn.codeplex.com/svn@62103 9b283d60-5439-405e-af05-b73fd8c4d996 --- pykd/dbgeventcb.cpp | 32 +++++++++++++++++++++++++++++++- pykd/dbgeventcb.h | 21 ++++++++++++--------- pykd/dbgext.cpp | 2 +- pykd/dbgsession.h | 22 +--------------------- 4 files changed, 45 insertions(+), 32 deletions(-) diff --git a/pykd/dbgeventcb.cpp b/pykd/dbgeventcb.cpp index dbb065a..73d0450 100644 --- a/pykd/dbgeventcb.cpp +++ b/pykd/dbgeventcb.cpp @@ -10,7 +10,37 @@ ///////////////////////////////////////////////////////////////////////////////// -DbgEventCallbacks *dbgEventCallbacks = NULL; +DbgEventCallbacks *DbgEventCallbacks::dbgEventCallbacks = NULL; + +///////////////////////////////////////////////////////////////////////////////// + +HRESULT DbgEventCallbacks::Start() +{ + HRESULT hres; + try + { + Stop(); + dbgEventCallbacks = new DbgEventCallbacks; + hres = S_OK; + } + catch (HRESULT _hres) + { + hres = _hres; + } + catch (...) + { + hres = E_OUTOFMEMORY; + } + return hres; +} + +///////////////////////////////////////////////////////////////////////////////// + +void DbgEventCallbacks::Stop() +{ + if (dbgEventCallbacks) + dbgEventCallbacks->Deregister(); +} ///////////////////////////////////////////////////////////////////////////////// diff --git a/pykd/dbgeventcb.h b/pykd/dbgeventcb.h index eb9863f..08e4989 100644 --- a/pykd/dbgeventcb.h +++ b/pykd/dbgeventcb.h @@ -6,12 +6,15 @@ class DbgEventCallbacks : public DebugBaseEventCallbacks { public: + static HRESULT Start(); + static void Stop(); + +private: + // may generate HRESULT exception if not registered DbgEventCallbacks(); void Deregister(); -private: - ///////////////////////////////////////////////////////////////////////////////// // IUnknown interface implementation @@ -42,11 +45,11 @@ private: IDebugClient *m_dbgClient; IDebugSymbols3 *m_dbgSymbols3; + + ///////////////////////////////////////////////////////////////////////////////// + // global singleton + + static DbgEventCallbacks *dbgEventCallbacks; + + ///////////////////////////////////////////////////////////////////////////////// }; - -///////////////////////////////////////////////////////////////////////////////// -// global singleton - -extern DbgEventCallbacks *dbgEventCallbacks; - -///////////////////////////////////////////////////////////////////////////////// diff --git a/pykd/dbgext.cpp b/pykd/dbgext.cpp index 1f81a92..6ee2ab6 100644 --- a/pykd/dbgext.cpp +++ b/pykd/dbgext.cpp @@ -227,7 +227,7 @@ VOID CALLBACK DebugExtensionUninitialize() { - stopDbgEventMonotoring(); + DbgEventCallbacks::Stop(); delete windbgGlobalSession; windbgGlobalSession = NULL; diff --git a/pykd/dbgsession.h b/pykd/dbgsession.h index 21a4d16..64f9d5b 100644 --- a/pykd/dbgsession.h +++ b/pykd/dbgsession.h @@ -6,29 +6,9 @@ dbgCreateSession(); extern bool dbgSessionStarted; -inline void stopDbgEventMonotoring() -{ - if (dbgEventCallbacks) - dbgEventCallbacks->Deregister(); -} - inline HRESULT setDbgSessionStarted() { - HRESULT hres; - try - { - stopDbgEventMonotoring(); - dbgEventCallbacks = new DbgEventCallbacks; - hres = S_OK; - } - catch (HRESULT _hres) - { - hres = _hres; - } - catch (...) - { - hres = E_OUTOFMEMORY; - } + HRESULT hres = DbgEventCallbacks::Start(); if (SUCCEEDED(hres)) dbgSessionStarted = true; return hres;