Remove redundant synchronization in DexProgramClass addDirect/VirtualMethod
The synchronization in these methods were incorrect because they were
locking on the actual object while the field itself was being overwritten.
These methods are only called from R8.run() -> MemberRebindingAnalysis.run()
on a single thread. So until this holds we don't need synchronization here.
Change-Id: I32afb4f33099fa66e97c1a55420ebdbbc9ee0746
diff --git a/src/main/java/com/android/tools/r8/graph/DexProgramClass.java b/src/main/java/com/android/tools/r8/graph/DexProgramClass.java
index 625e28f..945b58b 100644
--- a/src/main/java/com/android/tools/r8/graph/DexProgramClass.java
+++ b/src/main/java/com/android/tools/r8/graph/DexProgramClass.java
@@ -342,19 +342,15 @@
assert !virtualMethod.accessFlags.isStatic();
assert !virtualMethod.accessFlags.isPrivate();
assert !virtualMethod.accessFlags.isConstructor();
- synchronized (virtualMethods) {
- virtualMethods = Arrays.copyOf(virtualMethods, virtualMethods.length + 1);
- virtualMethods[virtualMethods.length - 1] = virtualMethod;
- }
+ virtualMethods = Arrays.copyOf(virtualMethods, virtualMethods.length + 1);
+ virtualMethods[virtualMethods.length - 1] = virtualMethod;
}
public void addDirectMethod(DexEncodedMethod staticMethod) {
assert staticMethod.accessFlags.isStatic() || staticMethod.accessFlags.isPrivate()
|| staticMethod.accessFlags.isConstructor();
- synchronized (directMethods) {
- directMethods = Arrays.copyOf(directMethods, directMethods.length + 1);
- directMethods[directMethods.length - 1] = staticMethod;
- }
+ directMethods = Arrays.copyOf(directMethods, directMethods.length + 1);
+ directMethods[directMethods.length - 1] = staticMethod;
}
public void sortMembers() {