#14159: Don't install callbacks on values of TripleDict, MonoDict
---------------------------------+------------------------------------------
       Reporter:  nbruin         |         Owner:  tbd     
           Type:  PLEASE CHANGE  |        Status:  new     
       Priority:  major          |     Milestone:  sage-5.8
      Component:  PLEASE CHANGE  |    Resolution:          
       Keywords:                 |   Work issues:          
Report Upstream:  N/A            |     Reviewers:          
        Authors:                 |     Merged in:          
   Dependencies:                 |      Stopgaps:          
---------------------------------+------------------------------------------

Comment (by SimonKing):

 Replying to [comment:7 nbruin]:
 > You have to make sure that the weakref object lives to see the death of
 v (and ensure that you make such a weakref in the first place!)

 Apparently I had wrong memories about my code, then. I had in mind that
 the `TripleDict` has a weak reference with callback to the value.


 > {{{
 > sage: from sage.structure.coerce_dict import TripleDict
 > sage: import gc
 > sage: import weakref
 > sage: class Foo: pass
 > sage:
 > sage: a = 1
 > sage: b = 2
 > sage: c = 3
 > sage: v = Foo()
 > sage: w = Foo()
 > sage: T = TripleDict(13)
 > sage: T[a,b,c] = weakref.KeyedRef(v,T.eraser,(id(a),id(b),id(c)))
 > sage: h=T[a,b,c]
 > sage: T[a,b,c] = w
 > sage: del v
 > sage: _ = gc.collect()
 > sage: len([x for x in gc.get_objects() if isinstance(x,Foo)])
 > 1
 > sage: T[a,b,c] == w
 > KeyError: (1, 2, 3)
 > }}}
 > I admit, the weakref surviving outside the dict is not a terribly likely
 event, but from your code at #11521 it wasn't entirely clear to me that
 you can absolutely rule it out.

 Hm. This particular `TripleDict` is only used by hom, and hom doe not
 override an existing entry. So, this particular case should be safe.
 However, it still seems reasonable to me to let the callback check whether
 the to-be-deleted value did not change.

-- 
Ticket URL: <http://trac.sagemath.org/sage_trac/ticket/14159#comment:8>
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