summaryrefslogtreecommitdiff
path: root/chiselFrontend/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'chiselFrontend/src/main')
-rw-r--r--chiselFrontend/src/main/scala/chisel3/internal/Builder.scala9
1 files changed, 8 insertions, 1 deletions
diff --git a/chiselFrontend/src/main/scala/chisel3/internal/Builder.scala b/chiselFrontend/src/main/scala/chisel3/internal/Builder.scala
index dfda0023..4105a699 100644
--- a/chiselFrontend/src/main/scala/chisel3/internal/Builder.scala
+++ b/chiselFrontend/src/main/scala/chisel3/internal/Builder.scala
@@ -200,7 +200,14 @@ private[chisel3] object Builder {
// Initialize any singleton objects before user code inadvertently inherits them.
private def initializeSingletons(): Unit = {
- val dummy = core.DontCare
+ // This used to contain:
+ // val dummy = core.DontCare
+ // but this would occasionally produce hangs dues to static initialization deadlock
+ // when Builder initialization collided with chisel3.package initialization of the DontCare value.
+ // See:
+ // http://ternarysearch.blogspot.com/2013/07/static-initialization-deadlock.html
+ // https://bugs.openjdk.java.net/browse/JDK-8037567
+ // https://stackoverflow.com/questions/28631656/runnable-thread-state-but-in-object-wait
}
def namingStackOption: Option[internal.naming.NamingStack] = dynamicContextVar.value.map(_.namingStack)