Another common solution to this problem is to copy the list of callbacks before iterating over it.
Having a simple example would be helpful here so we can experiment with these alternate approaches. Mike On 10/16/2011 09:04 PM, to...@i3dtech.com wrote: > Within matplotlib.cbook.CallbackRegistry both the connect() and process() > methods check for dead references when called. If a reference is dead it > deletes it from the callback list. > > I have found a situation where this presents a problem. > > First, a "button_press_event" calls the process method() which begins a loop > over all of the callback items for this event. One of these items is a dead > reference but appears late in the list. The first callback within the loop > creates a new connection and calls the connect method. During this connect > call the dead reference is deleted from the callback list. Then when it gets > back to the loop within the process method the callback no longer exists in > the list it is iterating over and there is an error thrown when it tries to > delete the dead reference for the second time. > > The problem is coordination between these two places that both could > potentially delete a dead reference to a BoundMethodProxy. In my case, > because one loop has started ... the attempt is made twice ... and obviously > the second results in an error. > > I could put together a simple example if needed to demonstrate the error. > > I think the easy way to handle would be to first call a method who's job is > only to delete dead references. Then each method could call this first > before handling the callbacks. This would keep the intermingling of the two > loops that both check for dead references. > > Another (potentially more obscure approach) could be to just wrap the delete > with a try/except - but this suffers from not fixing a bit of a design > problem. > > There are likely more approaches to solving. > > > > ------------------------------------------------------------------------------ > All the data continuously generated in your IT infrastructure contains a > definitive record of customers, application performance, security > threats, fraudulent activity and more. Splunk takes this data and makes > sense of it. Business sense. IT sense. Common sense. > http://p.sf.net/sfu/splunk-d2d-oct > _______________________________________________ > Matplotlib-devel mailing list > Matplotlib-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/matplotlib-devel ------------------------------------------------------------------------------ All the data continuously generated in your IT infrastructure contains a definitive record of customers, application performance, security threats, fraudulent activity and more. Splunk takes this data and makes sense of it. Business sense. IT sense. Common sense. http://p.sf.net/sfu/splunk-d2d-oct _______________________________________________ Matplotlib-devel mailing list Matplotlib-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/matplotlib-devel