- `setup.py` can be run from a directory containing spaces. Reported
in :issue:`319` by Ivan Smirnov.
- `setup.py` can build with newer versions of clang on OS X. They
enforce the distinction between CFLAGS and CPPFLAGS.
- `gevent.lock.Semaphore` is atomic on PyPy, just like it is on
CPython. This comes at a small performance cost.
- Fixed regression that failed to set the `successful` value to
False when killing a greenlet before it ran with a non-default
exception. Fixed in :pr:`608` by Heungsub Lee.
- libev's child watchers caused `os.waitpid` to become unreliable
due to the use of signals on POSIX platforms. This was especially
noticeable when using `gevent.subprocess` in combination with
`multiprocessing`. Now, the monkey-patched `os` module provides
a `waitpid` function that seeks to ameliorate this. Reported in
:issue:`600` by champax and :issue:`452` by Łukasz Kawczyński.
- On platforms that implement `select.poll`, provide a
gevent-friendly `gevent.select.poll` and corresponding
monkey-patch. Implemented in :pr:`604` by Eddi Linder.
- Allow passing of events to the io callback under PyPy. Reported in
:issue:`531` by M. Nunberg and implemented in :pr:`604`.
- `gevent.thread.allocate_lock` (and so a monkey-patched standard
library `allocate_lock`) more closely matches the behaviour of the
builtin: an unlocked lock cannot be released, and attempting to do
so throws the correct exception (`thread.error` on Python 2,
`RuntimeError` on Python 3). Previously, over-releasing a lock was
silently ignored. Reported in :issue:`308` by Jędrzej Nowak.
- `gevent.fileobject.FileObjectThread` uses the threadpool to close
the underling file-like object. Reported in :issue:`201` by
vitaly-krugl.
- Malicious or malformed HTTP chunked transfer encoding data sent to
the `gevent.pywsgi` handler is handled more robustly, resulting in
"HTTP 400 bad request" responses instead of a 500 error or, in the
worst case, a server-side hang. Reported in :issue:`229` by Björn
Lindqvist.
- Importing the standard library `threading` module _before_ using
`gevent.monkey.patch_all()` no longer causes Python 3.4 to fail to
get the `repr` of the main thread, and other CPython platforms to
return an unjoinable DummyThread. (Note that this is not
recommended.) Reported in :issue:`153`.
- Under Python 2, use the `io` package to implement
`FileObjectPosix`. This unifies the code with the Python 3
implementation, and fixes problems with using `seek()`. See
:issue:`151`.
- Under Python 2, importing a module that uses gevent blocking
functions at its top level from multiple greenlets no longer
produces import errors (Python 3 handles this case natively).
Reported in :issue:`108` by shaun and initial fix based on code by
Sylvain Zimmer.
- `gevent.spawn`, `spawn_raw` and `spawn_later`, as well as the
`Greenlet` constructor, immediately produce useful `TypeError`s
if asked to run something that cannot be run. Previously, the
spawned greenlet would die with an uncaught `TypeError` the first
time it was switched to. Reported in :issue:`119` by stephan.
- Recursive use of `gevent.threadpool.ThreadPool.apply` no longer
raises a `LoopExit` error (using `ThreadPool.spawn` and then
`get` on the result still could; you must be careful to use the
correct hub). Reported in :issue:`131` by 8mayday.
- When the `threading` module is monkey-patched, the module-level
lock in the `logging` module is made greenlet-aware, as are the
instance locks of any configured handlers. This makes it safer to
import modules that use the standard pattern of creating a
module-level `Logger` instance before monkey-patching. Configuring
`logging` with a basic configuration and then monkey-patching is
also safer (but not configurations that involve such things as the
`SocketHandler`).
- Fix monkey-patching of `threading.RLock` under Python 3.
- Under Python 3, monkey-patching at the top-level of a module that
was imported by another module could result in a `RuntimeError`
from `importlib`. Reported in :issue:`615` by Daniel Mizyrycki.
(The same thing could happen under Python 2 if a `threading.RLock`
was held around the monkey-patching call; this is less likely but
not impossible with import hooks.)
- Fix configuring c-ares for a 32-bit Python when running on a 64-bit
platform. Reported in :issue:`381` and fixed in :pr:`616` by Chris
Lane.
- (Experimental) Let the `pywsgi.WSGIServer` accept a
`logging.Logger` instance for its `log` and (new) `error_log`
parameters. Take care that the system is fully monkey-patched very
early in the process's lifetime if attempting this, and note that
non-file handlers have not been tested. Fixes :issue:`106`.