Bug 1035281 - Fix potential file descriptor leak problem r=nical

This commit is contained in:
Sotaro Ikeda 2014-07-08 18:35:42 -07:00
parent 6ffddd5be5
commit dbd3cbb58a

View File

@ -146,31 +146,33 @@ ParamTraits<MagicGrallocBufferHandle>::Read(const Message* aMsg,
aResult->mRef.mOwner = owner;
aResult->mRef.mKey = index;
if (sameProcess)
if (sameProcess) {
aResult->mGraphicBuffer = SharedBufferManagerParent::GetGraphicBuffer(aResult->mRef);
else {
} else {
aResult->mGraphicBuffer = SharedBufferManagerChild::GetSingleton()->GetGraphicBuffer(index);
if (index >= 0 && aResult->mGraphicBuffer == nullptr) {
//Only newly created GraphicBuffer should deserialize
#if ANDROID_VERSION >= 19
sp<GraphicBuffer> flattenable(new GraphicBuffer());
const void* datap = (const void*)data;
const int* fdsp = &fds[0];
if (NO_ERROR == flattenable->unflatten(datap, nbytes, fdsp, nfds)) {
aResult->mGraphicBuffer = flattenable;
}
#else
sp<GraphicBuffer> buffer(new GraphicBuffer());
Flattenable *flattenable = buffer.get();
MOZ_ASSERT(!aResult->mGraphicBuffer.get());
if (NO_ERROR == flattenable->unflatten(data, nbytes, fds, nfds)) {
aResult->mGraphicBuffer = buffer;
}
// Deserialize GraphicBuffer
#if ANDROID_VERSION >= 19
sp<GraphicBuffer> buffer(new GraphicBuffer());
const void* datap = (const void*)data;
const int* fdsp = &fds[0];
if (NO_ERROR != buffer->unflatten(datap, nbytes, fdsp, nfds)) {
buffer = nullptr;
}
#else
sp<GraphicBuffer> buffer(new GraphicBuffer());
Flattenable *flattenable = buffer.get();
if (NO_ERROR != flattenable->unflatten(data, nbytes, fds, nfds)) {
buffer = nullptr;
}
#endif
if(buffer.get() && !aResult->mGraphicBuffer.get()) {
aResult->mGraphicBuffer = buffer;
}
}
if (aResult->mGraphicBuffer == nullptr) {
if (!aResult->mGraphicBuffer.get()) {
printf_stderr("ParamTraits<MagicGrallocBufferHandle>::Read() failed to get gralloc buffer\n");
return false;
}