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;
   }