From 98fd2bf114393c2db4d00a4a7fb38aab997bf4d0 Mon Sep 17 00:00:00 2001 From: baldurk Date: Thu, 25 Sep 2014 16:20:38 +0100 Subject: [PATCH] Ensure that proxy driver gets properly shut down --- renderdoc/core/remote_replay.cpp | 18 ++++++++---------- renderdoc/core/replay_proxy.cpp | 3 +++ 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/renderdoc/core/remote_replay.cpp b/renderdoc/core/remote_replay.cpp index a9f8a1de2..0383070fb 100644 --- a/renderdoc/core/remote_replay.cpp +++ b/renderdoc/core/remote_replay.cpp @@ -267,8 +267,6 @@ struct RemoteRenderer m_RemoteDrivers.reserve(m.size()); for(auto it=m.begin(); it != m.end(); ++it) m_RemoteDrivers.push_back(*it); - - m_ProxyDriver = NULL; } ~RemoteRenderer() { @@ -322,7 +320,7 @@ struct RemoteRenderer if(progress == NULL) progress = &dummy; - RDCDriver proxydriver = m_Proxies[proxyid].first; + RDCDriver proxydrivertype = m_Proxies[proxyid].first; Serialiser ser(L"", Serialiser::WRITING, false); @@ -354,21 +352,23 @@ struct RemoteRenderer RDCLOG("Log ready on replay host"); - m_ProxyDriver = NULL; - auto status = RenderDoc::Inst().CreateReplayDriver(proxydriver, NULL, &m_ProxyDriver); + IReplayDriver *proxyDriver = NULL; + auto status = RenderDoc::Inst().CreateReplayDriver(proxydrivertype, NULL, &proxyDriver); - if(status != eReplayCreate_Success || !m_ProxyDriver) + if(status != eReplayCreate_Success || !proxyDriver) + { + if(proxyDriver) proxyDriver->Shutdown(); return status; + } ReplayRenderer *ret = new ReplayRenderer(); - ProxySerialiser *proxy = new ProxySerialiser(m_Socket, m_ProxyDriver); + ProxySerialiser *proxy = new ProxySerialiser(m_Socket, proxyDriver); status = ret->SetDevice(proxy); if(status != eReplayCreate_Success) { SAFE_DELETE(ret); - SAFE_DELETE(proxy); return status; } @@ -396,8 +396,6 @@ struct RemoteRenderer if(ser) *ser = new Serialiser(payload.size(), &payload[0], false); } - IReplayDriver *m_ProxyDriver; - vector< pair > m_Proxies; vector< pair > m_RemoteDrivers; }; diff --git a/renderdoc/core/replay_proxy.cpp b/renderdoc/core/replay_proxy.cpp index 8212aa7fe..1ed20a438 100644 --- a/renderdoc/core/replay_proxy.cpp +++ b/renderdoc/core/replay_proxy.cpp @@ -666,6 +666,9 @@ ProxySerialiser::~ProxySerialiser() SAFE_DELETE(m_FromReplaySerialiser); SAFE_DELETE(m_ToReplaySerialiser); + if(m_Proxy) m_Proxy->Shutdown(); + m_Proxy = NULL; + for(auto it=m_ShaderReflectionCache.begin(); it != m_ShaderReflectionCache.end(); ++it) delete it->second; }