Andi,

It looks like we're firing an item notification while indexing (and observers) are deferred - this is bad, because UI is likely to inadvertently access things by indexes that might be invalid.

Do we need "with watchersDeferred():"?

...Bryan

Grant Baillie wrote:

On 25 Apr, 2007, at 10:54, Heikki Toivonen wrote:

The performance Tinderboxes are experiencing failure fairly regularly
with the triage test. Grant and I have been unable to reproduce the
error. If anyone is able to reproduce this, please let me know.

After discussion with stearns (and RobinD) on IRC today, it transpires that wx is eating the exception. With that knowledge, it was easy to get the additional frames in the trace (below) ...

A question for Reid: Near the bottom, why is the MultiStateButton calling Update()? Shouldn't it be doing Refresh(), instead of causing the whole UI to redraw at an inopportune moment?

--Grant

  /Users/grant/src/chandler/Chandler.py(159)<module>()
-> sys.exit(main())
  /Users/grant/src/chandler/Chandler.py(76)main()
-> return realMain()
  /Users/grant/src/chandler/Chandler.py(70)realMain()
-> app.MainLoop()
/Users/grant/src/chandler/release/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/wx/_core.py(7822)MainLoop()
-> wx.PyApp.MainLoop(self)
/Users/grant/src/chandler/release/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/wx/_core.py(7157)MainLoop()
-> return _core_.PyApp_MainLoop(*args, **kwargs)
/Users/grant/src/chandler/release/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/wx/_core.py(14128)<lambda>()
-> lambda event: event.callable(*event.args, **event.kw) )
/Users/grant/src/chandler/parcels/osaf/framework/scripting/__init__.py(84)run_startup_script()
-> run_startup_script_with_symbols(builtIns=builtIns, *args, **kwds)
/Users/grant/src/chandler/parcels/osaf/framework/scripting/script.py(277)run_startup_script_with_symbols()
-> builtIns=builtIns)
/Users/grant/src/chandler/parcels/osaf/framework/scripting/script.py(184)run_script_with_symbols()
-> exec scriptCode in builtIns
/Users/grant/src/chandler/tools/QATestScripts/Performance/PerfLargeDataTriage.py(66)<module>() -> User.emulate_click(dashboardWidget, triageColMiddle, (row*rowHeight) + rowMiddle) /Users/grant/src/chandler/parcels/osaf/framework/scripting/User.py(216)emulate_click()
-> widget.ProcessEvent(mouseUp)
/Users/grant/src/chandler/release/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/wx/_core.py(3761)ProcessEvent()
-> return _core_.EvtHandler_ProcessEvent(*args, **kwargs)
/Users/grant/src/chandler/parcels/osaf/framework/blocks/Table.py(438)OnMouseEvents()
-> wantsCapture = callHandler(oldCell, oldCell == cell, "old")
/Users/grant/src/chandler/parcels/osaf/framework/blocks/Table.py(420)callHandler()
-> wantsCapture = handler(event)
/Users/grant/src/chandler/parcels/osaf/framework/attributeEditors/AttributeEditors.py(1340)OnMouseChange()
-> advanceStateMethod(item, attributeName)
/Users/grant/src/chandler/parcels/osaf/views/main/summaryblocks.py(213)advanceState()
-> item.setTriageStatus(newValue, pin=True)
/Users/grant/src/chandler/parcels/osaf/pim/triage.py(184)setTriageStatus()
-> self.__setTriageAttributes(newStatus, when, False, True)
/Users/grant/src/chandler/parcels/osaf/pim/triage.py(218)__setTriageAttributes()
-> setattr(self, tsAttr, newStatus)
/Users/grant/src/chandler/repository/item/Item.py(314)setAttributeValue()
-> self.setDirty(dirty, name, _attrDict, _noFireChanges)
/Users/grant/src/chandler/repository/persistence/RepositoryView.py(1675)__call__() -> getattr(self.view[self.watchingItem], self.methodName)(op, uItem, names) /Users/grant/src/chandler/parcels/osaf/framework/blocks/Block.py(575)onWatchNotification()
-> block.onItemNotification('itemChange', (op, uuid, attrs))
/Users/grant/src/chandler/parcels/osaf/views/detail/detail.py(348)onItemNotification()
-> self.synchronizeWidget()
/Users/grant/src/chandler/parcels/osaf/views/detail/detail.py(474)synchronizeWidget()
-> self.setState()
/Users/grant/src/chandler/parcels/osaf/views/detail/detail.py(480)setState()
-> self.widget.SetState("%s.%s" % (self.icon, item.triageStatus))
  /Users/grant/src/chandler/util/MultiStateButton.py(272)SetState()
-> self.Update()
/Users/grant/src/chandler/release/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/wx/_core.py(9536)Update()
-> return _core_.Window_Update(*args, **kwargs)
> /Users/grant/src/chandler/parcels/osaf/framework/blocks/Table.py(107)GetValue()->None
-> import pdb; pdb.set_trace()


_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

Open Source Applications Foundation "chandler-dev" mailing list
http://lists.osafoundation.org/mailman/listinfo/chandler-dev

_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

Open Source Applications Foundation "chandler-dev" mailing list
http://lists.osafoundation.org/mailman/listinfo/chandler-dev

Reply via email to