diff -r 535d59d4ed12 -r 2386d1a3ca8f src/Pure/System/event_bus.scala --- a/src/Pure/System/event_bus.scala Thu Apr 24 00:27:06 2014 +0200 +++ b/src/Pure/System/event_bus.scala Thu Apr 24 00:29:55 2014 +0200 @@ -9,29 +9,24 @@ import scala.actors.Actor, Actor._ -import scala.collection.mutable.ListBuffer class Event_Bus[Event] { /* receivers */ - private val receivers = new ListBuffer[Actor] + private val receivers = Synchronized(List.empty[Actor]) - def += (r: Actor) { synchronized { receivers += r } } - def + (r: Actor): Event_Bus[Event] = { this += r; this } + def += (r: Actor) { receivers >> (rs => Library.insert(r, rs)) } def += (f: Event => Unit) { this += actor { loop { react { case x => f(x.asInstanceOf[Event]) } } } } - def + (f: Event => Unit): Event_Bus[Event] = { this += f; this } - - def -= (r: Actor) { synchronized { receivers -= r } } - def - (r: Actor) = { this -= r; this } + def -= (r: Actor) { receivers >> (rs => Library.remove(r, rs)) } /* event invocation */ - def event(x: Event) { synchronized { receivers.foreach(_ ! x) } } + def event(x: Event) { receivers().reverseIterator.foreach(_ ! x) } }