Add a lock when unwrapping lazy value in bundles
This commit addresses a race condition introduced in ag/18909939. If multiple threads try to read the same lazy value out of mMap in parallel, it is possible for both to decrement mLazyValues, thus failing the precondition check, or recycling the parcel twice. While bundles do not guarantee thread safety, there have already been enough reports of impacted usecases that it is worth mitigating at the root. It is possible to shorten the lock to not include the recycle block, but both implementations did not show any performance difference in preliminary testing. Bug: 241888992 Test: Reproduced race condition on physical device, and validated that code change fixes it. Test: atest android.os.cts.ParcelTest android.os.cts.BundleTest android.os.BundleTest android.os.ParcelTest android.os.BundleRecylingTest Change-Id: I5d261d4315a123008b226c364fec73634e08a150
Loading
Please register or sign in to comment