mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-09 11:25:00 +00:00
Bug 1035281 - Fix potential file descriptor leak problem r=nical
This commit is contained in:
parent
6ffddd5be5
commit
dbd3cbb58a
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user