From 51f0630ef1521a0b06d5d9fa986db1f2027b8517 Mon Sep 17 00:00:00 2001 From: Viktor Klang Date: Mon, 26 Nov 2012 18:48:00 +0100 Subject: [PATCH 1/3] Updating to Scala 2.10.0-RC3 --- project/AkkaBuild.scala | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/project/AkkaBuild.scala b/project/AkkaBuild.scala index fcc3947a7d..4cf9c71002 100644 --- a/project/AkkaBuild.scala +++ b/project/AkkaBuild.scala @@ -30,7 +30,7 @@ object AkkaBuild extends Build { organization := "com.typesafe.akka", version := "2.2-SNAPSHOT", // FIXME: use 2.10.0 for final - scalaVersion := System.getProperty("akka.scalaVersion", "2.10.0-RC2") + scalaVersion := System.getProperty("akka.scalaVersion", "2.10.0-RC3") ) lazy val akka = Project( @@ -666,7 +666,7 @@ object Dependencies { val scalaStm = "org.scala-stm" % "scala-stm" % "0.6" cross CrossVersion.full // Modified BSD (Scala) val slf4jApi = "org.slf4j" % "slf4j-api" % "1.7.2" // MIT - val zeroMQClient = "org.zeromq" % "zeromq-scala-binding" % "0.0.6" cross CrossVersion.full // ApacheV2 + val zeroMQClient = "org.zeromq" % "zeromq-scala-binding_2.10.0-RC2" % "0.0.6" //cross CrossVersion.full // ApacheV2 val uncommonsMath = "org.uncommons.maths" % "uncommons-maths" % "1.2.2a" exclude("jfree", "jcommon") exclude("jfree", "jfreechart") // ApacheV2 val ariesBlueprint = "org.apache.aries.blueprint" % "org.apache.aries.blueprint" % "0.3.2" // ApacheV2 val osgiCore = "org.osgi" % "org.osgi.core" % "4.2.0" // ApacheV2 @@ -683,7 +683,7 @@ object Dependencies { val junit = "junit" % "junit" % "4.10" % "test" // Common Public License 1.0 val logback = "ch.qos.logback" % "logback-classic" % "1.0.7" % "test" // EPL 1.0 / LGPL 2.1 val mockito = "org.mockito" % "mockito-all" % "1.8.1" % "test" // MIT - val scalatest = "org.scalatest" % "scalatest" % "1.8-B2" % "test" cross CrossVersion.full // ApacheV2 + val scalatest = "org.scalatest" % "scalatest" % "1.8-B1" % "test" cross CrossVersion.full // ApacheV2 val scalacheck = "org.scalacheck" % "scalacheck" % "1.10.0" % "test" cross CrossVersion.full // New BSD val ariesProxy = "org.apache.aries.proxy" % "org.apache.aries.proxy.impl" % "0.3" % "test" // ApacheV2 val pojosr = "com.googlecode.pojosr" % "de.kalpatec.pojosr.framework" % "0.1.4" % "test" // ApacheV2 From f2755a932d4fa17ebde0ae24f1db1d997f3cfced Mon Sep 17 00:00:00 2001 From: Viktor Klang Date: Mon, 26 Nov 2012 23:21:40 +0100 Subject: [PATCH 2/3] Adding the correct, published, version for the zeromq binding for scala 2.10.0-RC3 --- project/AkkaBuild.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/AkkaBuild.scala b/project/AkkaBuild.scala index 4cf9c71002..64df349ed6 100644 --- a/project/AkkaBuild.scala +++ b/project/AkkaBuild.scala @@ -666,7 +666,7 @@ object Dependencies { val scalaStm = "org.scala-stm" % "scala-stm" % "0.6" cross CrossVersion.full // Modified BSD (Scala) val slf4jApi = "org.slf4j" % "slf4j-api" % "1.7.2" // MIT - val zeroMQClient = "org.zeromq" % "zeromq-scala-binding_2.10.0-RC2" % "0.0.6" //cross CrossVersion.full // ApacheV2 + val zeroMQClient = "org.zeromq" % "zeromq-scala-binding" % "0.0.6" cross CrossVersion.full // ApacheV2 val uncommonsMath = "org.uncommons.maths" % "uncommons-maths" % "1.2.2a" exclude("jfree", "jcommon") exclude("jfree", "jfreechart") // ApacheV2 val ariesBlueprint = "org.apache.aries.blueprint" % "org.apache.aries.blueprint" % "0.3.2" // ApacheV2 val osgiCore = "org.osgi" % "org.osgi.core" % "4.2.0" // ApacheV2 From 6140892a5fc9879c7c5ae95d39f1952c013bfeb8 Mon Sep 17 00:00:00 2001 From: Viktor Klang Date: Mon, 3 Dec 2012 14:29:50 +0100 Subject: [PATCH 3/3] Removing the boolean var in UnstartedActorCell and replace it with an inspection of lookup and underlying. --- .../src/main/scala/akka/actor/RepointableActorRef.scala | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/akka-actor/src/main/scala/akka/actor/RepointableActorRef.scala b/akka-actor/src/main/scala/akka/actor/RepointableActorRef.scala index 1385e7053c..02aef18564 100644 --- a/akka-actor/src/main/scala/akka/actor/RepointableActorRef.scala +++ b/akka-actor/src/main/scala/akka/actor/RepointableActorRef.scala @@ -49,7 +49,7 @@ private[akka] class RepointableActorRef( @volatile private var _lookupDoNotCallMeDirectly: Cell = _ def underlying: Cell = Unsafe.instance.getObjectVolatile(this, cellOffset).asInstanceOf[Cell] - private def lookup = Unsafe.instance.getObjectVolatile(this, lookupOffset).asInstanceOf[Cell] + def lookup = Unsafe.instance.getObjectVolatile(this, lookupOffset).asInstanceOf[Cell] @tailrec final def swapCell(next: Cell): Cell = { val old = underlying @@ -173,13 +173,10 @@ private[akka] class UnstartedCell(val systemImpl: ActorSystemImpl, // use Envelope to keep on-send checks in the same place ACCESS MUST BE PROTECTED BY THE LOCK private[this] final val queue = new JLinkedList[Any]() - // ACCESS MUST BE PROTECTED BY THE LOCK, is used to detect when messages are sent during replace - private[this] final var isBeingReplaced = false import systemImpl.settings.UnstartedPushTimeout.{ duration ⇒ timeout } def replaceWith(cell: Cell): Unit = locked { - isBeingReplaced = true try { while (!queue.isEmpty) { queue.poll() match { @@ -188,7 +185,6 @@ private[akka] class UnstartedCell(val systemImpl: ActorSystemImpl, } } } finally { - isBeingReplaced = false self.swapCell(cell) } } @@ -234,7 +230,7 @@ private[akka] class UnstartedCell(val systemImpl: ActorSystemImpl, cell.sendSystemMessage(msg) } else { // systemMessages that are sent during replace need to jump to just after the last system message in the queue, so it's processed before other messages - val wasEnqueued = if (isBeingReplaced && !queue.isEmpty()) { + val wasEnqueued = if ((self.lookup ne this) && (self.underlying eq this) && !queue.isEmpty()) { @tailrec def tryEnqueue(i: JListIterator[Any] = queue.listIterator(), insertIntoIndex: Int = -1): Boolean = if (i.hasNext()) tryEnqueue(i,