#14471: Exception KeyError: in WeakValueDictionary remove ignored
---------------------------+------------------------------------------------
       Reporter:  vbraun   |         Owner:  rlm      
           Type:  defect   |        Status:  new      
       Priority:  major    |     Milestone:  sage-5.10
      Component:  memleak  |    Resolution:           
       Keywords:           |   Work issues:           
Report Upstream:  N/A      |     Reviewers:           
        Authors:           |     Merged in:           
   Dependencies:           |      Stopgaps:           
---------------------------+------------------------------------------------

Comment (by nbruin):

 Replying to [comment:10 vbraun]:

 > As for Sage, should we patch Python for this? I hit this bug in #14469
 and its likely that we'll trip over it again.

 I would suggest a paranoid `remove` function for this:
 {{{
         def remove(wr, selfref=ref(self)):
             self = selfref()
             if self is not None and self.data.get(wr.key) is wr:
                 del self.data[wr.key]
 }}}
 The `get` method avoids exception handling and hopefully avoids allocation
 as much as possible (thus avoiding triggering GC) and will return `None`
 if the reference is not present. Furthermore, we verify that the correct
 value is still stored in the dictionary, in case a callback gets delayed
 so much that another value makes it into that dict under the same key
 (that shouldn't really happen, so that's the paranoid bit).

-- 
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/14471#comment:11>
Sage <http://www.sagemath.org>
Sage: Creating a Viable Open Source Alternative to Magma, Maple, Mathematica, 
and MATLAB

-- 
You received this message because you are subscribed to the Google Groups 
"sage-trac" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sage-trac?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to