Unsynchronize InMemoryNodeEntry#isDone. The buildingState variable's state changes are visibile to all other threads by volatility and we don't read the variable at any intermediate or inconsistent state (simply check against null or a constant). reverseDepsToSignal is also made volatile for subclasses that need volatile reads to it.
--
PiperOrigin-RevId: 143787032
MOS_MIGRATED_REVID=143787032
diff --git a/src/main/java/com/google/devtools/build/skyframe/InMemoryNodeEntry.java b/src/main/java/com/google/devtools/build/skyframe/InMemoryNodeEntry.java
index 4c8ebce..5d8dbb3 100644
--- a/src/main/java/com/google/devtools/build/skyframe/InMemoryNodeEntry.java
+++ b/src/main/java/com/google/devtools/build/skyframe/InMemoryNodeEntry.java
@@ -126,7 +126,7 @@
* The transient state of this entry, after it has been created but before it is done. It allows
* us to keep the current state of the entry across invalidation and successive evaluations.
*/
- @VisibleForTesting @Nullable protected BuildingState buildingState = new BuildingState();
+ @VisibleForTesting @Nullable protected volatile BuildingState buildingState = new BuildingState();
/**
* Construct a InMemoryNodeEntry. Use ONLY in Skyframe evaluation and graph implementations.
@@ -140,7 +140,7 @@
}
@Override
- public synchronized boolean isDone() {
+ public boolean isDone() {
return buildingState == null;
}