[matplotlib-devel] Possible bug in matplotlib.cbook.CallbackRegistry

2011-10-17 Thread tobin
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
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel


Re: [matplotlib-devel] Possible bug in matplotlib.cbook.CallbackRegistry

2011-10-17 Thread Michael Droettboom
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, [email protected] 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
> [email protected]
> 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
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-devel