Bug 906445. Some speculative fixes to guard against dereferencing nullptrs. r=Bas

This commit is contained in:
Nicholas Cameron 2013-09-09 09:06:50 +12:00
parent cca4ba2d92
commit b6a0233b1c

View File

@ -120,6 +120,7 @@ DeprecatedTextureClientD3D11::EnsureAllocated(gfx::IntSize aSize,
if (FAILED(hr)) {
LOGD3D11("Error getting shared handle for texture.");
return false;
}
mDescriptor = SurfaceDescriptorD3D10((WindowsHandle)sharedHandle,
@ -174,9 +175,10 @@ DeprecatedTextureClientD3D11::SetDescriptor(const SurfaceDescriptor& aDescriptor
MOZ_ASSERT(aDescriptor.type() == SurfaceDescriptor::TSurfaceDescriptorD3D10);
ID3D10Device* device = gfxWindowsPlatform::GetPlatform()->GetD3D10Device();
device->OpenSharedResource((HANDLE)aDescriptor.get_SurfaceDescriptorD3D10().handle(),
__uuidof(ID3D10Texture2D),
(void**)(ID3D10Texture2D**)byRef(mTexture));
HRESULT hr = device->OpenSharedResource((HANDLE)aDescriptor.get_SurfaceDescriptorD3D10().handle(),
__uuidof(ID3D10Texture2D),
(void**)(ID3D10Texture2D**)byRef(mTexture));
NS_WARN_IF_FALSE(mTexture && SUCCEEDED(hr), "Could not open shared resource");
}
void
@ -421,9 +423,15 @@ DeprecatedTextureHostDXGID3D11::UpdateImpl(const SurfaceDescriptor& aImage,
{
MOZ_ASSERT(aImage.type() == SurfaceDescriptor::TSurfaceDescriptorD3D10);
mDevice->OpenSharedResource((HANDLE)aImage.get_SurfaceDescriptorD3D10().handle(),
__uuidof(ID3D11Texture2D),
(void**)(ID3D11Texture2D**)byRef(mTextures[0]));
HRESULT hr =mDevice->OpenSharedResource((HANDLE)aImage.get_SurfaceDescriptorD3D10().handle(),
__uuidof(ID3D11Texture2D),
(void**)(ID3D11Texture2D**)byRef(mTextures[0]));
if (!mTextures[0] || FAILED(hr)) {
NS_WARNING("Could not open shared resource");
mSize = IntSize(0, 0);
return;
}
mFormat = aImage.get_SurfaceDescriptorD3D10().hasAlpha() ? FORMAT_B8G8R8A8 : FORMAT_B8G8R8X8;
D3D11_TEXTURE2D_DESC desc;
@ -435,6 +443,9 @@ DeprecatedTextureHostDXGID3D11::UpdateImpl(const SurfaceDescriptor& aImage,
void
DeprecatedTextureHostDXGID3D11::LockTexture()
{
if (!mTextures[0]) {
return;
}
RefPtr<IDXGIKeyedMutex> mutex;
mTextures[0]->QueryInterface((IDXGIKeyedMutex**)byRef(mutex));
@ -444,6 +455,9 @@ DeprecatedTextureHostDXGID3D11::LockTexture()
void
DeprecatedTextureHostDXGID3D11::ReleaseTexture()
{
if (!mTextures[0]) {
return;
}
RefPtr<IDXGIKeyedMutex> mutex;
mTextures[0]->QueryInterface((IDXGIKeyedMutex**)byRef(mutex));