From 7f733b450421e345496ae139870c4b3f77eb5608 Mon Sep 17 00:00:00 2001 From: Helena Edelson Date: Thu, 19 Dec 2019 07:00:51 -0800 Subject: [PATCH] Remove the default reschedule=true arg to internal checkReceiveTimeout (#28399) --- .../28399-remove-default-arg.excludes | 5 +++++ akka-actor/src/main/scala/akka/actor/ActorCell.scala | 2 +- .../src/main/scala/akka/actor/dungeon/FaultHandling.scala | 2 +- .../src/main/scala/akka/actor/dungeon/ReceiveTimeout.scala | 4 ++-- 4 files changed, 9 insertions(+), 4 deletions(-) create mode 100644 akka-actor/src/main/mima-filters/2.6.1.backwards.excludes/28399-remove-default-arg.excludes diff --git a/akka-actor/src/main/mima-filters/2.6.1.backwards.excludes/28399-remove-default-arg.excludes b/akka-actor/src/main/mima-filters/2.6.1.backwards.excludes/28399-remove-default-arg.excludes new file mode 100644 index 0000000000..44af25e2f2 --- /dev/null +++ b/akka-actor/src/main/mima-filters/2.6.1.backwards.excludes/28399-remove-default-arg.excludes @@ -0,0 +1,5 @@ +# Remove the default reschedule=true arg to internal checkReceiveTimeout #28399 +# class akka.actor.ActorCell does not have a correspondent in current version +ProblemFilters.exclude[DirectMissingMethodProblem]("akka.actor.ActorCell.checkReceiveTimeout$default$1") +# interface akka.actor.dungeon.ReceiveTimeout does not have a correspondent in current version +ProblemFilters.exclude[DirectMissingMethodProblem]("akka.actor.dungeon.ReceiveTimeout.checkReceiveTimeout$default$1") \ No newline at end of file diff --git a/akka-actor/src/main/scala/akka/actor/ActorCell.scala b/akka-actor/src/main/scala/akka/actor/ActorCell.scala index bb150d60ea..69cb9a9887 100644 --- a/akka-actor/src/main/scala/akka/actor/ActorCell.scala +++ b/akka-actor/src/main/scala/akka/actor/ActorCell.scala @@ -635,7 +635,7 @@ private[akka] class ActorCell( val created = newActor() actor = created created.aroundPreStart() - checkReceiveTimeout() + checkReceiveTimeout(reschedule = true) if (system.settings.DebugLifecycle) publish(Debug(self.path.toString, clazz(created), "started (" + created + ")")) } catch { diff --git a/akka-actor/src/main/scala/akka/actor/dungeon/FaultHandling.scala b/akka-actor/src/main/scala/akka/actor/dungeon/FaultHandling.scala index 1c49869a81..0bc8965d11 100644 --- a/akka-actor/src/main/scala/akka/actor/dungeon/FaultHandling.scala +++ b/akka-actor/src/main/scala/akka/actor/dungeon/FaultHandling.scala @@ -244,7 +244,7 @@ private[akka] trait FaultHandling { this: ActorCell => if (freshActor eq failedActor) setActorFields(freshActor, this, self) // If the creator returns the same instance, we need to restore our nulled out fields. freshActor.aroundPostRestart(cause) - checkReceiveTimeout() // user may have set a receive timeout in preStart which is called from postRestart + checkReceiveTimeout(reschedule = true) // user may have set a receive timeout in preStart which is called from postRestart if (system.settings.DebugLifecycle) publish(Debug(self.path.toString, clazz(freshActor), "restarted")) // only after parent is up and running again do restart the children which were not stopped diff --git a/akka-actor/src/main/scala/akka/actor/dungeon/ReceiveTimeout.scala b/akka-actor/src/main/scala/akka/actor/dungeon/ReceiveTimeout.scala index 3573f40ef7..f6b87c5c4e 100644 --- a/akka-actor/src/main/scala/akka/actor/dungeon/ReceiveTimeout.scala +++ b/akka-actor/src/main/scala/akka/actor/dungeon/ReceiveTimeout.scala @@ -31,11 +31,11 @@ private[akka] trait ReceiveTimeout { this: ActorCell => if (hasTimeoutData || receiveTimeoutChanged(beforeReceive)) checkReceiveTimeout(!message.isInstanceOf[NotInfluenceReceiveTimeout] || receiveTimeoutChanged(beforeReceive)) - final def checkReceiveTimeout(reschedule: Boolean = true): Unit = { + final def checkReceiveTimeout(reschedule: Boolean): Unit = { val (recvTimeout, task) = receiveTimeoutData recvTimeout match { case f: FiniteDuration => - // The fact that timeout is FiniteDuration and task is emptyCancellable + // The fact that recvTimeout is FiniteDuration and task is emptyCancellable // means that a user called `context.setReceiveTimeout(...)` // while sending the ReceiveTimeout message is not scheduled yet. // We have to handle the case and schedule sending the ReceiveTimeout message