I meant to also post a link showing the pattern of the recent primitives...
https://docs.google.com/spreadsheets/d/1QzY8iL_3kvHJg1xMg1yvCFzDpQf3Tl9zuVkzfom4cx4/edit?usp=sharing


On Tue, 13 Nov 2018 at 00:50, Ben Coman <b...@openinworld.com> wrote:

>
>
> On Mon, 12 Nov 2018 at 21:37, Sven Van Caekenberghe <s...@stfx.eu> wrote:
>
>> Hi,
>>
>> I run Pharo 7 64-bit on a macOS laptop, where the images are kept running
>> across sleep/wake cycles.
>>
>
> Just to confirm, you mean your laptop sleep/wake cycle.
> On my Window 10 laptop I do the same quite often with no problems.
>
>
>> For many weeks, it often happens that an image crashes before/after such
>> a sleep/wakeup (not all the time, just regularly).
>>
>> Here is a crash dump from today (fresh image/vm from WE, nothing special
>> loaded).
>>
>> Related to scheduling ? Event handling ?
>
>
> In trying to understand the last few moments, is the recent primitives
> list strongly ordered in time?...
>   Most recent primitives
>   signal
>   nowTick
>   primSignal:atUTCMicroseconds:
>   wait
>   millisecondClockValue
>   @
>   actualScreenSize
>
>
> Starting at #actualScreenSize, instrumenting the code by adding...
>      Transcript crShow: thisContext sender printString.
> indicates the following call chain...
>   DisplayScreen-class>>actualScreenSize
>   MorphicUIManager>>checkForNewDisplaySize
>   DisplayScreen class>>checkForNewScreenSize
>   WorldState>>doOneCycleNowFor:
>   WorldState>>doOneCycleFor:
>   WorldMorph>>doOneCycle
>   WorldMorph class>>doOneCycle
>   MorphicUIManager>>spawnNewProcess
>
> In detail from a static analysis of the code...
>            > WorldState>>doOneCycleNowFor:
>               > DisplayScreen class>>checkForNewScreenSize
>                   > MorphicUIManager>>checkForNewDisplaySize
>                       > DisplayScreen-class>>actualScreenSize
> PRIMITIVE
>                   < MorphicUIManager>>checkForNewDisplaySize
>                < DisplayScreen class>>checkForNewScreenSize
>             < WorldState>>doOneCycleNowFor
>          < WorldState>>doOneCycleFor:
>       < WorldMorph>>doOneCycle
>    < WorldMorph class>>doOneCycle
> < MorphicUIManager>>spawnNewProcess
>    > WorldMorph class>>doOneCycle
>       > WorldMorph>>doOneCycle
>          > WorldState>>doOneCycleNowFor:
>             > WorldState>>interCyclePause:
>                > Time>>millisecondClockValue       PRIMITIVE
>             < WorldState>>interCyclePause:
>                > Delay>>schedule
>                   > DelaySemaphoreScheduler>>schedule:
>                       > Semaphore>>wait
> PRIMITIVE "readyToSchedule variable"
>                       > Semaphore>>signal
>  PRIMITIVE "timingSemaphore variable"   NOT RECORDED
>
>         maybe context change causes this to be recorded later in "Most
> recent primitives"
>                              >
> DelayMicrosecondTicker>>waitForUserSignalled:orExpired:      waking up from
> Semaphore>>wait
>                                     the primSignal:atUTCMicroseconds:
> PRIMITIVE  immediately before the #wait seems to have been logged now in
> "Most recent primitives"
>                              >
> DelaySemaphoreScheduler>>scheduleAtTimingPriority
>                                 > Semaphore>>signal
>  PRIMITIVE  "readyToSchedule variable"  seems to have not been recorded in
> "Most recent primitives"
>                                 >
> DelayBasicScheduler>>scheduleAtTimingPriority
>                              <
> DelaySemaphoreScheduler>>scheduleAtTimingPriority
>                           <
> DelayBasicScheduler>>runBackendLoopAtTimingPriority
>                              > DelayMicrosecondTicker>>nowTick
>  PRIMITIVE
>                              > Delay>>timingPrioritySignalExpired
>                                 > Semaphore>>signal
> PRIMITIVE "delaySemaphore variable"      CRASH
>
>  Smalltalk stack dump:
>     0x7ffee21d7138 M Delay>timingPrioritySignalExpired 0x113e3b138: a(n)
> Delay
>     0x7ffee21d7170 M [] in
> DelaySemaphoreScheduler(DelayBasicScheduler)>runBackendLoopAtTimingPriority
> 0x11453b8c0: a(n) DelaySemaphoreScheduler
>        0x1169f51c8 s BlockClosure>ensure:
>        0x1169f5828 s
> DelaySemaphoreScheduler(DelayBasicScheduler)>runBackendLoopAtTimingPriority
>        0x1169f5c38 s [] in
> DelaySemaphoreScheduler(DelayBasicScheduler)>startTimerEventLoopPriority:
>        0x1169fae10 s [] in BlockClosure>newProcess
>
> The only reason I can think that last semaphore call would be a problem is
> if variable delaySemaphore was not a Semaphore,
> but the C stack backtrace doesn't look like it crashes in the Semaphore
> handling.
> Its perhaps co-incidental with delay scheduling code is invoked fairly
> often, that its the current process when this crash occurs.
>
>
> To hep isolate the failure point, I would considering copying #nowTIck to
> a multiple series like...
> #nowTick1
> #nowTick2
> #nowTick3
> etc so that all of the sender sites can be made distinct.
> And maybe the same for #signal senders within the delay scheduling code.
>
> One side-curiousity is I can't see where the primitive #@ is being called
> from.
> Does it indicate some loop as its trying to determine
>
> To me the "vmIOProcessEvents" in the C backtrace with a fairly deep stack
> into the AppKit framework
> indicates its related to event handling.
>
> cheers -ben
>

Reply via email to