On 13 June 2018 at 11:46, Ben Coman <[email protected]> wrote:

> I'm not sure if I'm doing the wrong thing, or if I've bumped into a
> problem with step <Over>.
> I'm trying to add some debugging support into multi-threaded code to help
> properly sequence debugging different priority processes. I've extracted a
> little demo...
>
> TestCase subclass: #Example
> instanceVariableNames: 'doCycle debug highPriorityProcess'
> classVariableNames: ''
> package: 'KernelX-DelayScheduler'
>
>
> Example >> highPriorityCycle
> debug ifTrue: [ self halt ].
> Transcript show: 'H'.
>
>
> Example  >> highPriorityRunLoop
> doCycle := Semaphore new.
> ^[ [ doCycle wait.
> self highPriorityCycle ] repeat.
> ] forkAt: 45 named: 'Example high side'
>
>
> Process >> isWaiting
> ^myList isKindOf: Semaphore
>
>
> Example >>  wakeHighPriorityLoop
> doCycle signal.
> debug ifTrue: [  "wait until high priority process is sleeping"
> [ highPriorityProcess isWaiting & highPriorityProcess isTerminated not]
> whileFalse: [
> Transcript show: '.'.
> 100 milliSeconds wait ].
> self halt
> ].
>

To make this example simpler, I changed this method to...
Example >> wakeHighPriorityLoop
|count|
count := 0.
[ Transcript show: '.'.
count := count + 1.
count > 10 ifTrue: [^self].
200 milliSeconds wait.
  ] repeat.



> Example >>  testUserPriority
> debug := true.
> highPriorityProcess := self highPriorityRunLoop.
> Transcript cr.
> debug ifTrue: [self halt].
> 3 timesRepeat: [
> Transcript crShow: 'U'.
> self wakeHighPriorityLoop.].
> highPriorityProcess terminate.
>

and this method to...
Example >>  testUserPriority
[ 3 timesRepeat: [
Transcript crShow: 'U'.
self halt.
self wakeHighPriorityLoop.].
] forkAt: 39 named: 'testUserPriority'.
self halt.
highPriorityProcess terminate.

So there should be no way that the 39-priority thread should block the
40-priority UI thread.
But when I run #testUserPriority and step <Over>  #wakeHighPriorityLoop
the UI blocks for two seconds and then all of a sudden  "U..........."
appears in full on the Transcript shows.
I'd expect to see the dots slowly appearing one-by-one.
I really don't understand the behaviour I'm seeing.

cheers -ben

Reply via email to