=================
 Changes for 1.4
=================

.. currentmodule:: gevent


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 :pr:`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 :pr:`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
  :pr:`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 :meth:`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.
