Increment sys ref count of input/output Allocations
Bug: 30596040
In case such Allocations lose their other references and get deleted,
while being used by a rsForEach() call.
Test: CTS on x86_64 emulator
Change-Id: I01bd9ef9235ad963b461d235f4d63c481e7c034d
(cherry picked from commit 972be5160b8b52d07582fd0f0585524e2f7e143d)
diff --git a/driver/rsdRuntimeStubs.cpp b/driver/rsdRuntimeStubs.cpp
index 504f098..74c7918 100644
--- a/driver/rsdRuntimeStubs.cpp
+++ b/driver/rsdRuntimeStubs.cpp
@@ -683,10 +683,23 @@
Allocation* inputs[RS_KERNEL_MAX_ARGUMENTS];
for (int i = 0; i < numInputs; i++) {
inputs[i] = (Allocation*)allocs[i].p;
+ CHECK_OBJ(inputs[i]);
+ inputs[i]->incSysRef();
}
- Allocation* out = hasOutput ? (Allocation*)allocs[numInputs].p : nullptr;
+ Allocation* out = nullptr;
+ if (hasOutput) {
+ out = (Allocation*)allocs[numInputs].p;
+ CHECK_OBJ(out);
+ out->incSysRef();
+ }
rsrForEach(rsc, s, slot, numInputs, numInputs > 0 ? inputs : nullptr, out,
nullptr, 0, (RsScriptCall*)options);
+ for (int i = 0; i < numInputs; i++) {
+ inputs[i]->decSysRef();
+ }
+ if (hasOutput) {
+ out->decSysRef();
+ }
}
void __attribute__((overloadable)) rsForEach(::rs_script script,