'''
import itertools
-import weakref
from p2pool.util import skiplist, variable
skiplist.SkipList.__init__(self)
self.tracker = tracker
- self_ref = weakref.ref(self, lambda _: tracker.removed.unwatch(watch_id))
- watch_id = self.tracker.removed.watch(lambda item: self_ref().forget_item(item.hash))
+ self.tracker.removed.watch_weakref(self, lambda self, item: self.forget_item(item.hash))
def previous(self, element):
return self.tracker._delta_type.from_element(self.tracker.items[element]).tail
import itertools
+import weakref
from twisted.internet import defer, reactor
from twisted.python import failure, log
def run_and_watch(self, func):
func()
return self.watch(func)
+ def watch_weakref(self, obj, func):
+ # func must not contain a reference to obj!
+ watch_id = self.watch(lambda *args: func(obj_ref(), *args))
+ obj_ref = weakref.ref(obj, lambda _: self.unwatch(watch_id))
def watch(self, func):
id = self.id_generator.next()
self.observers[id] = func