Commit 3b8e9544 authored by Jason Madden's avatar Jason Madden

Merge branch 'master' into travis-container

parents 036cf783 c40b06cc
...@@ -8,7 +8,18 @@ Unreleased ...@@ -8,7 +8,18 @@ Unreleased
---------- ----------
- Fix LifoQueue.peek() to return correct element. PR #456. Patch by Christine Spang. - Fix LifoQueue.peek() to return correct element. PR #456. Patch by Christine Spang.
- Fix gevent.greenlet.joinall to not ignore ``count`` when
``raise_error`` is False. PR #512 by Ivan Diao.
Release 1.0.2
-------------
- Fix LifoQueue.peek() to return correct element. PR #456. Patch by Christine Spang.
- Upgrade to libev 4.19
- Remove SSL3 entirely as default TLS protocol
- Import socket on Windows (closes #459)
- Fix C90 syntax error (PR #449)
- Add compatibility with Python 2.7.9's SSL changes. Issue #477.
Release 1.0.1 Release 1.0.1
------------- -------------
...@@ -80,7 +91,7 @@ Release 1.0rc1 (Oct 30, 2012) ...@@ -80,7 +91,7 @@ Release 1.0rc1 (Oct 30, 2012)
- Renamed FileObjectThreadPool -> FileObjectThread - Renamed FileObjectThreadPool -> FileObjectThread
- Greenlet: Fixed #143: greenlet links are now executed in the order they were added - Greenlet: Fixed #143: greenlet links are now executed in the order they were added
- Synchronize access to FileObjectThread with Semaphore - Synchronize access to FileObjectThread with Semaphore
- EINVAL is not longer handled in fileobject. - EINVAL is no longer handled in fileobject.
monkey: monkey:
...@@ -1039,4 +1050,3 @@ Besides having less bugs and less code to care about the goals of the fork are: ...@@ -1039,4 +1050,3 @@ Besides having less bugs and less code to care about the goals of the fork are:
* Use the interfaces and conventions from the standard Python library where possible. * Use the interfaces and conventions from the standard Python library where possible.
.. _eventlet: http://bitbucket.org/denis/eventlet .. _eventlet: http://bitbucket.org/denis/eventlet
...@@ -410,7 +410,7 @@ def _kill(greenlet, exception, waiter): ...@@ -410,7 +410,7 @@ def _kill(greenlet, exception, waiter):
def joinall(greenlets, timeout=None, raise_error=False, count=None): def joinall(greenlets, timeout=None, raise_error=False, count=None):
if not raise_error: if not raise_error:
wait(greenlets, timeout=timeout) wait(greenlets, timeout=timeout, count=count)
else: else:
for obj in iwait(greenlets, timeout=timeout): for obj in iwait(greenlets, timeout=timeout):
if getattr(obj, 'exception', None) is not None: if getattr(obj, 'exception', None) is not None:
......
...@@ -288,6 +288,26 @@ class TestStuff(greentest.TestCase): ...@@ -288,6 +288,26 @@ class TestStuff(greentest.TestCase):
assert 'second' in str(ex), repr(str(ex)) assert 'second' in str(ex), repr(str(ex))
gevent.joinall([a, b]) gevent.joinall([a, b])
def test_joinall_count_raise_error(self):
# When joinall is asked not to raise an error, the 'count' param still
# works.
def raises_but_ignored():
raise ExpectedError("count")
def sleep_forever():
while True:
sleep(0.1)
sleeper = gevent.spawn(sleep_forever)
raiser = gevent.spawn(raises_but_ignored)
gevent.joinall([sleeper, raiser], raise_error=False, count=1)
assert_ready(raiser)
assert_not_ready(sleeper)
# Clean up our mess
sleeper.kill()
assert_ready(sleeper)
def test_multiple_listeners_error(self): def test_multiple_listeners_error(self):
# if there was an error while calling a callback # if there was an error while calling a callback
# it should not prevent the other listeners from being called # it should not prevent the other listeners from being called
......
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