[BUG] troubles with damage management

RossBoylan at stanfordalumni.org RossBoylan at stanfordalumni.org
Wed Jan 8 02:19:17 UTC 2003


I keep experiencing odd failures in the invalidation code.  Like the one
here, they occur
when I am not even at the keyboard.  I have suspected they might arise
from some
interaction the screen blanker with smalltalk, but this one happened
after an hour.
I think the screen blanked well before then.

My application has a thread that ticks away and causes some updates to
the display.  It may be relevant that the errors are being raised from
that thread, rather than my main thread (the top of the stack shows how
it started).  [Or do I mean the bottom?  Graphically it's at the end of
the list below, but its the first item on the stack.]

This is a weird error.  Rectangle class>>merging fails because topLeft
in the last line
is nil.  The only obvious way to get that is if listOfRects is empty,
but it is not according 
to the debugger.

At other times I've got a debugger because, apparently, the grow logic
for some list (I think of the invalid rectangles) seems not to have
worked.  For example, the list may have 15 items and gets ready to
insert the 16th.  The error handler comes up after the grow logic has
apparently run, when it is attempting to insert item 16.  The problem is
that the list has not grown, and I get a subscript out of bounds error.

Anyway, if these problems ring a bell with anyone, please let me know.

Thanks.

7 January 2003 7:04:43 pm

VM: unix - Squeak3.2gamma of 22 January 2002 [latest update: #4653]
Image: Squeak3.2 [latest update: #4956]

UndefinedObject(Object)>>doesNotUnderstand:
	Receiver: nil
	Arguments and temporary variables: 
		aMessage: 	a Message with selector: #corner: and arguments: #(nil)
	Receiver's instance variables: 
nil

Rectangle class>>merging:
	Receiver: Rectangle
	Arguments and temporary variables: 
		listOfRects: 	an OrderedCollection(962 at 160 corner: 1410 at 176 963 at 176
corner: 1409...etc...
		topLeft: 	nil
		bottomRight: 	nil
		r: 	nil
	Receiver's instance variables: 
		superclass: 	Object
		methodDict: 	a MethodDictionary(#=->a CompiledMethod (2718)
#aboveCenter->a Comp...etc...
		format: 	20614
		instanceVariables: 	#('origin' 'corner')
		organization: 	('accessing' aboveCenter area bottom bottom:
bottomCenter bottomL...etc...
		subclasses: 	#(CharacterBlock B3DViewport Quadrangle)
		name: 	#Rectangle
		classPool: 	a Dictionary()
		sharedPools: 	nil
		environment: 	nil
		category: 	nil

DamageRecorder>>recordInvalidRect:
	Receiver: a DamageRecorder
	Arguments and temporary variables: 
		newRect: 	1027 at 1301 corner: 1057 at 894
		mergeRect: 	nil
		a: 	0
		rect: 	1027 at 1301 corner: 1079 at 894
	Receiver's instance variables: 
		invalidRects: 	an OrderedCollection()
		totalRepaint: 	false

WorldState>>recordDamagedRect:
	Receiver: a WorldState
	Arguments and temporary variables: 
		damageRect: 	1027 at 1301.0 corner: 1057 at 894
	Receiver's instance variables: 
		hands: 	#(a HandMorph(1377))
		activeHand: 	nil
		viewBox: 	0 at 0 corner: 1592 at 1126
		canvas: 	a FormCanvas on: DisplayScreen(1592x1126x16)
		damageRecorder: 	a DamageRecorder
		stepList: 	a Heap(a StepMessage (a TrashCanMorph #stepAt: nil) (a
TrashCanMorph ...etc...
		lastStepTime: 	30040178
		lastStepMessage: 	nil
		lastCycleTime: 	30040197
		commandHistory: 	a CommandHistory
		alarms: 	a Heap()
		lastAlarmTime: 	30040178
		remoteServer: 	nil
		multiCanvas: 	nil

--- The rest of the stack ---
PasteUpMorph>>invalidRect:from:
ActivityGridMorph(Morph)>>invalidRect:from:
TwoWayScrollPane(Morph)>>invalidRect:from:
TransformMorph(Morph)>>invalidRect:from:
TransformMorph>>invalidRect:from:
GridMorph(Morph)>>invalidRect:from:
NumericModelMorph(Morph)>>invalidRect:from:
NumericModelMorph(Morph)>>invalidRect:
NumericModelMorph(Morph)>>changed
NumericModelMorph(Morph)>>extent:
NumericModelMorph(StringMorph)>>fitContents
NumericModelMorph(StringMorph)>>contents:
NumericModelMorph(LiveStringModelMorph)>>step
[] in ActivityGridRow>>update
[] in Dictionary>>valuesDo:
Dictionary(Set)>>do:
Dictionary>>associationsDo:
Dictionary>>valuesDo:
ActivityGridRow(GridRow)>>morphsDo:
ActivityGridRow>>update
ActivityGridRow>>updateLength:
MessageSend>>valueWithArguments:
[] in OngoingActivity(Object)>>trigger:withArguments:
EventMessageSet>>do:
OngoingActivity(Object)>>trigger:withArguments:
OngoingActivity(Object)>>trigger:with:
OngoingActivity(Activity)>>updateLengthFor:old:
MessageSend>>valueWithArguments:
[] in MinorActivityLog(Object)>>trigger:withArguments:
EventMessageSet>>do:
MinorActivityLog(Object)>>trigger:withArguments:
MinorActivityLog>>updateLengthFor:old:
ActivityLogEntry>>lengthChanged:
[] in ActivityLogEntry>>end:
Monitor>>critical:
MajorActivityLog class>>critical:
ActivityLogEntry>>end:
[] in MajorActivityLog>>updateCurrentTaskTime
[] in Monitor>>critical:
BlockContext>>ensure:
Monitor>>critical:
MajorActivityLog class>>critical:
MajorActivityLog>>updateCurrentTaskTime
[] in MajorActivityLog>>initialize
BlockContext>>repeat
[] in MajorActivityLog>>initialize
[] in BlockContext>>newProcess



More information about the Squeak-dev mailing list