Skip to content
Back to top

# Changes for 1.4

## 1.4.0 (2019-01-04)

- Build with Cython 0.29 in ‘3str’ mode.

- Test with PyPy 6.0 on Windows.

- Add support for application-wide callbacks when `Greenlet` objects are started. See pull request #1289, provided by Yury Selivanov.

- Fix consuming a single ready object using `next(gevent.iwait(objs))`. Previously such a construction would hang because `iter` was not called. See pull request #1288, provided by Josh Snyder. This is not recommended, though, as unwaited objects will have dangling links (but see next item).

- Make `gevent.iwait` return an iterator that can now also be used as a context manager. If you’ll only be consuming part of the iterator, use it in a `with` block to avoid leaking resources. See pull request #1290, provided by Josh Snyder.

- Fix semaphores to immediately notify links if they are ready and `rawlink()` is called. This behaves like `Event` and `AsyncEvent`. Note that the order in which semaphore links are called is not specified. See issue #1287, reported by Dan Milon.

- Improve safety of handling exceptions during interpreter shutdown. See issue #1295 reported by BobDenar1212.

- Remove the deprecated ability to specify `GEVENT_RESOLVER` and other importable settings as a `path/to/a/package.module.item`. This had race conditions and didn’t work with complicated resolver implementations. Place the required package or module on `sys.path` first.

- Reduce the chances that using the blocking monitor functionality could result in apparently random `SystemError: Objects/tupleobject.c: bad argument to internal function`. Reported in issue #1302 by Ulrich Petri.

- Refactored the gevent test runner and test suite to make them more reusable. In particular, the tests are now run with `python -m gevent.tests`. See issue #1293.

- Make a monkey-patched `socket.getaddrinfo` return socket module enums instead of plain integers for the socket type and address family on Python 3. See issue #1310 reported by TheYOSH.

  Note

  This requires Python 3.4.3 or above due to an undocumented change in that version.

- Make gevent’s pywsgi server set the non-standard environment value `wsgi.input_terminated` to True. See issue #1308.

- Make `gevent.util.assert_switches` produce more informative messages when the assertion fails.

- Python 2: If a `gevent.socket` was closed asynchronously (in a different greenlet or a hub callback), `AttributeError` could result if the socket was already in use. Now the correct socket.error should be raised.

- Fix `gevent.threadpool.ThreadPool.join()` raising a `UserWarning` when using the libuv backend. Reported in issue #1321 by ZeroNet.

- Fix `FileObjectPosix.seek` raising `OSError` when it should have been `IOError` on Python 2. Reported by, and PR by, Ricardo Kirkner. See issue #1323.

- Upgrade libuv from 1.23.2 to 1.24.0.