[squeak-dev] Re: Process bug introduced in 3.10
Sebastian Sastre
ssastre at seaswork.com
Mon Apr 28 11:08:07 UTC 2008
Hi Bryce,
maybe if you use some #yield they have the chance to terminate before
creating new ones restoring balance?
cheers,
Sebastian
> -----Mensaje original-----
> De: squeak-dev-bounces at lists.squeakfoundation.org
> [mailto:squeak-dev-bounces at lists.squeakfoundation.org] En
> nombre de bryce at kampjes.demon.co.uk
> Enviado el: Domingo, 27 de Abril de 2008 16:19
> Para: The general-purpose Squeak developers list
> Asunto: [squeak-dev] Re: Process bug introduced in 3.10
>
> Andreas Raab writes:
> > bryce at kampjes.demon.co.uk wrote:
> > > My next attempt at formulating a version of the same bug that'll
> > > run in a vanilla 3.10 image is:
> > >
> > > 100 timesRepeat:
> > > [processes := (1 to: 10) collect: [:each|
> [[(MessageTally new spyEvery: 1 on: [(Delay forMilliseconds:
> 500) wait]) ] repeat] fork ].
> > > (Delay forSeconds: 1) wait.
> > > processes do: [:each| each terminate].]
> >
> > Running MessageTallies concurrently is a big, big no-no.
> Check out class
> > MessageTally and in particular its (shared) class variables
> > ObservedProcess and Timer.
>
> Good point, but I can reproduce the bug without using MessageTally
> or any class variables. ExuperyProfiler doesn't use class variables.
>
> The following will reproduce it:
> TestProfiler>>spyOn: aBlock
> | myDelay millisecs timer |
> millisecs := 1.
> (aBlock isMemberOf: BlockContext) ifFalse:
> [self error: 'spy needs a block here'].
> myDelay := Delay forMilliseconds: millisecs.
> timer := [[true] whileTrue:
> [myDelay wait].
> nil] newProcess.
> timer priority: Processor userInterruptPriority.
> "activate the probe and evaluate the block"
> timer resume.
> aBlock ensure: [timer terminate].
> ^ self
>
> 100 timesRepeat:
> [processes := (1 to: 10) collect: [:each|
> [[(TestProfiler new spyOn: [(Delay forMilliseconds: 500)
> wait]) ] repeat] fork ].
> (Delay forSeconds: 1) wait.
> processes do: [:each| each terminate]]
>
> TestProfiler is a new subclass of Object without any variables or
> any other methods.
>
> I'm not convinced this is a new bug with 3.10. It feels similar to
> something I've encountered earlier. It is happening frequently in
> 3.10 but not in 3.9.
>
> Bryce
>
More information about the Squeak-dev
mailing list
|