I also tried with a modified #benchFor: that doesn't use a forked block, and that fixed the issue.

benchFor: duration
"Run me for duration and return a BenchmarkResult"
"[ 100 factorial ] benchFor: 2 seconds"
| count started endTime |
count := 0.
started := Time millisecondClockValue.
endTime := started + duration asMilliSeconds.
[ Time millisecondClockValue > endTime ] whileTrue: [ self value. count := count + 1 ].
^ BenchmarkResult new��
iterations: count;��
elapsedTime: (Time millisecondsSince: started) milliSeconds;��
yourself

Do you think comparing each time, instead of using #fork is a bad idea? That's how it was working #bench in Pharo 3.

Martin

On Thu, Nov 12, 2015 at 2:42 AM, Martin Dias <tinchodias@gmail.com> wrote:
Hello,

I'm trying to understand why this method hangs in certain conditions*. What happens is that the #whileTrue: in the following method is never cut.��

benchFor: duration
"Run me for duration and return a BenchmarkResult"
"[ 100 factorial ] benchFor: 2 seconds"
| count run started |
count := 0.
run := true.
[ duration wait. run := false ] forkAt: Processor timingPriority - 1.
started := Time millisecondClockValue.
[ run ] whileTrue: [ self value. count := count + 1 ].
^ BenchmarkResult new��
iterations: count;��
elapsedTime: (Time millisecondsSince: started) milliSeconds;��
yourself

Strangely, I verified with several #logCr that the forked block starts, but the #wait never ends.��
---> Maybe you see something I don't in the code. Any clue?��

I will continue trying to isolate the problem, but maybe you have some idea.

* the conditions to reproduce are:
1) curl get.pharo.org/50+vm | bash
2) ./pharo Pharo.image get Epicea 6.5
3) ./pharo Pharo.image test '^(?!Metacello)[A-L].*'

Notes:��
- It doesn't hang when running from UI
- it doesn't hang when running less tests, like:��
�� pharo Pharo.image test '^(?!Metacello)[E-L].*'
- it *does* hang even when removing all Epicea tests
- Epicea doesn't extend or override "kernel" behavior...��

Regards,
Martin