Ensure that proxy driver gets properly shut down

This commit is contained in:
baldurk
2014-09-25 16:20:38 +01:00
parent 940f742e04
commit 98fd2bf114
2 changed files with 11 additions and 10 deletions
+8 -10
View File
@@ -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<RDCDriver, wstring> > m_Proxies;
vector< pair<RDCDriver, wstring> > m_RemoteDrivers;
};
+3
View File
@@ -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;
}