From 718ef70c90fb464a612fb75ad238e2ea45a668cf Mon Sep 17 00:00:00 2001 From: Andriy Plokhotnyuk Date: Tue, 18 Jun 2013 20:17:14 +0300 Subject: [PATCH] add clearing of message from tail node to avoid memory leaks when queue is empty and no new messages come --- concurrent/src/main/scala/scalaz/concurrent/Actor.scala | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/concurrent/src/main/scala/scalaz/concurrent/Actor.scala b/concurrent/src/main/scala/scalaz/concurrent/Actor.scala index 06a124f934..e54b15a126 100644 --- a/concurrent/src/main/scala/scalaz/concurrent/Actor.scala +++ b/concurrent/src/main/scala/scalaz/concurrent/Actor.scala @@ -56,6 +56,7 @@ final case class Actor[A](handler: A => Unit, onError: Throwable => Unit = throw val t = tail.get val n = batchHandle(t, 1024) if (n ne t) { + n.a = null.asInstanceOf[A] tail.lazySet(n) schedule() } else { @@ -78,7 +79,7 @@ final case class Actor[A](handler: A => Unit, onError: Throwable => Unit = throw } } -private class Node[A](val a: A = null.asInstanceOf[A]) extends AtomicReference[Node[A]] +private class Node[A](var a: A = null.asInstanceOf[A]) extends AtomicReference[Node[A]] object Actor extends ActorFunctions with ActorInstances