Can do On 12/12/08, David Pollak <[email protected]> wrote: > Folks, > > Who has time to do testing, etc. with 2.7.3? > > Thanks, > > David > > ---------- Forwarded message ---------- > From: Philipp Haller <[email protected]> > Date: Fri, Dec 12, 2008 at 6:42 AM > Subject: Re: [scala-user] Is there a memory leak in 2.7.2 Actors? > To: David Pollak <[email protected]> > Cc: scala-user <[email protected]> > > > Hi again, > > FYI, I committed a fix in r16750 (2.7.x branch) and r16751 (trunk). It > looks like we are probably releasing 2.7.3 including this fix some time > next week (or shortly after). > > Cheers, > Philipp > > > [email protected] wrote: >> Hi, >> >> I found the memory leak. A fix should be ready shortly. >> >> Cheers, >> Philipp >> >> >> Quoting David Pollak <[email protected]>: >> >>> Folks, >>> >>> I've been noticing that Lift apps run out of memory after a certain >>> period of time. This is a relatively new thing. I think I've >>> traced the problem back to a memory leak in the Actors library. The >>> enclosed program terminates with an out of memory error. >>> >>> Am I failing to release the Actors in some way or is there a memory leak? >>> >>> Thanks, >>> >>> David >>> >>> import scala.actors._ >>> import Actor._ >>> >>> object ActorWatcher extends Actor { >>> def act = loop { >>> react { >>> case Exit(actor: Actor, why: Throwable) => >>> failureFuncs.foreach(f => f(actor, why)) >>> case x => println(x) >>> } >>> } >>> >>> private def startAgain(a: Actor, ignore: Throwable) {a.start} >>> >>> private def logActorFailure(actor: Actor, why: Throwable) { >>> println("The ActorWatcher restarted "+actor+" because "+why) >>> } >>> >>> /** >>> * If there's something to do in addition to starting the actor >>> up, pre-pend the >>> * actor to this List >>> */ >>> var failureFuncs: List[(Actor, Throwable) => Unit] = logActorFailure _ > :: >>> startAgain _ :: Nil >>> >>> this.start >>> this.trapExit = true >>> } >>> >>> case object Start >>> case object EndMe >>> >>> class A extends Actor { >>> def act = loop { >>> react { >>> case Start => >>> link(ActorWatcher) >>> case EndMe => >>> unlink(ActorWatcher) >>> exit() >>> } >>> } >>> } >>> >>> object Sloth { >>> def z(in: Long) = if (in / 1024L == 0L) in >>> else if (in / (1024L * 1024L) == 0L) (in / 1024L).toString + "K" >>> else (in / (1024L * 1024L)).toString + "M" >>> def main(args: Array[String]) { >>> val rt = Runtime.getRuntime() >>> for (o <- 1 to 1000000) { >>> println("Outer "+o) >>> //var a: List[Actor] = Nil >>> for (i <- 1 to 10000) { >>> val t = new A >>> //a = t :: a >>> t.start >>> t ! Start >>> t ! EndMe >>> } >>> println("Done creating") >>> // for (act <- a) act ! EndMe >>> ActorGC.gc() >>> rt.gc() >>> println("Free "+z(rt.freeMemory())+" total "+z(rt.totalMemory())) >>> } >>> } >>> } >>> >>> >>> -- >>> Lift, the simply functional web framework http://liftweb.net >>> Collaborative Task Management http://much4.us >>> Follow me: http://twitter.com/dpp >>> Git some: http://github.com/dpp >>> >> >> > > > > > -- > Lift, the simply functional web framework http://liftweb.net > Collaborative Task Management http://much4.us > Follow me: http://twitter.com/dpp > Git some: http://github.com/dpp > > > >
--~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Lift" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/liftweb?hl=en -~----------~----~----~----~------~----~------~--~---
