Commit ad0b2b54 authored by Denis Bilenko's avatar Denis Bilenko

use list, instead of set for Greenlet._links; this fixes issue #64

parent 0841f00b
...@@ -140,7 +140,7 @@ class Greenlet(greenlet): ...@@ -140,7 +140,7 @@ class Greenlet(greenlet):
self.args = args self.args = args
if kwargs: if kwargs:
self.kwargs = kwargs self.kwargs = kwargs
self._links = set() self._links = []
self.value = None self.value = None
self._exception = _NONE self._exception = _NONE
self._notifier = None self._notifier = None
...@@ -409,7 +409,7 @@ class Greenlet(greenlet): ...@@ -409,7 +409,7 @@ class Greenlet(greenlet):
""" """
if not callable(callback): if not callable(callback):
raise TypeError('Expected callable: %r' % (callback, )) raise TypeError('Expected callable: %r' % (callback, ))
self._links.add(callback) self._links.append(callback)
if self.ready() and self._notifier is None: if self.ready() and self._notifier is None:
self._notifier = core.active_event(self._notify_links) self._notifier = core.active_event(self._notify_links)
...@@ -451,7 +451,10 @@ class Greenlet(greenlet): ...@@ -451,7 +451,10 @@ class Greenlet(greenlet):
receiver = getcurrent() receiver = getcurrent()
# discarding greenlets when we have GreenletLink instances in _links works, because # discarding greenlets when we have GreenletLink instances in _links works, because
# a GreenletLink instance pretends to be a greenlet, hash-wise and eq-wise # a GreenletLink instance pretends to be a greenlet, hash-wise and eq-wise
self._links.discard(receiver) try:
self._links.remove(receiver)
except ValueError:
pass
def link_value(self, receiver=None, GreenletLink=SuccessGreenletLink, SpawnedLink=SuccessSpawnedLink): def link_value(self, receiver=None, GreenletLink=SuccessGreenletLink, SpawnedLink=SuccessSpawnedLink):
"""Like :meth:`link` but *receiver* is only notified when the greenlet has completed successfully""" """Like :meth:`link` but *receiver* is only notified when the greenlet has completed successfully"""
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment