Attempt to fix race condition in PooledLambdaImpl.

invoke can read flags after object has been returned to
pool/recycled.

Skip reading isRecycled in that case.

Bug: 151407445
Test: See repro instructions in bug
Change-Id: I0ae42c4fcd121d42dfaedb26d186ac7d51508f6c
This commit is contained in:
Brett Chabot
2020-03-13 15:39:58 -07:00
parent a8375cc9f8
commit 4d93b189a9

View File

@@ -200,8 +200,9 @@ final class PooledLambdaImpl<R> extends OmniFunction<Object,
try {
return doInvoke();
} finally {
if (isRecycleOnUse()) doRecycle();
if (!isRecycled()) {
if (isRecycleOnUse()) {
doRecycle();
} else if (!isRecycled()) {
int argsSize = ArrayUtils.size(mArgs);
for (int i = 0; i < argsSize; i++) {
popArg(i);