diff options
| -rw-r--r-- | chiselFrontend/src/main/scala/chisel3/internal/Builder.scala | 9 |
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) |
