From 0c1ee2f4a802c833f02611951f173881bfde1a40 Mon Sep 17 00:00:00 2001 From: Johannes Rudolph Date: Tue, 23 Jan 2018 16:45:45 +0100 Subject: [PATCH] =typ initialize ActorRefResolver lazily in MiscMessageSerializer Serializers are initialized early on even before the underlying untyped ActorSystem is fully initialized. Accessing extensions might trigger a chain of initialization that might step on uninitialized internal bits later on. --- .../akka/actor/typed/internal/MiscMessageSerializer.scala | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/akka-actor-typed/src/main/scala/akka/actor/typed/internal/MiscMessageSerializer.scala b/akka-actor-typed/src/main/scala/akka/actor/typed/internal/MiscMessageSerializer.scala index 2f1465a272..02e1a67100 100644 --- a/akka-actor-typed/src/main/scala/akka/actor/typed/internal/MiscMessageSerializer.scala +++ b/akka-actor-typed/src/main/scala/akka/actor/typed/internal/MiscMessageSerializer.scala @@ -14,7 +14,8 @@ import akka.serialization.{ BaseSerializer, SerializerWithStringManifest } @InternalApi class MiscMessageSerializer(val system: akka.actor.ExtendedActorSystem) extends SerializerWithStringManifest with BaseSerializer { - private val resolver = ActorRefResolver(system.toTyped) + // Serializers are initialized early on. `toTyped` might then try to initialize the untyped ActorSystemAdapter extension. + private lazy val resolver = ActorRefResolver(system.toTyped) private val ActorRefManifest = "a" def manifest(o: AnyRef): String = o match {