Morphic yellow cross of death

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
24 messages Options
12
Reply | Threaded
Open this post in threaded view
|

Morphic yellow cross of death

Nicolas Cellier
Lately I have many instances of these yellow cross over red background that happens when a low level morphic error is encountered.

It seems related to a MultiNewParagraph lines being nil like in following stack example.

I don't know if it can help a morphic guru, but I just hate those stateful behavior with volatile states...

Really hard to debug/understand!!!


UndefinedObject(Object)>>error:
    Receiver: nil
    Arguments and temporary variables:
        aString:     'MessageNotUnderstood: UndefinedObject>>findBinaryIndex:ifNone:'
    Receiver's instance variables:
nil

[] in WorldState>>displayWorldSafely:
    Receiver: a WorldState
    Arguments and temporary variables:
<<error during printing>
    Receiver's instance variables:
        hands:     {a HandMorph(3216)}
        activeHand:     a HandMorph(3216)
        viewBox:     0@0 corner: 1113@867
        canvas:     a FormCanvas on: DisplayScreen(1113x867x32)
        damageRecorder:     a DamageRecorder
        stepList:     a Heap(StepMessage(#stepAt: -> 3PButton(#toggleProjectLocalness 739))...etc...
        lastStepTime:     690046
        lastStepMessage:     nil
        lastCycleTime:     690046
        commandHistory:     a CommandHistory
        alarms:     a MorphicAlarmQueue()
        lastAlarmTime:     690046
        remoteServer:     nil
        multiCanvas:     nil

BlockClosure>>cull:cull:
    Receiver: [closure] in WorldState>>displayWorldSafely:
    Arguments and temporary variables:
        firstArg:     'MessageNotUnderstood: UndefinedObject>>findBinaryIndex:ifNone:'
        secondArg:     nil
    Receiver's instance variables:
        outerContext:     WorldState>>displayWorldSafely:
        startpc:     97
        numArgs:     2

[] in BlockClosure>>ifError:
    Receiver: [closure] in WorldState>>displayWorldSafely:
    Arguments and temporary variables:
        errorHandlerBlock:     MessageNotUnderstood: UndefinedObject>>findBinaryIndex:ifNon...etc...
        ex:     [closure] in WorldState>>displayWorldSafely:
    Receiver's instance variables:
        outerContext:     WorldState>>displayWorldSafely:
        startpc:     90
        numArgs:     0

BlockClosure>>cull:
    Receiver: [closure] in BlockClosure>>ifError:
    Arguments and temporary variables:
        firstArg:     MessageNotUnderstood: UndefinedObject>>findBinaryIndex:ifNone:
    Receiver's instance variables:
        outerContext:     BlockClosure>>ifError:
        startpc:     40
        numArgs:     1

[] in MethodContext(ContextPart)>>handleSignal:
    Receiver: BlockClosure>>on:do:
    Arguments and temporary variables:
<<error during printing>
    Receiver's instance variables:
        sender:     BlockClosure>>ifError:
        pc:     17
        stackp:     3
        method:     (BlockClosure>>#on:do: "a CompiledMethod(680)")
        closureOrNil:     nil
        receiver:     [closure] in WorldState>>displayWorldSafely:

BlockClosure>>ensure:
    Receiver: [closure] in MethodContext(ContextPart)>>handleSignal:
    Arguments and temporary variables:
        aBlock:     [closure] in MethodContext(ContextPart)>>handleSignal:
        complete:     nil
        returnValue:     nil
    Receiver's instance variables:
        outerContext:     MethodContext(ContextPart)>>handleSignal:
        startpc:     98
        numArgs:     0

MethodContext(ContextPart)>>handleSignal:
    Receiver: BlockClosure>>on:do:
    Arguments and temporary variables:
        exception:     MessageNotUnderstood: UndefinedObject>>findBinaryIndex:ifNone:
        val:     nil
    Receiver's instance variables:
        sender:     BlockClosure>>ifError:
        pc:     17
        stackp:     3
        method:     (BlockClosure>>#on:do: "a CompiledMethod(680)")
        closureOrNil:     nil
        receiver:     [closure] in WorldState>>displayWorldSafely:

MessageNotUnderstood(Exception)>>signal
    Receiver: MessageNotUnderstood: UndefinedObject>>findBinaryIndex:ifNone:
    Arguments and temporary variables:

    Receiver's instance variables:
        messageText:     nil
        tag:     nil
        signalContext:     MessageNotUnderstood(Exception)>>signal
        handlerContext:     BlockClosure>>on:do:
        outerContext:     nil
        message:     findBinaryIndex: [closure] in MultiNewParagraph(NewParagraph)>>fastFin...etc...
        receiver:     nil
        reachedDefaultHandler:     false

UndefinedObject(Object)>>doesNotUnderstand: #findBinaryIndex:ifNone:
    Receiver: nil
    Arguments and temporary variables:
        aMessage:     findBinaryIndex: [closure] in MultiNewParagraph(NewParagraph)>>fastFi...etc...
        exception:     MessageNotUnderstood: UndefinedObject>>findBinaryIndex:ifNone:
        resumeValue:     nil
    Receiver's instance variables:
nil

MultiNewParagraph(NewParagraph)>>fastFindFirstLineSuchThat:
    Receiver: a MultiNewParagraph
    Arguments and temporary variables:
        lineBlock:     [closure] in MultiNewParagraph(NewParagraph)>>lineIndexForPoint:
    Receiver's instance variables:
        text:     a Text for 'evaluate: textOrStream cue: aCue ifFail: failBlock logged: lo...etc...
        textStyle:     a TextStyle Bitmap DejaVu Sans 9
        firstCharacterIndex:     1
        container:     0@0 corner: 669@9999999
        lines:     {a TextLine 1 to: 67 . a TextLine 68 to: 139 . a TextLine 140 to: 240 . ...etc...
        positionWhenComposed:     0@0
        offsetToEnd:     1089
        maxRightX:     652
        selectionStart:     a CharacterBlock with index 278 and character Character tab and...etc...
        selectionStop:     a CharacterBlock with index 278 and character Character tab and ...etc...
        wantsColumnBreaks:     false
        focused:     true
        caretRect:     nil
        showCaret:     true
        presentationText:     nil
        presentationLines:     nil

MultiNewParagraph(NewParagraph)>>lineIndexForPoint:
    Receiver: a MultiNewParagraph
    Arguments and temporary variables:
        aPoint:     669@274
        i:     nil
        py:     274
    Receiver's instance variables:
        text:     a Text for 'evaluate: textOrStream cue: aCue ifFail: failBlock logged: lo...etc...
        textStyle:     a TextStyle Bitmap DejaVu Sans 9
        firstCharacterIndex:     1
        container:     0@0 corner: 669@9999999
        lines:     {a TextLine 1 to: 67 . a TextLine 68 to: 139 . a TextLine 140 to: 240 . ...etc...
        positionWhenComposed:     0@0
        offsetToEnd:     1089
        maxRightX:     652
        selectionStart:     a CharacterBlock with index 278 and character Character tab and...etc...
        selectionStop:     a CharacterBlock with index 278 and character Character tab and ...etc...
        wantsColumnBreaks:     false
        focused:     true
        caretRect:     nil
        showCaret:     true
        presentationText:     nil
        presentationLines:     nil

MultiNewParagraph>>displayOn:using:at:
    Receiver: a MultiNewParagraph
    Arguments and temporary variables:
        aCanvas:     a FormCanvas on: DisplayScreen(1113x867x32)
        displayScanner:     a MultiDisplayScanner
        somePosition:     80@436
        visibleRectangle:     0@0 corner: 669@274
        offset:     80@436
        leftInRun:     0
        line:     nil
        i:     nil
        iLimiT:     nil
    Receiver's instance variables:
        text:     a Text for 'evaluate: textOrStream cue: aCue ifFail: failBlock logged: lo...etc...
        textStyle:     a TextStyle Bitmap DejaVu Sans 9
        firstCharacterIndex:     1
        container:     0@0 corner: 669@9999999
        lines:     {a TextLine 1 to: 67 . a TextLine 68 to: 139 . a TextLine 140 to: 240 . ...etc...
        positionWhenComposed:     0@0
        offsetToEnd:     1089
        maxRightX:     652
        selectionStart:     a CharacterBlock with index 278 and character Character tab and...etc...
        selectionStop:     a CharacterBlock with index 278 and character Character tab and ...etc...
        wantsColumnBreaks:     false
        focused:     true
        caretRect:     nil
        showCaret:     true
        presentationText:     nil
        presentationLines:     nil

FormCanvas>>paragraph:bounds:color:
    Receiver: a FormCanvas on: DisplayScreen(1113x867x32)
    Arguments and temporary variables:
        para:     a MultiNewParagraph
        bounds:     0@0 corner: 669@450
        c:     Color black
        scanner:     a MultiDisplayScanner
    Receiver's instance variables:
        target:     nil
        filterSelector:     nil
        origin:     80@436
        clipRect:     77@436 corner: 752@710
        form:     DisplayScreen(1113x867x32)
        port:     a GrafPort
        shadowColor:     nil

TextMorphForEditView(TextMorph)>>drawOn:
    Receiver: a TextMorphForEditView(975)
    Arguments and temporary variables:
        aCanvas:     a FormCanvas on: DisplayScreen(1113x867x32)
        fauxBounds:     0@0 corner: 669@450
    Receiver's instance variables:
        bounds:     0@0 corner: 669@450
        owner:     a TransformMorph(1921)
        submorphs:     #()
        fullBounds:     0@0 corner: 669@450
        color:     Color black
        extension:     a MorphExtension (1256) [other:  (errorOnDraw -> true) (blinkStart -...etc...
        borderWidth:     0
        borderColor:     Color black
        textStyle:     a TextStyle Bitmap DejaVu Sans 9
        text:     a Text for 'evaluate: textOrStream cue: aCue ifFail: failBlock logged: lo...etc...
        wrapFlag:     true
        paragraph:     a MultiNewParagraph
        editor:     a SmalltalkEditor
        container:     nil
        predecessor:     nil
        successor:     nil
        backgroundColor:     nil
        margins:     nil
        editHistory:     nil
        editView:     a PluggableTextMorphPlus(3589)
        acceptOnCR:     false

FormCanvas(Canvas)>>draw:
    Receiver: a FormCanvas on: DisplayScreen(1113x867x32)
    Arguments and temporary variables:
        anObject:     a TextMorphForEditView(975)
    Receiver's instance variables:
        target:     nil
        filterSelector:     nil
        origin:     80@436
        clipRect:     77@436 corner: 752@710
        form:     DisplayScreen(1113x867x32)
        port:     a GrafPort
        shadowColor:     nil

FormCanvas(Canvas)>>drawMorph:
    Receiver: a FormCanvas on: DisplayScreen(1113x867x32)
    Arguments and temporary variables:
        aMorph:     a TextMorphForEditView(975)
    Receiver's instance variables:
        target:     nil
        filterSelector:     nil
        origin:     80@436
        clipRect:     77@436 corner: 752@710
        form:     DisplayScreen(1113x867x32)
        port:     a GrafPort
        shadowColor:     nil

[] in TextMorphForEditView(Morph)>>fullDrawOn:
    Receiver: a TextMorphForEditView(975)
    Arguments and temporary variables:
        aCanvas:     a FormCanvas on: DisplayScreen(1113x867x32)
    Receiver's instance variables:
        bounds:     0@0 corner: 669@450
        owner:     a TransformMorph(1921)
        submorphs:     #()
        fullBounds:     0@0 corner: 669@450
        color:     Color black
        extension:     a MorphExtension (1256) [other:  (errorOnDraw -> true) (blinkStart -...etc...
        borderWidth:     0
        borderColor:     Color black
        textStyle:     a TextStyle Bitmap DejaVu Sans 9
        text:     a Text for 'evaluate: textOrStream cue: aCue ifFail: failBlock logged: lo...etc...
        wrapFlag:     true
        paragraph:     a MultiNewParagraph
        editor:     a SmalltalkEditor
        container:     nil
        predecessor:     nil
        successor:     nil
        backgroundColor:     nil
        margins:     nil
        editHistory:     nil
        editView:     a PluggableTextMorphPlus(3589)
        acceptOnCR:     false

FormCanvas>>roundCornersOf:in:during:
    Receiver: a FormCanvas on: DisplayScreen(1113x867x32)
    Arguments and temporary variables:
        aMorph:     a TextMorphForEditView(975)
        bounds:     0@0 corner: 669@450
        aBlock:     [closure] in TextMorphForEditView(Morph)>>fullDrawOn:
    Receiver's instance variables:
        target:     nil
        filterSelector:     nil
        origin:     80@436
        clipRect:     77@436 corner: 752@710
        form:     DisplayScreen(1113x867x32)
        port:     a GrafPort
        shadowColor:     nil


--- The full stack ---
UndefinedObject(Object)>>error:
[] in WorldState>>displayWorldSafely:
BlockClosure>>cull:cull:
[] in BlockClosure>>ifError:
BlockClosure>>cull:
[] in MethodContext(ContextPart)>>handleSignal:
BlockClosure>>ensure:
MethodContext(ContextPart)>>handleSignal:
MessageNotUnderstood(Exception)>>signal
UndefinedObject(Object)>>doesNotUnderstand: #findBinaryIndex:ifNone:
MultiNewParagraph(NewParagraph)>>fastFindFirstLineSuchThat:
MultiNewParagraph(NewParagraph)>>lineIndexForPoint:
MultiNewParagraph>>displayOn:using:at:
FormCanvas>>paragraph:bounds:color:
TextMorphForEditView(TextMorph)>>drawOn:
FormCanvas(Canvas)>>draw:
FormCanvas(Canvas)>>drawMorph:
[] in TextMorphForEditView(Morph)>>fullDrawOn:
FormCanvas>>roundCornersOf:in:during:
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FormCanvas(Canvas)>>roundCornersOf:during:
TextMorphForEditView(Morph)>>fullDrawOn:
FormCanvas(Canvas)>>fullDraw:
FormCanvas(Canvas)>>fullDrawMorph:
[] in [] in TransformMorph>>drawSubmorphsOn:
Array(SequenceableCollection)>>reverseDo:
[] in TransformMorph>>drawSubmorphsOn:
FormCanvas>>transformBy:clippingTo:during:smoothing:
TransformMorph>>drawSubmorphsOn:
[] in TransformMorph(Morph)>>fullDrawOn:
FormCanvas>>roundCornersOf:in:during:
FormCanvas(Canvas)>


Reply | Threaded
Open this post in threaded view
|

Re: Morphic yellow cross of death

Tobias Pape
Am 16.09.2013 um 23:26 schrieb Nicolas Cellier <[hidden email]>:

> Lately I have many instances of these yellow cross over red background that happens when a low level morphic error is encountered.
>
> It seems related to a MultiNewParagraph lines being nil like in following stack example.
>
> I don't know if it can help a morphic guru, but I just hate those stateful behavior with volatile states...
>
> Really hard to debug/understand!!!
>

FYI this also happens very often when using OB.
Annoying to the level of unusable.

Best
        -Tobias
Reply | Threaded
Open this post in threaded view
|

Re: Morphic yellow cross of death

Bob Arning-2
In reply to this post by Nicolas Cellier
Well,

- your stack is truncated, is there more somewhere?
- can you say anything about how you got there?
- did you notice that lines was not nil by the time the stack was written:
        lines:     {a TextLine 1 to: 67 . a TextLine 68 to: 139 . a TextLine 140 to: 240 . ...etc...

Cheers,
Bob

On 9/16/13 5:26 PM, Nicolas Cellier wrote:
Lately I have many instances of these yellow cross over red background that happens when a low level morphic error is encountered.

It seems related to a MultiNewParagraph lines being nil like in following stack example.

I don't know if it can help a morphic guru, but I just hate those stateful behavior with volatile states...

Really hard to debug/understand!!!



Reply | Threaded
Open this post in threaded view
|

Re: Morphic yellow cross of death

Nicolas Cellier
Ah yes, those volatile states...
I got the red square/yellow cross by simple browsing activities
- browsing senders, sometimes when clicking on another sender in the list, sometimes by changing list selection with vertical arrow keys
- navigating in debugger stack similarly...
For this specific stack, I just can't remember, too many occurrences...


2013/9/17 Bob Arning <[hidden email]>
Well,

- your stack is truncated, is there more somewhere?
- can you say anything about how you got there?
- did you notice that lines was not nil by the time the stack was written:

        lines:     {a TextLine 1 to: 67 . a TextLine 68 to: 139 . a TextLine 140 to: 240 . ...etc...

Cheers,
Bob

On 9/16/13 5:26 PM, Nicolas Cellier wrote:
Lately I have many instances of these yellow cross over red background that happens when a low level morphic error is encountered.

It seems related to a MultiNewParagraph lines being nil like in following stack example.

I don't know if it can help a morphic guru, but I just hate those stateful behavior with volatile states...

Really hard to debug/understand!!!







Reply | Threaded
Open this post in threaded view
|

Re: Morphic yellow cross of death

Chris Muller-3
> sometimes by changing list selection with vertical arrow keys

I haven't been experiencing many yellow-crosses-of-death but I have
noticed that arrowing down through lists by holding down-arrow key now
has a problem where the selection will jump back up every few
milliseconds.

Easy to reproduce.  Just hold down-arrow in any list.

I'm pretty sure this has to do with the recent feature of
"pre-selecting" the selection that Tim wanted.



> - navigating in debugger stack similarly...
> For this specific stack, I just can't remember, too many occurrences...
>
>
> 2013/9/17 Bob Arning <[hidden email]>
>>
>> Well,
>>
>> - your stack is truncated, is there more somewhere?
>> - can you say anything about how you got there?
>> - did you notice that lines was not nil by the time the stack was written:
>>
>>         lines:     {a TextLine 1 to: 67 . a TextLine 68 to: 139 . a
>> TextLine 140 to: 240 . ...etc...
>>
>> Cheers,
>> Bob
>>
>> On 9/16/13 5:26 PM, Nicolas Cellier wrote:
>>
>> Lately I have many instances of these yellow cross over red background
>> that happens when a low level morphic error is encountered.
>>
>> It seems related to a MultiNewParagraph lines being nil like in following
>> stack example.
>>
>> I don't know if it can help a morphic guru, but I just hate those stateful
>> behavior with volatile states...
>>
>> Really hard to debug/understand!!!
>>
>>
>>
>>
>>
>
>
>
>

Reply | Threaded
Open this post in threaded view
|

Re: Morphic yellow cross of death

Bob Arning-2
In reply to this post by Nicolas Cellier
Would you have been writing to the Transcript while this happened?

Cheers,
Bob

On 9/16/13 6:24 PM, Nicolas Cellier wrote:
Ah yes, those volatile states...
I got the red square/yellow cross by simple browsing activities
- browsing senders, sometimes when clicking on another sender in the list, sometimes by changing list selection with vertical arrow keys
- navigating in debugger stack similarly...
For this specific stack, I just can't remember, too many occurrences...


2013/9/17 Bob Arning <[hidden email]>
Well,

- your stack is truncated, is there more somewhere?
- can you say anything about how you got there?
- did you notice that lines was not nil by the time the stack was written:

        lines:     {a TextLine 1 to: 67 . a TextLine 68 to: 139 . a TextLine 140 to: 240 . ...etc...

Cheers,
Bob

On 9/16/13 5:26 PM, Nicolas Cellier wrote:
Lately I have many instances of these yellow cross over red background that happens when a low level morphic error is encountered.

It seems related to a MultiNewParagraph lines being nil like in following stack example.

I don't know if it can help a morphic guru, but I just hate those stateful behavior with volatile states...

Really hard to debug/understand!!!








    



Reply | Threaded
Open this post in threaded view
|

Re: Morphic yellow cross of death

Bob Arning-2
In reply to this post by Nicolas Cellier
Well, I can sort-of make it happen

- do you have the full SqueakDebug.log?
- did you copy the portion you sent from the file or did you do it another way? (like the mail bug report menu item)???
- you might think about upping the numbers in ContextPart>>errorReportOn: so we can see the full stack next time
[snip]
        strm position > (startPos+40000) ifTrue: [strm nextPutAll: '...etc...'.    "make 40000 much larger"
            ^ self].     "exit early"
        cnt > 60 ifTrue: [strm nextPutAll: '-- and more not shown --'.  ^ self].    "make 60 much larger"
[snip]

Cheers,
Bob

On 9/16/13 5:26 PM, Nicolas Cellier wrote:
Lately I have many instances of these yellow cross over red background that happens when a low level morphic error is encountered.

It seems related to a MultiNewParagraph lines being nil like in following stack example.

I don't know if it can help a morphic guru, but I just hate those stateful behavior with volatile states...

Really hard to debug/understand!!!


UndefinedObject(Object)>>error:
    Receiver: nil
    Arguments and temporary variables:
        aString:     'MessageNotUnderstood: UndefinedObject>>findBinaryIndex:ifNone:'
    Receiver's instance variables:
nil

[] in WorldState>>displayWorldSafely:
    Receiver: a WorldState
    Arguments and temporary variables:
<<error during printing>
    Receiver's instance variables:
        hands:     {a HandMorph(3216)}
        activeHand:     a HandMorph(3216)
        viewBox:     0@0 corner: 1113@867
        canvas:     a FormCanvas on: DisplayScreen(1113x867x32)
        damageRecorder:     a DamageRecorder
        stepList:     a Heap(StepMessage(#stepAt: -> 3PButton(#toggleProjectLocalness 739))...etc...
        lastStepTime:     690046
        lastStepMessage:     nil
        lastCycleTime:     690046
        commandHistory:     a CommandHistory
        alarms:     a MorphicAlarmQueue()
        lastAlarmTime:     690046
        remoteServer:     nil
        multiCanvas:     nil

BlockClosure>>cull:cull:
    Receiver: [closure] in WorldState>>displayWorldSafely:
    Arguments and temporary variables:
        firstArg:     'MessageNotUnderstood: UndefinedObject>>findBinaryIndex:ifNone:'
        secondArg:     nil
    Receiver's instance variables:
        outerContext:     WorldState>>displayWorldSafely:
        startpc:     97
        numArgs:     2

[] in BlockClosure>>ifError:
    Receiver: [closure] in WorldState>>displayWorldSafely:
    Arguments and temporary variables:
        errorHandlerBlock:     MessageNotUnderstood: UndefinedObject>>findBinaryIndex:ifNon...etc...
        ex:     [closure] in WorldState>>displayWorldSafely:
    Receiver's instance variables:
        outerContext:     WorldState>>displayWorldSafely:
        startpc:     90
        numArgs:     0

BlockClosure>>cull:
    Receiver: [closure] in BlockClosure>>ifError:
    Arguments and temporary variables:
        firstArg:     MessageNotUnderstood: UndefinedObject>>findBinaryIndex:ifNone:
    Receiver's instance variables:
        outerContext:     BlockClosure>>ifError:
        startpc:     40
        numArgs:     1

[] in MethodContext(ContextPart)>>handleSignal:
    Receiver: BlockClosure>>on:do:
    Arguments and temporary variables:
<<error during printing>
    Receiver's instance variables:
        sender:     BlockClosure>>ifError:
        pc:     17
        stackp:     3
        method:     (BlockClosure>>#on:do: "a CompiledMethod(680)")
        closureOrNil:     nil
        receiver:     [closure] in WorldState>>displayWorldSafely:

BlockClosure>>ensure:
    Receiver: [closure] in MethodContext(ContextPart)>>handleSignal:
    Arguments and temporary variables:
        aBlock:     [closure] in MethodContext(ContextPart)>>handleSignal:
        complete:     nil
        returnValue:     nil
    Receiver's instance variables:
        outerContext:     MethodContext(ContextPart)>>handleSignal:
        startpc:     98
        numArgs:     0

MethodContext(ContextPart)>>handleSignal:
    Receiver: BlockClosure>>on:do:
    Arguments and temporary variables:
        exception:     MessageNotUnderstood: UndefinedObject>>findBinaryIndex:ifNone:
        val:     nil
    Receiver's instance variables:
        sender:     BlockClosure>>ifError:
        pc:     17
        stackp:     3
        method:     (BlockClosure>>#on:do: "a CompiledMethod(680)")
        closureOrNil:     nil
        receiver:     [closure] in WorldState>>displayWorldSafely:

MessageNotUnderstood(Exception)>>signal
    Receiver: MessageNotUnderstood: UndefinedObject>>findBinaryIndex:ifNone:
    Arguments and temporary variables:

    Receiver's instance variables:
        messageText:     nil
        tag:     nil
        signalContext:     MessageNotUnderstood(Exception)>>signal
        handlerContext:     BlockClosure>>on:do:
        outerContext:     nil
        message:     findBinaryIndex: [closure] in MultiNewParagraph(NewParagraph)>>fastFin...etc...
        receiver:     nil
        reachedDefaultHandler:     false

UndefinedObject(Object)>>doesNotUnderstand: #findBinaryIndex:ifNone:
    Receiver: nil
    Arguments and temporary variables:
        aMessage:     findBinaryIndex: [closure] in MultiNewParagraph(NewParagraph)>>fastFi...etc...
        exception:     MessageNotUnderstood: UndefinedObject>>findBinaryIndex:ifNone:
        resumeValue:     nil
    Receiver's instance variables:
nil

MultiNewParagraph(NewParagraph)>>fastFindFirstLineSuchThat:
    Receiver: a MultiNewParagraph
    Arguments and temporary variables:
        lineBlock:     [closure] in MultiNewParagraph(NewParagraph)>>lineIndexForPoint:
    Receiver's instance variables:
        text:     a Text for 'evaluate: textOrStream cue: aCue ifFail: failBlock logged: lo...etc...
        textStyle:     a TextStyle Bitmap DejaVu Sans 9
        firstCharacterIndex:     1
        container:     0@0 corner: 669@9999999
        lines:     {a TextLine 1 to: 67 . a TextLine 68 to: 139 . a TextLine 140 to: 240 . ...etc...
        positionWhenComposed:     0@0
        offsetToEnd:     1089
        maxRightX:     652
        selectionStart:     a CharacterBlock with index 278 and character Character tab and...etc...
        selectionStop:     a CharacterBlock with index 278 and character Character tab and ...etc...
        wantsColumnBreaks:     false
        focused:     true
        caretRect:     nil
        showCaret:     true
        presentationText:     nil
        presentationLines:     nil

MultiNewParagraph(NewParagraph)>>lineIndexForPoint:
    Receiver: a MultiNewParagraph
    Arguments and temporary variables:
        aPoint:     669@274
        i:     nil
        py:     274
    Receiver's instance variables:
        text:     a Text for 'evaluate: textOrStream cue: aCue ifFail: failBlock logged: lo...etc...
        textStyle:     a TextStyle Bitmap DejaVu Sans 9
        firstCharacterIndex:     1
        container:     0@0 corner: 669@9999999
        lines:     {a TextLine 1 to: 67 . a TextLine 68 to: 139 . a TextLine 140 to: 240 . ...etc...
        positionWhenComposed:     0@0
        offsetToEnd:     1089
        maxRightX:     652
        selectionStart:     a CharacterBlock with index 278 and character Character tab and...etc...
        selectionStop:     a CharacterBlock with index 278 and character Character tab and ...etc...
        wantsColumnBreaks:     false
        focused:     true
        caretRect:     nil
        showCaret:     true
        presentationText:     nil
        presentationLines:     nil

MultiNewParagraph>>displayOn:using:at:
    Receiver: a MultiNewParagraph
    Arguments and temporary variables:
        aCanvas:     a FormCanvas on: DisplayScreen(1113x867x32)
        displayScanner:     a MultiDisplayScanner
        somePosition:     80@436
        visibleRectangle:     0@0 corner: 669@274
        offset:     80@436
        leftInRun:     0
        line:     nil
        i:     nil
        iLimiT:     nil
    Receiver's instance variables:
        text:     a Text for 'evaluate: textOrStream cue: aCue ifFail: failBlock logged: lo...etc...
        textStyle:     a TextStyle Bitmap DejaVu Sans 9
        firstCharacterIndex:     1
        container:     0@0 corner: 669@9999999
        lines:     {a TextLine 1 to: 67 . a TextLine 68 to: 139 . a TextLine 140 to: 240 . ...etc...
        positionWhenComposed:     0@0
        offsetToEnd:     1089
        maxRightX:     652
        selectionStart:     a CharacterBlock with index 278 and character Character tab and...etc...
        selectionStop:     a CharacterBlock with index 278 and character Character tab and ...etc...
        wantsColumnBreaks:     false
        focused:     true
        caretRect:     nil
        showCaret:     true
        presentationText:     nil
        presentationLines:     nil

FormCanvas>>paragraph:bounds:color:
    Receiver: a FormCanvas on: DisplayScreen(1113x867x32)
    Arguments and temporary variables:
        para:     a MultiNewParagraph
        bounds:     0@0 corner: 669@450
        c:     Color black
        scanner:     a MultiDisplayScanner
    Receiver's instance variables:
        target:     nil
        filterSelector:     nil
        origin:     80@436
        clipRect:     77@436 corner: 752@710
        form:     DisplayScreen(1113x867x32)
        port:     a GrafPort
        shadowColor:     nil

TextMorphForEditView(TextMorph)>>drawOn:
    Receiver: a TextMorphForEditView(975)
    Arguments and temporary variables:
        aCanvas:     a FormCanvas on: DisplayScreen(1113x867x32)
        fauxBounds:     0@0 corner: 669@450
    Receiver's instance variables:
        bounds:     0@0 corner: 669@450
        owner:     a TransformMorph(1921)
        submorphs:     #()
        fullBounds:     0@0 corner: 669@450
        color:     Color black
        extension:     a MorphExtension (1256) [other:  (errorOnDraw -> true) (blinkStart -...etc...
        borderWidth:     0
        borderColor:     Color black
        textStyle:     a TextStyle Bitmap DejaVu Sans 9
        text:     a Text for 'evaluate: textOrStream cue: aCue ifFail: failBlock logged: lo...etc...
        wrapFlag:     true
        paragraph:     a MultiNewParagraph
        editor:     a SmalltalkEditor
        container:     nil
        predecessor:     nil
        successor:     nil
        backgroundColor:     nil
        margins:     nil
        editHistory:     nil
        editView:     a PluggableTextMorphPlus(3589)
        acceptOnCR:     false

FormCanvas(Canvas)>>draw:
    Receiver: a FormCanvas on: DisplayScreen(1113x867x32)
    Arguments and temporary variables:
        anObject:     a TextMorphForEditView(975)
    Receiver's instance variables:
        target:     nil
        filterSelector:     nil
        origin:     80@436
        clipRect:     77@436 corner: 752@710
        form:     DisplayScreen(1113x867x32)
        port:     a GrafPort
        shadowColor:     nil

FormCanvas(Canvas)>>drawMorph:
    Receiver: a FormCanvas on: DisplayScreen(1113x867x32)
    Arguments and temporary variables:
        aMorph:     a TextMorphForEditView(975)
    Receiver's instance variables:
        target:     nil
        filterSelector:     nil
        origin:     80@436
        clipRect:     77@436 corner: 752@710
        form:     DisplayScreen(1113x867x32)
        port:     a GrafPort
        shadowColor:     nil

[] in TextMorphForEditView(Morph)>>fullDrawOn:
    Receiver: a TextMorphForEditView(975)
    Arguments and temporary variables:
        aCanvas:     a FormCanvas on: DisplayScreen(1113x867x32)
    Receiver's instance variables:
        bounds:     0@0 corner: 669@450
        owner:     a TransformMorph(1921)
        submorphs:     #()
        fullBounds:     0@0 corner: 669@450
        color:     Color black
        extension:     a MorphExtension (1256) [other:  (errorOnDraw -> true) (blinkStart -...etc...
        borderWidth:     0
        borderColor:     Color black
        textStyle:     a TextStyle Bitmap DejaVu Sans 9
        text:     a Text for 'evaluate: textOrStream cue: aCue ifFail: failBlock logged: lo...etc...
        wrapFlag:     true
        paragraph:     a MultiNewParagraph
        editor:     a SmalltalkEditor
        container:     nil
        predecessor:     nil
        successor:     nil
        backgroundColor:     nil
        margins:     nil
        editHistory:     nil
        editView:     a PluggableTextMorphPlus(3589)
        acceptOnCR:     false

FormCanvas>>roundCornersOf:in:during:
    Receiver: a FormCanvas on: DisplayScreen(1113x867x32)
    Arguments and temporary variables:
        aMorph:     a TextMorphForEditView(975)
        bounds:     0@0 corner: 669@450
        aBlock:     [closure] in TextMorphForEditView(Morph)>>fullDrawOn:
    Receiver's instance variables:
        target:     nil
        filterSelector:     nil
        origin:     80@436
        clipRect:     77@436 corner: 752@710
        form:     DisplayScreen(1113x867x32)
        port:     a GrafPort
        shadowColor:     nil


--- The full stack ---
UndefinedObject(Object)>>error:
[] in WorldState>>displayWorldSafely:
BlockClosure>>cull:cull:
[] in BlockClosure>>ifError:
BlockClosure>>cull:
[] in MethodContext(ContextPart)>>handleSignal:
BlockClosure>>ensure:
MethodContext(ContextPart)>>handleSignal:
MessageNotUnderstood(Exception)>>signal
UndefinedObject(Object)>>doesNotUnderstand: #findBinaryIndex:ifNone:
MultiNewParagraph(NewParagraph)>>fastFindFirstLineSuchThat:
MultiNewParagraph(NewParagraph)>>lineIndexForPoint:
MultiNewParagraph>>displayOn:using:at:
FormCanvas>>paragraph:bounds:color:
TextMorphForEditView(TextMorph)>>drawOn:
FormCanvas(Canvas)>>draw:
FormCanvas(Canvas)>>drawMorph:
[] in TextMorphForEditView(Morph)>>fullDrawOn:
FormCanvas>>roundCornersOf:in:during:
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FormCanvas(Canvas)>>roundCornersOf:during:
TextMorphForEditView(Morph)>>fullDrawOn:
FormCanvas(Canvas)>>fullDraw:
FormCanvas(Canvas)>>fullDrawMorph:
[] in [] in TransformMorph>>drawSubmorphsOn:
Array(SequenceableCollection)>>reverseDo:
[] in TransformMorph>>drawSubmorphsOn:
FormCanvas>>transformBy:clippingTo:during:smoothing:
TransformMorph>>drawSubmorphsOn:
[] in TransformMorph(Morph)>>fullDrawOn:
FormCanvas>>roundCornersOf:in:during:
FormCanvas(Canvas)>



    



Reply | Threaded
Open this post in threaded view
|

Re: Morphic yellow cross of death

Frank Shearar-3
In reply to this post by Chris Muller-3
It is. I've mentioned that problem before. Having moaned though, I'd like to _keep_ preselection and have it just _work_. On a slow machine (my laptop) it provides valuable UI feedback. On a fast machine you'd see the value by opening up a Dependency Browser and clicking around the packages.

frank

On 16 Sep 2013, at 23:33, Chris Muller <[hidden email]> wrote:

>> sometimes by changing list selection with vertical arrow keys
>
> I haven't been experiencing many yellow-crosses-of-death but I have
> noticed that arrowing down through lists by holding down-arrow key now
> has a problem where the selection will jump back up every few
> milliseconds.
>
> Easy to reproduce.  Just hold down-arrow in any list.
>
> I'm pretty sure this has to do with the recent feature of
> "pre-selecting" the selection that Tim wanted.
>
>
>
>> - navigating in debugger stack similarly...
>> For this specific stack, I just can't remember, too many occurrences...
>>
>>
>> 2013/9/17 Bob Arning <[hidden email]>
>>>
>>> Well,
>>>
>>> - your stack is truncated, is there more somewhere?
>>> - can you say anything about how you got there?
>>> - did you notice that lines was not nil by the time the stack was written:
>>>
>>>        lines:     {a TextLine 1 to: 67 . a TextLine 68 to: 139 . a
>>> TextLine 140 to: 240 . ...etc...
>>>
>>> Cheers,
>>> Bob
>>>
>>> On 9/16/13 5:26 PM, Nicolas Cellier wrote:
>>>
>>> Lately I have many instances of these yellow cross over red background
>>> that happens when a low level morphic error is encountered.
>>>
>>> It seems related to a MultiNewParagraph lines being nil like in following
>>> stack example.
>>>
>>> I don't know if it can help a morphic guru, but I just hate those stateful
>>> behavior with volatile states...
>>>
>>> Really hard to debug/understand!!!
>>>
>>>
>>>
>>>
>>>
>>
>>
>>
>>
>

Reply | Threaded
Open this post in threaded view
|

Re: Morphic yellow cross of death

Nicolas Cellier
In reply to this post by Bob Arning-2
Ah another instance (see attachment)
This time I clicked in a debugger methodList and you can see that

(listSource itemSelectedAmongMultiple:  row) ifTrue: [

bugged because it did not answer a boolean...


2013/9/17 Bob Arning <[hidden email]>
Well, I can sort-of make it happen

- do you have the full SqueakDebug.log?
- did you copy the portion you sent from the file or did you do it another way? (like the mail bug report menu item)???
- you might think about upping the numbers in ContextPart>>errorReportOn: so we can see the full stack next time
[snip]
        strm position > (startPos+40000) ifTrue: [strm nextPutAll: '...etc...'.    "make 40000 much larger"
            ^ self].     "exit early"
        cnt > 60 ifTrue: [strm nextPutAll: '-- and more not shown --'.  ^ self].    "make 60 much larger"
[snip]

Cheers,
Bob

On 9/16/13 5:26 PM, Nicolas Cellier wrote:
Lately I have many instances of these yellow cross over red background that happens when a low level morphic error is encountered.

It seems related to a MultiNewParagraph lines being nil like in following stack example.

I don't know if it can help a morphic guru, but I just hate those stateful behavior with volatile states...

Really hard to debug/understand!!!


UndefinedObject(Object)>>error:
    Receiver: nil
    Arguments and temporary variables:
        aString:     'MessageNotUnderstood: UndefinedObject>>findBinaryIndex:ifNone:'
    Receiver's instance variables:
nil

[] in WorldState>>displayWorldSafely:
    Receiver: a WorldState
    Arguments and temporary variables:
<<error during printing>
    Receiver's instance variables:
        hands:     {a HandMorph(3216)}
        activeHand:     a HandMorph(3216)
        viewBox:     0@0 corner: 1113@867
        canvas:     a FormCanvas on: DisplayScreen(1113x867x32)
        damageRecorder:     a DamageRecorder
        stepList:     a Heap(StepMessage(#stepAt: -> 3PButton(#toggleProjectLocalness 739))...etc...
        lastStepTime:     690046
        lastStepMessage:     nil
        lastCycleTime:     690046
        commandHistory:     a CommandHistory
        alarms:     a MorphicAlarmQueue()
        lastAlarmTime:     690046
        remoteServer:     nil
        multiCanvas:     nil

BlockClosure>>cull:cull:
    Receiver: [closure] in WorldState>>displayWorldSafely:
    Arguments and temporary variables:
        firstArg:     'MessageNotUnderstood: UndefinedObject>>findBinaryIndex:ifNone:'
        secondArg:     nil
    Receiver's instance variables:
        outerContext:     WorldState>>displayWorldSafely:
        startpc:     97
        numArgs:     2

[] in BlockClosure>>ifError:
    Receiver: [closure] in WorldState>>displayWorldSafely:
    Arguments and temporary variables:
        errorHandlerBlock:     MessageNotUnderstood: UndefinedObject>>findBinaryIndex:ifNon...etc...
        ex:     [closure] in WorldState>>displayWorldSafely:
    Receiver's instance variables:
        outerContext:     WorldState>>displayWorldSafely:
        startpc:     90
        numArgs:     0

BlockClosure>>cull:
    Receiver: [closure] in BlockClosure>>ifError:
    Arguments and temporary variables:
        firstArg:     MessageNotUnderstood: UndefinedObject>>findBinaryIndex:ifNone:
    Receiver's instance variables:
        outerContext:     BlockClosure>>ifError:
        startpc:     40
        numArgs:     1

[] in MethodContext(ContextPart)>>handleSignal:
    Receiver: BlockClosure>>on:do:
    Arguments and temporary variables:
<<error during printing>
    Receiver's instance variables:
        sender:     BlockClosure>>ifError:
        pc:     17
        stackp:     3
        method:     (BlockClosure>>#on:do: "a CompiledMethod(680)")
        closureOrNil:     nil
        receiver:     [closure] in WorldState>>displayWorldSafely:

BlockClosure>>ensure:
    Receiver: [closure] in MethodContext(ContextPart)>>handleSignal:
    Arguments and temporary variables:
        aBlock:     [closure] in MethodContext(ContextPart)>>handleSignal:
        complete:     nil
        returnValue:     nil
    Receiver's instance variables:
        outerContext:     MethodContext(ContextPart)>>handleSignal:
        startpc:     98
        numArgs:     0

MethodContext(ContextPart)>>handleSignal:
    Receiver: BlockClosure>>on:do:
    Arguments and temporary variables:
        exception:     MessageNotUnderstood: UndefinedObject>>findBinaryIndex:ifNone:
        val:     nil
    Receiver's instance variables:
        sender:     BlockClosure>>ifError:
        pc:     17
        stackp:     3
        method:     (BlockClosure>>#on:do: "a CompiledMethod(680)")
        closureOrNil:     nil
        receiver:     [closure] in WorldState>>displayWorldSafely:

MessageNotUnderstood(Exception)>>signal
    Receiver: MessageNotUnderstood: UndefinedObject>>findBinaryIndex:ifNone:
    Arguments and temporary variables:

    Receiver's instance variables:
        messageText:     nil
        tag:     nil
        signalContext:     MessageNotUnderstood(Exception)>>signal
        handlerContext:     BlockClosure>>on:do:
        outerContext:     nil
        message:     findBinaryIndex: [closure] in MultiNewParagraph(NewParagraph)>>fastFin...etc...
        receiver:     nil
        reachedDefaultHandler:     false

UndefinedObject(Object)>>doesNotUnderstand: #findBinaryIndex:ifNone:
    Receiver: nil
    Arguments and temporary variables:
        aMessage:     findBinaryIndex: [closure] in MultiNewParagraph(NewParagraph)>>fastFi...etc...
        exception:     MessageNotUnderstood: UndefinedObject>>findBinaryIndex:ifNone:
        resumeValue:     nil
    Receiver's instance variables:
nil

MultiNewParagraph(NewParagraph)>>fastFindFirstLineSuchThat:
    Receiver: a MultiNewParagraph
    Arguments and temporary variables:
        lineBlock:     [closure] in MultiNewParagraph(NewParagraph)>>lineIndexForPoint:
    Receiver's instance variables:
        text:     a Text for 'evaluate: textOrStream cue: aCue ifFail: failBlock logged: lo...etc...
        textStyle:     a TextStyle Bitmap DejaVu Sans 9
        firstCharacterIndex:     1
        container:     0@0 corner: 669@9999999
        lines:     {a TextLine 1 to: 67 . a TextLine 68 to: 139 . a TextLine 140 to: 240 . ...etc...
        positionWhenComposed:     0@0
        offsetToEnd:     1089
        maxRightX:     652
        selectionStart:     a CharacterBlock with index 278 and character Character tab and...etc...
        selectionStop:     a CharacterBlock with index 278 and character Character tab and ...etc...
        wantsColumnBreaks:     false
        focused:     true
        caretRect:     nil
        showCaret:     true
        presentationText:     nil
        presentationLines:     nil

MultiNewParagraph(NewParagraph)>>lineIndexForPoint:
    Receiver: a MultiNewParagraph
    Arguments and temporary variables:
        aPoint:     669@274
        i:     nil
        py:     274
    Receiver's instance variables:
        text:     a Text for 'evaluate: textOrStream cue: aCue ifFail: failBlock logged: lo...etc...
        textStyle:     a TextStyle Bitmap DejaVu Sans 9
        firstCharacterIndex:     1
        container:     0@0 corner: 669@9999999
        lines:     {a TextLine 1 to: 67 . a TextLine 68 to: 139 . a TextLine 140 to: 240 . ...etc...
        positionWhenComposed:     0@0
        offsetToEnd:     1089
        maxRightX:     652
        selectionStart:     a CharacterBlock with index 278 and character Character tab and...etc...
        selectionStop:     a CharacterBlock with index 278 and character Character tab and ...etc...
        wantsColumnBreaks:     false
        focused:     true
        caretRect:     nil
        showCaret:     true
        presentationText:     nil
        presentationLines:     nil

MultiNewParagraph>>displayOn:using:at:
    Receiver: a MultiNewParagraph
    Arguments and temporary variables:
        aCanvas:     a FormCanvas on: DisplayScreen(1113x867x32)
        displayScanner:     a MultiDisplayScanner
        somePosition:     80@436
        visibleRectangle:     0@0 corner: 669@274
        offset:     80@436
        leftInRun:     0
        line:     nil
        i:     nil
        iLimiT:     nil
    Receiver's instance variables:
        text:     a Text for 'evaluate: textOrStream cue: aCue ifFail: failBlock logged: lo...etc...
        textStyle:     a TextStyle Bitmap DejaVu Sans 9
        firstCharacterIndex:     1
        container:     0@0 corner: 669@9999999
        lines:     {a TextLine 1 to: 67 . a TextLine 68 to: 139 . a TextLine 140 to: 240 . ...etc...
        positionWhenComposed:     0@0
        offsetToEnd:     1089
        maxRightX:     652
        selectionStart:     a CharacterBlock with index 278 and character Character tab and...etc...
        selectionStop:     a CharacterBlock with index 278 and character Character tab and ...etc...
        wantsColumnBreaks:     false
        focused:     true
        caretRect:     nil
        showCaret:     true
        presentationText:     nil
        presentationLines:     nil

FormCanvas>>paragraph:bounds:color:
    Receiver: a FormCanvas on: DisplayScreen(1113x867x32)
    Arguments and temporary variables:
        para:     a MultiNewParagraph
        bounds:     0@0 corner: 669@450
        c:     Color black
        scanner:     a MultiDisplayScanner
    Receiver's instance variables:
        target:     nil
        filterSelector:     nil
        origin:     80@436
        clipRect:     77@436 corner: 752@710
        form:     DisplayScreen(1113x867x32)
        port:     a GrafPort
        shadowColor:     nil

TextMorphForEditView(TextMorph)>>drawOn:
    Receiver: a TextMorphForEditView(975)
    Arguments and temporary variables:
        aCanvas:     a FormCanvas on: DisplayScreen(1113x867x32)
        fauxBounds:     0@0 corner: 669@450
    Receiver's instance variables:
        bounds:     0@0 corner: 669@450
        owner:     a TransformMorph(1921)
        submorphs:     #()
        fullBounds:     0@0 corner: 669@450
        color:     Color black
        extension:     a MorphExtension (1256) [other:  (errorOnDraw -> true) (blinkStart -...etc...
        borderWidth:     0
        borderColor:     Color black
        textStyle:     a TextStyle Bitmap DejaVu Sans 9
        text:     a Text for 'evaluate: textOrStream cue: aCue ifFail: failBlock logged: lo...etc...
        wrapFlag:     true
        paragraph:     a MultiNewParagraph
        editor:     a SmalltalkEditor
        container:     nil
        predecessor:     nil
        successor:     nil
        backgroundColor:     nil
        margins:     nil
        editHistory:     nil
        editView:     a PluggableTextMorphPlus(3589)
        acceptOnCR:     false

FormCanvas(Canvas)>>draw:
    Receiver: a FormCanvas on: DisplayScreen(1113x867x32)
    Arguments and temporary variables:
        anObject:     a TextMorphForEditView(975)
    Receiver's instance variables:
        target:     nil
        filterSelector:     nil
        origin:     80@436
        clipRect:     77@436 corner: 752@710
        form:     DisplayScreen(1113x867x32)
        port:     a GrafPort
        shadowColor:     nil

FormCanvas(Canvas)>>drawMorph:
    Receiver: a FormCanvas on: DisplayScreen(1113x867x32)
    Arguments and temporary variables:
        aMorph:     a TextMorphForEditView(975)
    Receiver's instance variables:
        target:     nil
        filterSelector:     nil
        origin:     80@436
        clipRect:     77@436 corner: 752@710
        form:     DisplayScreen(1113x867x32)
        port:     a GrafPort
        shadowColor:     nil

[] in TextMorphForEditView(Morph)>>fullDrawOn:
    Receiver: a TextMorphForEditView(975)
    Arguments and temporary variables:
        aCanvas:     a FormCanvas on: DisplayScreen(1113x867x32)
    Receiver's instance variables:
        bounds:     0@0 corner: 669@450
        owner:     a TransformMorph(1921)
        submorphs:     #()
        fullBounds:     0@0 corner: 669@450
        color:     Color black
        extension:     a MorphExtension (1256) [other:  (errorOnDraw -> true) (blinkStart -...etc...
        borderWidth:     0
        borderColor:     Color black
        textStyle:     a TextStyle Bitmap DejaVu Sans 9
        text:     a Text for 'evaluate: textOrStream cue: aCue ifFail: failBlock logged: lo...etc...
        wrapFlag:     true
        paragraph:     a MultiNewParagraph
        editor:     a SmalltalkEditor
        container:     nil
        predecessor:     nil
        successor:     nil
        backgroundColor:     nil
        margins:     nil
        editHistory:     nil
        editView:     a PluggableTextMorphPlus(3589)
        acceptOnCR:     false

FormCanvas>>roundCornersOf:in:during:
    Receiver: a FormCanvas on: DisplayScreen(1113x867x32)
    Arguments and temporary variables:
        aMorph:     a TextMorphForEditView(975)
        bounds:     0@0 corner: 669@450
        aBlock:     [closure] in TextMorphForEditView(Morph)>>fullDrawOn:
    Receiver's instance variables:
        target:     nil
        filterSelector:     nil
        origin:     80@436
        clipRect:     77@436 corner: 752@710
        form:     DisplayScreen(1113x867x32)
        port:     a GrafPort
        shadowColor:     nil


--- The full stack ---
UndefinedObject(Object)>>error:
[] in WorldState>>displayWorldSafely:
BlockClosure>>cull:cull:
[] in BlockClosure>>ifError:
BlockClosure>>cull:
[] in MethodContext(ContextPart)>>handleSignal:
BlockClosure>>ensure:
MethodContext(ContextPart)>>handleSignal:
MessageNotUnderstood(Exception)>>signal
UndefinedObject(Object)>>doesNotUnderstand: #findBinaryIndex:ifNone:
MultiNewParagraph(NewParagraph)>>fastFindFirstLineSuchThat:
MultiNewParagraph(NewParagraph)>>lineIndexForPoint:
MultiNewParagraph>>displayOn:using:at:
FormCanvas>>paragraph:bounds:color:
TextMorphForEditView(TextMorph)>>drawOn:
FormCanvas(Canvas)>>draw:
FormCanvas(Canvas)>>drawMorph:
[] in TextMorphForEditView(Morph)>>fullDrawOn:
FormCanvas>>roundCornersOf:in:during:
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FormCanvas(Canvas)>>roundCornersOf:during:
TextMorphForEditView(Morph)>>fullDrawOn:
FormCanvas(Canvas)>>fullDraw:
FormCanvas(Canvas)>>fullDrawMorph:
[] in [] in TransformMorph>>drawSubmorphsOn:
Array(SequenceableCollection)>>reverseDo:
[] in TransformMorph>>drawSubmorphsOn:
FormCanvas>>transformBy:clippingTo:during:smoothing:
TransformMorph>>drawSubmorphsOn:
[] in TransformMorph(Morph)>>fullDrawOn:
FormCanvas>>roundCornersOf:in:during:
FormCanvas(Canvas)>



    








SqueakDebug.log (14K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Morphic yellow cross of death

Nicolas Cellier
Ah, sorry, it was not a debugger, it was a ChangeList, and curiously, the listSelections effectively contains a non boolean (nil)
 #(false false false true true nil true false false false false false false false false false false)


2013/9/17 Nicolas Cellier <[hidden email]>
Ah another instance (see attachment)
This time I clicked in a debugger methodList and you can see that

(listSource itemSelectedAmongMultiple:  row) ifTrue: [

bugged because it did not answer a boolean...


2013/9/17 Bob Arning <[hidden email]>
Well, I can sort-of make it happen

- do you have the full SqueakDebug.log?
- did you copy the portion you sent from the file or did you do it another way? (like the mail bug report menu item)???
- you might think about upping the numbers in ContextPart>>errorReportOn: so we can see the full stack next time
[snip]
        strm position > (startPos+40000) ifTrue: [strm nextPutAll: '...etc...'.    "make 40000 much larger"
            ^ self].     "exit early"
        cnt > 60 ifTrue: [strm nextPutAll: '-- and more not shown --'.  ^ self].    "make 60 much larger"
[snip]

Cheers,
Bob

On 9/16/13 5:26 PM, Nicolas Cellier wrote:
Lately I have many instances of these yellow cross over red background that happens when a low level morphic error is encountered.

It seems related to a MultiNewParagraph lines being nil like in following stack example.

I don't know if it can help a morphic guru, but I just hate those stateful behavior with volatile states...

Really hard to debug/understand!!!


UndefinedObject(Object)>>error:
    Receiver: nil
    Arguments and temporary variables:
        aString:     'MessageNotUnderstood: UndefinedObject>>findBinaryIndex:ifNone:'
    Receiver's instance variables:
nil

[] in WorldState>>displayWorldSafely:
    Receiver: a WorldState
    Arguments and temporary variables:
<<error during printing>
    Receiver's instance variables:
        hands:     {a HandMorph(3216)}
        activeHand:     a HandMorph(3216)
        viewBox:     0@0 corner: 1113@867
        canvas:     a FormCanvas on: DisplayScreen(1113x867x32)
        damageRecorder:     a DamageRecorder
        stepList:     a Heap(StepMessage(#stepAt: -> 3PButton(#toggleProjectLocalness 739))...etc...
        lastStepTime:     690046
        lastStepMessage:     nil
        lastCycleTime:     690046
        commandHistory:     a CommandHistory
        alarms:     a MorphicAlarmQueue()
        lastAlarmTime:     690046
        remoteServer:     nil
        multiCanvas:     nil

BlockClosure>>cull:cull:
    Receiver: [closure] in WorldState>>displayWorldSafely:
    Arguments and temporary variables:
        firstArg:     'MessageNotUnderstood: UndefinedObject>>findBinaryIndex:ifNone:'
        secondArg:     nil
    Receiver's instance variables:
        outerContext:     WorldState>>displayWorldSafely:
        startpc:     97
        numArgs:     2

[] in BlockClosure>>ifError:
    Receiver: [closure] in WorldState>>displayWorldSafely:
    Arguments and temporary variables:
        errorHandlerBlock:     MessageNotUnderstood: UndefinedObject>>findBinaryIndex:ifNon...etc...
        ex:     [closure] in WorldState>>displayWorldSafely:
    Receiver's instance variables:
        outerContext:     WorldState>>displayWorldSafely:
        startpc:     90
        numArgs:     0

BlockClosure>>cull:
    Receiver: [closure] in BlockClosure>>ifError:
    Arguments and temporary variables:
        firstArg:     MessageNotUnderstood: UndefinedObject>>findBinaryIndex:ifNone:
    Receiver's instance variables:
        outerContext:     BlockClosure>>ifError:
        startpc:     40
        numArgs:     1

[] in MethodContext(ContextPart)>>handleSignal:
    Receiver: BlockClosure>>on:do:
    Arguments and temporary variables:
<<error during printing>
    Receiver's instance variables:
        sender:     BlockClosure>>ifError:
        pc:     17
        stackp:     3
        method:     (BlockClosure>>#on:do: "a CompiledMethod(680)")
        closureOrNil:     nil
        receiver:     [closure] in WorldState>>displayWorldSafely:

BlockClosure>>ensure:
    Receiver: [closure] in MethodContext(ContextPart)>>handleSignal:
    Arguments and temporary variables:
        aBlock:     [closure] in MethodContext(ContextPart)>>handleSignal:
        complete:     nil
        returnValue:     nil
    Receiver's instance variables:
        outerContext:     MethodContext(ContextPart)>>handleSignal:
        startpc:     98
        numArgs:     0

MethodContext(ContextPart)>>handleSignal:
    Receiver: BlockClosure>>on:do:
    Arguments and temporary variables:
        exception:     MessageNotUnderstood: UndefinedObject>>findBinaryIndex:ifNone:
        val:     nil
    Receiver's instance variables:
        sender:     BlockClosure>>ifError:
        pc:     17
        stackp:     3
        method:     (BlockClosure>>#on:do: "a CompiledMethod(680)")
        closureOrNil:     nil
        receiver:     [closure] in WorldState>>displayWorldSafely:

MessageNotUnderstood(Exception)>>signal
    Receiver: MessageNotUnderstood: UndefinedObject>>findBinaryIndex:ifNone:
    Arguments and temporary variables:

    Receiver's instance variables:
        messageText:     nil
        tag:     nil
        signalContext:     MessageNotUnderstood(Exception)>>signal
        handlerContext:     BlockClosure>>on:do:
        outerContext:     nil
        message:     findBinaryIndex: [closure] in MultiNewParagraph(NewParagraph)>>fastFin...etc...
        receiver:     nil
        reachedDefaultHandler:     false

UndefinedObject(Object)>>doesNotUnderstand: #findBinaryIndex:ifNone:
    Receiver: nil
    Arguments and temporary variables:
        aMessage:     findBinaryIndex: [closure] in MultiNewParagraph(NewParagraph)>>fastFi...etc...
        exception:     MessageNotUnderstood: UndefinedObject>>findBinaryIndex:ifNone:
        resumeValue:     nil
    Receiver's instance variables:
nil

MultiNewParagraph(NewParagraph)>>fastFindFirstLineSuchThat:
    Receiver: a MultiNewParagraph
    Arguments and temporary variables:
        lineBlock:     [closure] in MultiNewParagraph(NewParagraph)>>lineIndexForPoint:
    Receiver's instance variables:
        text:     a Text for 'evaluate: textOrStream cue: aCue ifFail: failBlock logged: lo...etc...
        textStyle:     a TextStyle Bitmap DejaVu Sans 9
        firstCharacterIndex:     1
        container:     0@0 corner: 669@9999999
        lines:     {a TextLine 1 to: 67 . a TextLine 68 to: 139 . a TextLine 140 to: 240 . ...etc...
        positionWhenComposed:     0@0
        offsetToEnd:     1089
        maxRightX:     652
        selectionStart:     a CharacterBlock with index 278 and character Character tab and...etc...
        selectionStop:     a CharacterBlock with index 278 and character Character tab and ...etc...
        wantsColumnBreaks:     false
        focused:     true
        caretRect:     nil
        showCaret:     true
        presentationText:     nil
        presentationLines:     nil

MultiNewParagraph(NewParagraph)>>lineIndexForPoint:
    Receiver: a MultiNewParagraph
    Arguments and temporary variables:
        aPoint:     669@274
        i:     nil
        py:     274
    Receiver's instance variables:
        text:     a Text for 'evaluate: textOrStream cue: aCue ifFail: failBlock logged: lo...etc...
        textStyle:     a TextStyle Bitmap DejaVu Sans 9
        firstCharacterIndex:     1
        container:     0@0 corner: 669@9999999
        lines:     {a TextLine 1 to: 67 . a TextLine 68 to: 139 . a TextLine 140 to: 240 . ...etc...
        positionWhenComposed:     0@0
        offsetToEnd:     1089
        maxRightX:     652
        selectionStart:     a CharacterBlock with index 278 and character Character tab and...etc...
        selectionStop:     a CharacterBlock with index 278 and character Character tab and ...etc...
        wantsColumnBreaks:     false
        focused:     true
        caretRect:     nil
        showCaret:     true
        presentationText:     nil
        presentationLines:     nil

MultiNewParagraph>>displayOn:using:at:
    Receiver: a MultiNewParagraph
    Arguments and temporary variables:
        aCanvas:     a FormCanvas on: DisplayScreen(1113x867x32)
        displayScanner:     a MultiDisplayScanner
        somePosition:     80@436
        visibleRectangle:     0@0 corner: 669@274
        offset:     80@436
        leftInRun:     0
        line:     nil
        i:     nil
        iLimiT:     nil
    Receiver's instance variables:
        text:     a Text for 'evaluate: textOrStream cue: aCue ifFail: failBlock logged: lo...etc...
        textStyle:     a TextStyle Bitmap DejaVu Sans 9
        firstCharacterIndex:     1
        container:     0@0 corner: 669@9999999
        lines:     {a TextLine 1 to: 67 . a TextLine 68 to: 139 . a TextLine 140 to: 240 . ...etc...
        positionWhenComposed:     0@0
        offsetToEnd:     1089
        maxRightX:     652
        selectionStart:     a CharacterBlock with index 278 and character Character tab and...etc...
        selectionStop:     a CharacterBlock with index 278 and character Character tab and ...etc...
        wantsColumnBreaks:     false
        focused:     true
        caretRect:     nil
        showCaret:     true
        presentationText:     nil
        presentationLines:     nil

FormCanvas>>paragraph:bounds:color:
    Receiver: a FormCanvas on: DisplayScreen(1113x867x32)
    Arguments and temporary variables:
        para:     a MultiNewParagraph
        bounds:     0@0 corner: 669@450
        c:     Color black
        scanner:     a MultiDisplayScanner
    Receiver's instance variables:
        target:     nil
        filterSelector:     nil
        origin:     80@436
        clipRect:     77@436 corner: 752@710
        form:     DisplayScreen(1113x867x32)
        port:     a GrafPort
        shadowColor:     nil

TextMorphForEditView(TextMorph)>>drawOn:
    Receiver: a TextMorphForEditView(975)
    Arguments and temporary variables:
        aCanvas:     a FormCanvas on: DisplayScreen(1113x867x32)
        fauxBounds:     0@0 corner: 669@450
    Receiver's instance variables:
        bounds:     0@0 corner: 669@450
        owner:     a TransformMorph(1921)
        submorphs:     #()
        fullBounds:     0@0 corner: 669@450
        color:     Color black
        extension:     a MorphExtension (1256) [other:  (errorOnDraw -> true) (blinkStart -...etc...
        borderWidth:     0
        borderColor:     Color black
        textStyle:     a TextStyle Bitmap DejaVu Sans 9
        text:     a Text for 'evaluate: textOrStream cue: aCue ifFail: failBlock logged: lo...etc...
        wrapFlag:     true
        paragraph:     a MultiNewParagraph
        editor:     a SmalltalkEditor
        container:     nil
        predecessor:     nil
        successor:     nil
        backgroundColor:     nil
        margins:     nil
        editHistory:     nil
        editView:     a PluggableTextMorphPlus(3589)
        acceptOnCR:     false

FormCanvas(Canvas)>>draw:
    Receiver: a FormCanvas on: DisplayScreen(1113x867x32)
    Arguments and temporary variables:
        anObject:     a TextMorphForEditView(975)
    Receiver's instance variables:
        target:     nil
        filterSelector:     nil
        origin:     80@436
        clipRect:     77@436 corner: 752@710
        form:     DisplayScreen(1113x867x32)
        port:     a GrafPort
        shadowColor:     nil

FormCanvas(Canvas)>>drawMorph:
    Receiver: a FormCanvas on: DisplayScreen(1113x867x32)
    Arguments and temporary variables:
        aMorph:     a TextMorphForEditView(975)
    Receiver's instance variables:
        target:     nil
        filterSelector:     nil
        origin:     80@436
        clipRect:     77@436 corner: 752@710
        form:     DisplayScreen(1113x867x32)
        port:     a GrafPort
        shadowColor:     nil

[] in TextMorphForEditView(Morph)>>fullDrawOn:
    Receiver: a TextMorphForEditView(975)
    Arguments and temporary variables:
        aCanvas:     a FormCanvas on: DisplayScreen(1113x867x32)
    Receiver's instance variables:
        bounds:     0@0 corner: 669@450
        owner:     a TransformMorph(1921)
        submorphs:     #()
        fullBounds:     0@0 corner: 669@450
        color:     Color black
        extension:     a MorphExtension (1256) [other:  (errorOnDraw -> true) (blinkStart -...etc...
        borderWidth:     0
        borderColor:     Color black
        textStyle:     a TextStyle Bitmap DejaVu Sans 9
        text:     a Text for 'evaluate: textOrStream cue: aCue ifFail: failBlock logged: lo...etc...
        wrapFlag:     true
        paragraph:     a MultiNewParagraph
        editor:     a SmalltalkEditor
        container:     nil
        predecessor:     nil
        successor:     nil
        backgroundColor:     nil
        margins:     nil
        editHistory:     nil
        editView:     a PluggableTextMorphPlus(3589)
        acceptOnCR:     false

FormCanvas>>roundCornersOf:in:during:
    Receiver: a FormCanvas on: DisplayScreen(1113x867x32)
    Arguments and temporary variables:
        aMorph:     a TextMorphForEditView(975)
        bounds:     0@0 corner: 669@450
        aBlock:     [closure] in TextMorphForEditView(Morph)>>fullDrawOn:
    Receiver's instance variables:
        target:     nil
        filterSelector:     nil
        origin:     80@436
        clipRect:     77@436 corner: 752@710
        form:     DisplayScreen(1113x867x32)
        port:     a GrafPort
        shadowColor:     nil


--- The full stack ---
UndefinedObject(Object)>>error:
[] in WorldState>>displayWorldSafely:
BlockClosure>>cull:cull:
[] in BlockClosure>>ifError:
BlockClosure>>cull:
[] in MethodContext(ContextPart)>>handleSignal:
BlockClosure>>ensure:
MethodContext(ContextPart)>>handleSignal:
MessageNotUnderstood(Exception)>>signal
UndefinedObject(Object)>>doesNotUnderstand: #findBinaryIndex:ifNone:
MultiNewParagraph(NewParagraph)>>fastFindFirstLineSuchThat:
MultiNewParagraph(NewParagraph)>>lineIndexForPoint:
MultiNewParagraph>>displayOn:using:at:
FormCanvas>>paragraph:bounds:color:
TextMorphForEditView(TextMorph)>>drawOn:
FormCanvas(Canvas)>>draw:
FormCanvas(Canvas)>>drawMorph:
[] in TextMorphForEditView(Morph)>>fullDrawOn:
FormCanvas>>roundCornersOf:in:during:
 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
FormCanvas(Canvas)>>roundCornersOf:during:
TextMorphForEditView(Morph)>>fullDrawOn:
FormCanvas(Canvas)>>fullDraw:
FormCanvas(Canvas)>>fullDrawMorph:
[] in [] in TransformMorph>>drawSubmorphsOn:
Array(SequenceableCollection)>>reverseDo:
[] in TransformMorph>>drawSubmorphsOn:
FormCanvas>>transformBy:clippingTo:during:smoothing:
TransformMorph>>drawSubmorphsOn:
[] in TransformMorph(Morph)>>fullDrawOn:
FormCanvas>>roundCornersOf:in:during:
FormCanvas(Canvas)>



    








Reply | Threaded
Open this post in threaded view
|

Re: Morphic yellow cross of death

Bob Arning-2
To get better info next time

- you might think about upping the numbers in ContextPart>>errorReportOn: so we can see the full stack next time
[snip]
        strm position > (startPos+40000) ifTrue: [strm nextPutAll: '...etc...'.    "make 40000 much larger"
            ^ self].     "exit early"
        cnt > 60 ifTrue: [strm nextPutAll: '-- and more not shown --'.  ^ self].    "make 60 much larger"
[snip]

I'll be looking at what you have sent.

Also, do you have a Transcript open when this happens? Is anything written to it around the time of the error (the previous error, perhaps, more than this latest one)?

Cheers,
Bob

On 9/17/13 4:26 PM, Nicolas Cellier wrote:
- you might think about upping the numbers in ContextPart>>errorReportOn: so we can see the full stack next time
[snip]
        strm position > (startPos+40000) ifTrue: [strm nextPutAll: '...etc...'.    "make 40000 much larger"
            ^ self].     "exit early"
        cnt > 60 ifTrue: [strm nextPutAll: '-- and more not shown --'.  ^ self].    "make 60 much larger"
[snip]



Reply | Threaded
Open this post in threaded view
|

Re: Morphic yellow cross of death

Nicolas Cellier
Thanks.
No Transcript opened


2013/9/17 Bob Arning <[hidden email]>
To get better info next time

- you might think about upping the numbers in ContextPart>>errorReportOn: so we can see the full stack next time
[snip]
        strm position > (startPos+40000) ifTrue: [strm nextPutAll: '...etc...'.    "make 40000 much larger"
            ^ self].     "exit early"
        cnt > 60 ifTrue: [strm nextPutAll: '-- and more not shown --'.  ^ self].    "make 60 much larger"
[snip]

I'll be looking at what you have sent.

Also, do you have a Transcript open when this happens? Is anything written to it around the time of the error (the previous error, perhaps, more than this latest one)?

Cheers,
Bob

On 9/17/13 4:26 PM, Nicolas Cellier wrote:
- you might think about upping the numbers in ContextPart>>errorReportOn: so we can see the full stack next time
[snip]
        strm position > (startPos+40000) ifTrue: [strm nextPutAll: '...etc...'.    "make 40000 much larger"
            ^ self].     "exit early"
        cnt > 60 ifTrue: [strm nextPutAll: '-- and more not shown --'.  ^ self].    "make 60 much larger"
[snip]







Reply | Threaded
Open this post in threaded view
|

Re: Morphic yellow cross of death

Bob Arning-2
In reply to this post by Nicolas Cellier
What sort of select/deselect/removes had you done to this ChangeList?

Cheer,
Bob

On 9/17/13 4:26 PM, Nicolas Cellier wrote:
Ah, sorry, it was not a debugger, it was a ChangeList, and curiously, the listSelections effectively contains a non boolean (nil)
 #(false false false true true nil true false false false false false false false false false false)




Reply | Threaded
Open this post in threaded view
|

Re: Morphic yellow cross of death

Bob Arning-2
In reply to this post by Nicolas Cellier
Well, this I can reproduce.

So if we look at this puppy:
========================================
!PluggableListMorphOfMany methodsFor: 'event handling' stamp: 'raa 9/17/2013 18:02'!
mouseMove: event
    "The mouse has moved, as characterized by the event provided.  Adjust the scrollbar, and alter the selection as appropriate"

    | oldIndex oldVal row index bobsDebugging |
   
    bobsDebugging _ OrderedCollection new.
    bobsDebugging add: {'1'. dragOnOrOff}.
    event position y < self top
        ifTrue:
            [scrollBar scrollUp: 1.
            row := self rowAtLocation: scroller topLeft + (1 @ 1)]
        ifFalse:
            [row := event position y > self bottom
                ifTrue:
                    [scrollBar scrollDown: 1.
                    self rowAtLocation: scroller bottomLeft + (1 @ -1)]
                ifFalse: [ self rowAtLocation: event position]].
    row = 0 ifTrue: [^super mouseDown: event].
    index := self modelIndexFor: row.

    model okToChange ifFalse: [^self].    "No change if model is locked"
    bobsDebugging add: {'2'. dragOnOrOff}.

    dragOnOrOff ifNil:
            ["Was not set at mouse down, which means the mouse must have gone down in an area where there was no list item"
            dragOnOrOff := (self listSelectionAt: index) not].
    bobsDebugging add: {'3'. dragOnOrOff}.

    "Set meaning for subsequent dragging of selection"
    oldIndex := self getCurrentSelectionIndex.
    oldIndex ~= 0 ifTrue: [oldVal := self listSelectionAt: oldIndex].

    "Set or clear new primary selection (listIndex)"
    dragOnOrOff
        ifTrue: [self changeModelSelection: index]
        ifFalse: [self changeModelSelection: 0].

    "Need to restore the old one, due to how model works, and set new one."
    oldIndex ~= 0 ifTrue: [self listSelectionAt: oldIndex put: oldVal].
    bobsDebugging add: {'4'. dragOnOrOff}.
    self listSelectionAt: index put: dragOnOrOff.
! !
==========================================
I added some debugging code which reports

an OrderedCollection(#('1' false) #('2' false) #('3' false) #('4' nil))

So we clobbered
dragOnOrOff between the 3rd and 4th entries in the list. That's happening because of:

============================================
!PluggableListMorph methodsFor: 'model access' stamp: 'kb 6/5/2013 21:12'!
changeModelSelection: anInteger
    " Change the model's selected item index to be anInteger. Enable the pre selection highlight. Step the World forward to let the pre selection highlight take effect. "

    self rowAboutToBecomeSelected: (self uiIndexFor: anInteger).
    World doOneCycle.
    setIndexSelector ifNotNil: [
        model perform: setIndexSelector with: anInteger ].! !
=============================================

The World doOneCycle permits another ui event to be processed while we are still in the mouseMove:. If the event is a mouseUp: then

mouseUp: event

    dragOnOrOff := nil.  "So improperly started drags will have not effect"

kaboom.

Cheers,
Bob

On 9/17/13 4:26 PM, Nicolas Cellier wrote:
Ah, sorry, it was not a debugger, it was a ChangeList, and curiously, the listSelections effectively contains a non boolean (nil)
 #(false false false true true nil true false false false false false false false false false false)




Reply | Threaded
Open this post in threaded view
|

Re: Morphic yellow cross of death

Nicolas Cellier
In reply to this post by Bob Arning-2
Many actions, you know I was not tracking the bug but rather changing the Compiler, and the bug just broke my flow, so it's difficult to tell exactly.
But I have instrumented :

ChangeList>>listSelectionAt: index put: value
    setSelectionListSelector ifNil:[^false].
    ^model perform: setSelectionListSelector with: index with: value

and the winner is PluggableListMorphOfMany>>mouseMove: maybe due to unvoluntary drag and drop gesture?
Last line
     self listSelectionAt: index put: dragOnOrOff.
is happily putting a nil where it should not.

There is a protection few lines above:

    dragOnOrOff ifNil:
            ["Was not set at mouse down, which means the mouse must have gone down in an area where there was no list item"
            dragOnOrOff := (self listSelectionAt: index) not].

Hey but this is an inst var and it's not immutable !
For example, mouseUp: can set it to nil.
Why a mouseUp: could occur before a mouseMove: is fully processed, I can't tell...
That gets interesting.
Do I have 2 concurrent UI processes ? The ProcessBrowser does not tell so...

Those lines just above did not fail:

    "Set or clear new primary selection (listIndex)"
    dragOnOrOff
        ifTrue: [self changeModelSelection: index]
        ifFalse: [self changeModelSelection: 0].

So dragOnOrOff still was a boolean there.
Could dragOnOrOff mutation be triggered by changeModelSelection: send ?



2013/9/17 Bob Arning <[hidden email]>
What sort of select/deselect/removes had you done to this ChangeList?

Cheer,
Bob

On 9/17/13 4:26 PM, Nicolas Cellier wrote:
Ah, sorry, it was not a debugger, it was a ChangeList, and curiously, the listSelections effectively contains a non boolean (nil)
 #(false false false true true nil true false false false false false false false false false false)








Reply | Threaded
Open this post in threaded view
|

Re: Morphic yellow cross of death

Nicolas Cellier
In reply to this post by Bob Arning-2
Ah we cross posted, good find!

Those guys messing with World doOneCycle are just like the sorcerer's apprentice...
Please don't try to rule the World!


2013/9/18 Bob Arning <[hidden email]>
Well, this I can reproduce.

So if we look at this puppy:
========================================
!PluggableListMorphOfMany methodsFor: 'event handling' stamp: 'raa 9/17/2013 18:02'!
mouseMove: event
    "The mouse has moved, as characterized by the event provided.  Adjust the scrollbar, and alter the selection as appropriate"

    | oldIndex oldVal row index bobsDebugging |
   
    bobsDebugging _ OrderedCollection new.
    bobsDebugging add: {'1'. dragOnOrOff}.
    event position y < self top
        ifTrue:
            [scrollBar scrollUp: 1.
            row := self rowAtLocation: scroller topLeft + (1 @ 1)]
        ifFalse:
            [row := event position y > self bottom
                ifTrue:
                    [scrollBar scrollDown: 1.
                    self rowAtLocation: scroller bottomLeft + (1 @ -1)]
                ifFalse: [ self rowAtLocation: event position]].
    row = 0 ifTrue: [^super mouseDown: event].
    index := self modelIndexFor: row.

    model okToChange ifFalse: [^self].    "No change if model is locked"
    bobsDebugging add: {'2'. dragOnOrOff}.

    dragOnOrOff ifNil:
            ["Was not set at mouse down, which means the mouse must have gone down in an area where there was no list item"
            dragOnOrOff := (self listSelectionAt: index) not].
    bobsDebugging add: {'3'. dragOnOrOff}.

    "Set meaning for subsequent dragging of selection"
    oldIndex := self getCurrentSelectionIndex.
    oldIndex ~= 0 ifTrue: [oldVal := self listSelectionAt: oldIndex].

    "Set or clear new primary selection (listIndex)"
    dragOnOrOff
        ifTrue: [self changeModelSelection: index]
        ifFalse: [self changeModelSelection: 0].

    "Need to restore the old one, due to how model works, and set new one."
    oldIndex ~= 0 ifTrue: [self listSelectionAt: oldIndex put: oldVal].
    bobsDebugging add: {'4'. dragOnOrOff}.
    self listSelectionAt: index put: dragOnOrOff.
! !
==========================================
I added some debugging code which reports

an OrderedCollection(#('1' false) #('2' false) #('3' false) #('4' nil))

So we clobbered
dragOnOrOff between the 3rd and 4th entries in the list. That's happening because of:

============================================
!PluggableListMorph methodsFor: 'model access' stamp: 'kb 6/5/2013 21:12'!
changeModelSelection: anInteger
    " Change the model's selected item index to be anInteger. Enable the pre selection highlight. Step the World forward to let the pre selection highlight take effect. "

    self rowAboutToBecomeSelected: (self uiIndexFor: anInteger).
    World doOneCycle.
    setIndexSelector ifNotNil: [
        model perform: setIndexSelector with: anInteger ].! !
=============================================

The World doOneCycle permits another ui event to be processed while we are still in the mouseMove:. If the event is a mouseUp: then

mouseUp: event

    dragOnOrOff := nil.  "So improperly started drags will have not effect"

kaboom.

Cheers,
Bob

On 9/17/13 4:26 PM, Nicolas Cellier wrote:
Ah, sorry, it was not a debugger, it was a ChangeList, and curiously, the listSelections effectively contains a non boolean (nil)
 #(false false false true true nil true false false false false false false false false false false)








Reply | Threaded
Open this post in threaded view
|

Re: Morphic yellow cross of death

Bob Arning-2
So, the question is do they really need #doOneCycle or something less, like #displayWorldSafely

Cheers,
Bob

On 9/17/13 6:36 PM, Nicolas Cellier wrote:
Ah we cross posted, good find!

Those guys messing with World doOneCycle are just like the sorcerer's apprentice...



Reply | Threaded
Open this post in threaded view
|

Re: Morphic yellow cross of death

Nicolas Cellier
After replacing doOneCycle with displayWorldSafely, I got much more stable morphs...
But see yet another red square attached...




2013/9/18 Bob Arning <[hidden email]>
So, the question is do they really need #doOneCycle or something less, like #displayWorldSafely

Cheers,
Bob

On 9/17/13 6:36 PM, Nicolas Cellier wrote:
Ah we cross posted, good find!

Those guys messing with World doOneCycle are just like the sorcerer's apprentice...








SqueakDebug.log (17K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Morphic yellow cross of death

Bob Arning-2
Well, that's actually the first one you posted.

So, you have:
Error: MessageNotUnderstood: UndefinedObject>>findBinaryIndex:ifNone:
24 September 2013 1:28:29.137 am

VM: Mac OS - Smalltalk
Image: Squeak4.5 [latest update: #12790]

- Was this a clean update 12790? Or did you have other code installed?
- Can you comment on what you were doing when the error occurred?

Cheers,
Bob


On 9/23/13 7:43 PM, Nicolas Cellier wrote:
After replacing doOneCycle with displayWorldSafely, I got much more stable morphs...
But see yet another red square attached...




2013/9/18 Bob Arning <[hidden email]>
So, the question is do they really need #doOneCycle or something less, like #displayWorldSafely

Cheers,
Bob

On 9/17/13 6:36 PM, Nicolas Cellier wrote:
Ah we cross posted, good find!

Those guys messing with World doOneCycle are just like the sorcerer's apprentice...








    



Reply | Threaded
Open this post in threaded view
|

Re: Morphic yellow cross of death

Bob Arning-2
In reply to this post by Nicolas Cellier
One more question:

- Were there any processes running other than those standard in all Squeaks?

Cheers,
Bob

On 9/23/13 7:43 PM, Nicolas Cellier wrote:
After replacing doOneCycle with displayWorldSafely, I got much more stable morphs...
But see yet another red square attached...




2013/9/18 Bob Arning <[hidden email]>
So, the question is do they really need #doOneCycle or something less, like #displayWorldSafely

Cheers,
Bob

On 9/17/13 6:36 PM, Nicolas Cellier wrote:
Ah we cross posted, good find!

Those guys messing with World doOneCycle are just like the sorcerer's apprentice...








    



12