Add python-eventlet 0.16.1
[packages/trusty/python-eventlet.git] / eventlet / NEWS
1 0.16.1
2 ======
3
4 * Wheel build 0.16.0 incorrectly shipped removed module eventlet.util.
5
6 0.16.0
7 ======
8
9 * Fix SSL socket wrapping and Python 2.7.9 compatibility; Thanks to Jakub Stasiak
10 * Fix monkey_patch() on Python 3; Thanks to Victor Stinner
11 * Fix "maximum recursion depth exceeded in GreenSocket.__del__"; Thanks to Jakub Stasiak
12 * db_pool: BaseConnectionPool.clear updates .current_size #139; Thanks to Andrey Gubarev
13 * Fix __str__ method on the TimeoutExpired exception class.; Thanks to Tomaz Muraus
14 * hubs: drop Twisted support
15 * Removed deprecated modules: api, most of coros, pool, proc, processes and util
16 * Improved Python 3 compatibility (including patch by raylu); Thanks to Jakub Stasiak
17 * Allow more graceful shutdown of wsgi server; Thanks to Stuart McLaren
18 * wsgi.input: Make send_hundred_continue_headers() a public API; Thanks to Tushar Gohad
19 * tpool: Windows compatibility, fix ResourceWarning. Thanks to Victor Stinner
20 * tests: Fix timers not cleaned up on MySQL test skips; Thanks to Corey Wright
21
22 0.15.2
23 ======
24 * greenio: fixed memory leak, introduced in 0.15.1; Thanks to Michael Kerrin, Tushar Gohad
25 * wsgi: Support optional headers w/ "100 Continue" responses; Thanks to Tushar Gohad
26
27 0.15.1
28 ======
29 * greenio: Fix second simultaneous read (parallel paramiko issue); Thanks to Jan Grant, Michael Kerrin
30 * db_pool: customizable connection cleanup function; Thanks to Avery Fay
31
32 0.15
33 ====
34 * Python3 compatibility -- **not ready yet**; Thanks to Astrum Kuo, Davanum Srinivas, Jakub Stasiak, Victor Sergeyev
35 * coros: remove Actor which was deprecated in 2010-01
36 * saranwrap: remove saranwrap which was deprecated in 2010-02
37 * PyPy compatibility fixes; Thanks to Dmitriy Kruglyak, Jakub Stasiak
38 * green.profile: accumulate results between runs; Thanks to Zhang Hua
39 * greenthread: add .unlink() method; Thanks to Astrum Kuo
40 * packaging: Generate universal wheels; Thanks to Jakub Stasiak
41 * queue: Make join not wait if there are no unfinished tasks; Thanks to Jakub Stasiak
42 * tpool: proxy __enter__, __exit__ fixes Bitbucket-158; Thanks to Eric Urban
43 * websockets: Add websockets13 support; handle lack of Upgrade header; Thanks to Edward George
44 * wsgi: capitalize_response_headers option
45
46 0.14
47 ====
48 * wsgi: handle connection socket timeouts; Thanks to Paul Oppenheim
49 * wsgi: close timed out client connections
50 * greenio: socket pypy compatibility; Thanks to Alex Gaynor
51 * wsgi: env['wsgi.input'] was returning 1 byte strings; Thanks to Eric Urban
52 * green.ssl: fix NameError; Github #17; Thanks to Jakub Stasiak
53 * websocket: allow "websocket" in lowercase in Upgrade header; Compatibility with current Google Chrome; Thanks to Dmitry Orlov
54 * wsgi: allow minimum_chunk_size to be overriden on a per request basis; Thanks to David Goetz
55 * wsgi: configurable socket_timeout
56
57 0.13
58 ====
59 * hubs: kqueue support! Thanks to YAMAMOTO Takashi, Edward George
60 * greenio: Fix AttributeError on MacOSX; Bitbucket #136; Thanks to Derk Tegeler
61 * green: subprocess: Fix subprocess.communicate() block on Python 2.7; Thanks to Edward George
62 * green: select: ensure that hub can .wait() at least once before timeout; Thanks to YAMAMOTO Takashi
63 * tpool: single request queue to avoid deadlocks; Bitbucket pull request 31,32; Thanks to Edward George
64 * zmq: pyzmq 13.x compatibility; Thanks to Edward George
65 * green: subprocess: Popen.wait() accepts new `timeout` kwarg; Python 3.3 and RHEL 6.1 compatibility
66 * hubs: EVENTLET_HUB can point to external modules; Thanks to Edward George
67 * semaphore: support timeout for acquire(); Thanks to Justin Patrin
68 * support: do not clear sys.exc_info if can be preserved (greenlet >= 0.3.2); Thanks to Edward George
69 * Travis continous integration; Thanks to Thomas Grainger, Jakub Stasiak
70 * wsgi: minimum_chunk_size of last Server altered all previous (global variable); Thanks to Jakub Stasiak
71 * doc: hubs: Point to the correct function in exception message; Thanks to Floris Bruynooghe
72
73 0.12
74 ====
75 * zmq: Fix 100% busy CPU in idle after .bind(PUB) (thanks to Geoff Salmon)
76 * greenio: Fix socket.settimeout() did not switch back to blocking mode (thanks to Peter Skirko)
77 * greenio: socket.dup() made excess fcntl syscalls (thanks to Peter Portante)
78 * setup: Remove legacy --without-greenlet option and unused httplib2 dependency (thanks to Thomas Grainger)
79 * wsgi: environ[REMOTE_PORT], also available in log_format, log accept event (thanks to Peter Portante)
80 * tests: Support libzmq 3.0 SNDHWM option (thanks to Geoff Salmon)
81
82 0.11
83 ====
84 * ssl: Fix 100% busy CPU in socket.sendall() (thanks to Raymon Lu)
85 * zmq: Return linger argument to Socket.close() (thanks to Eric Windisch)
86 * tests: SSL tests were always skipped due to bug in skip_if_no_ssl decorator
87
88 0.10
89 ====
90 * greenio: Fix relative seek() (thanks to AlanP)
91 * db_pool: Fix pool.put() TypeError with min_size > 1 (thanks to Jessica Qi)
92 * greenthread: Prevent infinite recursion with linking to current greenthread (thanks to Edward George)
93 * zmq: getsockopt(EVENTS) wakes correct threads (thanks to Eric Windisch)
94 * wsgi: Handle client disconnect while sending response (thanks to Clay Gerrard)
95 * hubs: Ensure that new hub greenlet is parent of old one (thanks to Edward George)
96 * os: Fix waitpid() returning (0, 0) (thanks to Vishvananda Ishaya)
97 * tpool: Add set_num_threads() method to set the number of tpool threads (thanks to David Ibarra)
98 * threading, zmq: Fix Python 2.5 support (thanks to Floris Bruynooghe)
99 * tests: tox configuration for all supported Python versions (thanks to Floris Bruynooghe)
100 * tests: Fix zmq._QueueLock test in Python2.6
101 * tests: Fix patcher_test on Darwin (/bin/true issue) (thanks to Edward George)
102 * tests: Skip SSL tests when not available (thanks to Floris Bruynooghe)
103 * greenio: Remove deprecated GreenPipe.xreadlines() method, was broken anyway
104
105 0.9.17
106 ======
107 * ZeroMQ support calling send and recv from multiple greenthreads (thanks to Geoff Salmon)
108 * SSL: unwrap() sends data, and so it needs trampolining (#104 thanks to Brandon Rhodes)
109 * hubs.epolls: Fix imports for exception handler (#123 thanks to Johannes Erdfelt)
110 * db_pool: Fix .clear() when min_size > 0
111 * db_pool: Add MySQL's insert_id() method (thanks to Peter Scott)
112 * db_pool: Close connections after timeout, fix get-after-close race condition with using TpooledConnectionPool (thanks to Peter Scott)
113 * threading monkey patch fixes (#115 thanks to Johannes Erdfelt)
114 * pools: Better accounting of current_size in pools.Pool (#91 thanks to Brett Hoerner)
115 * wsgi: environ['RAW_PATH_INFO'] with request path as received from client (thanks to dweimer)
116 * wsgi: log_output flag (thanks to Juan Manuel Garcia)
117 * wsgi: Limit HTTP header size (thanks to Gregory Holt)
118 * wsgi: Configurable maximum URL length (thanks to Tomas Sedovic)
119
120 0.9.16
121 ======
122 * SO_REUSEADDR now correctly set.
123
124 0.9.15
125 ======
126 * ZeroMQ support without an explicit hub now implemented!  Thanks to Zed Shaw for the patch.
127 * zmq module supports the NOBLOCK flag, thanks to rfk. (#76)
128 * eventlet.wsgi has a debug flag which can be set to false to not send tracebacks to the client (per redbo's request)
129 * Recursive GreenPipe madness forestalled by Soren Hansen (#77)
130 * eventlet.green.ssl no longer busywaits on send()
131 * EEXIST ignored in epoll hub (#80)
132 * eventlet.listen's behavior on Windows improved, thanks to Nick Vatamaniuc (#83)
133 * Timeouts raised within tpool.execute are propagated back to the caller (thanks again to redbo for being the squeaky wheel)
134
135 0.9.14
136 ======
137 * Many fixes to the ZeroMQ hub, which now requires version 2.0.10 or later.  Thanks to Ben Ford.
138 * ZeroMQ hub no longer depends on pollhub, and thus works on Windows (thanks, Alexey Borzenkov)
139 * Better handling of connect errors on Windows, thanks again to Alexey Borzenkov.
140 * More-robust Event delivery, thanks to Malcolm Cleaton
141 * wsgi.py now distinguishes between an empty query string ("") and a non-existent query string (no entry in environ).
142 * wsgi.py handles ipv6 correctly (thanks, redbo)
143 * Better behavior in tpool when you give it nonsensical numbers, thanks to R. Tyler for the nonsense.  :)
144 * Fixed importing on 2.5 (#73, thanks to Ruijun Luo)
145 * Hub doesn't hold on to invalid fds (#74, thanks to Edward George)
146 * Documentation for eventlet.green.zmq, courtesy of Ben Ford
147
148 0.9.13
149 ======
150 * ZeroMQ hub, and eventlet.green.zmq make supersockets green.  Thanks to Ben Ford!
151 * eventlet.green.MySQLdb added.  It's an interface to MySQLdb that uses tpool to make it appear nonblocking
152 * Greenthread affinity in tpool.  Each greenthread is assigned to the same thread when using tpool, making it easier to work with non-thread-safe libraries.
153 * Eventlet now depends on greenlet 0.3 or later.
154 * Fixed a hang when using tpool during an import causes another import.  Thanks to mikepk for tracking that down.
155 * Improved websocket draft 76 compliance, thanks to Nick V.
156 * Rare greenthread.kill() bug fixed, which was probably brought about by a bugfix in greenlet 0.3.
157 * Easy_installing eventlet should no longer print an ImportError about greenlet
158 * Support for serving up SSL websockets, thanks to chwagssd for reporting #62
159 * eventlet.wsgi properly sets 'wsgi.url_scheme' environment variable to 'https', and 'HTTPS' to 'on' if serving over ssl
160 * Blocking detector uses setitimer on 2.6 or later, allowing for sub-second block detection, thanks to rtyler.
161 * Blocking detector is documented now, too
162 * socket.create_connection properly uses dnspython for nonblocking dns.  Thanks to rtyler.
163 * Removed EVENTLET_TPOOL_DNS, nobody liked that.  But if you were using it, install dnspython instead.  Thanks to pigmej and gholt.
164 * Removed _main_wrapper from greenthread, thanks to Ambroff adding keyword arguments to switch() in 0.3!
165
166 0.9.12
167 ======
168 * Eventlet no longer uses the Twisted hub if Twisted is imported -- you must call eventlet.hubs.use_hub('twistedr') if you want to use it.  This prevents strange race conditions for those who want to use both Twisted and Eventlet separately.
169 * Removed circular import in twistedr.py
170 * Added websocket multi-user chat example
171 * Not using exec() in green modules anymore.
172 * eventlet.green.socket now contains all attributes of the stdlib socket module, even those that were left out by bugs.
173 * Eventlet.wsgi doesn't call print anymore, instead uses the logfiles for everything (it used to print exceptions in one place).
174 * Eventlet.wsgi properly closes the connection when an error is raised
175 * Better documentation on eventlet.event.Event.send_exception
176 * Adding websocket.html to tarball so that you can run the examples without checking out the source
177
178 0.9.10
179 ======
180 * Greendns: if dnspython is installed, Eventlet will automatically use it to provide non-blocking DNS queries.  Set the environment variable 'EVENTLET_NO_GREENDNS' if you don't want greendns but have dnspython installed.
181 * Full test suite passes on Python 2.7.
182 * Tests no longer depend on simplejson for >2.6.
183 * Potential-bug fixes in patcher (thanks to Schmir, and thanks to Hudson)
184 * Websockets work with query strings (thanks to mcarter)
185 * WSGI posthooks that get called after the request completed (thanks to gholt, nice docs, too)
186 * Blocking detector merged -- use it to detect places where your code is not yielding to the hub for > 1 second.
187 * tpool.Proxy can wrap callables
188 * Tweaked Timeout class to do something sensible when True is passed to the constructor
189
190 0.9.9
191 =====
192 * A fix for monkeypatching on systems with psycopg version 2.0.14.
193 * Improved support for chunked transfers in wsgi, plus a bunch of tests from schmir (ported from gevent by redbo)
194 * A fix for the twisted hub from Favo Yang
195
196 0.9.8
197 =====
198 * Support for psycopg2's asynchronous mode, from Daniele Varrazzo
199 * websocket module is now part of core Eventlet with 100% unit test coverage thanks to Ben Ford.  See its documentation at http://eventlet.net/doc/modules/websocket.html
200 * Added wrap_ssl convenience method, meaning that we truly no longer need api or util modules.
201 * Multiple-reader detection code protects against the common mistake of having multiple greenthreads read from the same socket at the same time, which can be overridden if you know what you're doing.
202 * Cleaner monkey_patch API: the "all" keyword is no longer necessary.
203 * Pool objects have a more convenient constructor -- no more need to subclass
204 * amajorek's reimplementation of GreenPipe
205 * Many bug fixes, major and minor.
206
207 0.9.7
208 =====
209 * GreenPipe is now a context manager (thanks, quad)
210 * tpool.Proxy supports iterators properly
211 * bug fixes in eventlet.green.os (thanks, Benoit)
212 * much code cleanup from Tavis
213 * a few more example apps
214 * multitudinous improvements in Py3k compatibility from amajorek
215
216
217 0.9.6
218 =====
219 * new EVENTLET_HUB environment variable allows you to select a hub without code
220 * improved GreenSocket and GreenPipe compatibility with stdlib
221 * bugfixes on GreenSocket and GreenPipe objects
222 * code coverage increased across the board
223 * Queue resizing
224 * internal DeprecationWarnings largely eliminated
225 * tpool is now reentrant (i.e., can call tpool.execute(tpool.execute(foo)))
226 * more reliable access to unpatched modules reduces some race conditions when monkeypatching
227 * completely threading-compatible corolocal implementation, plus tests and enthusiastic adoption
228 * tests stomp on each others' toes less
229 * performance improvements in timers, hubs, greenpool
230 * Greenlet-aware profile module courtesy of CCP
231 * support for select26 module's epoll
232 * better PEP-8 compliance and import cleanup
233 * new eventlet.serve convenience function for easy TCP servers
234
235
236 0.9.5
237 =====
238 * support psycopg in db_pool
239 * smart patcher that does the right patching when importing without needing to understand plumbing of patched module
240 * patcher.monkey_patch() method replacing util.wrap_*
241 * monkeypatch threading support
242 * removed api.named
243 * imported timeout module from gevent, replace exc_after and with_timeout()
244 * replace call_after with spawn_after; this is so that users don't see the Timer class
245 * added cancel() method to GreenThread to support the semantic of "abort if not already in the middle of something"
246 * eventlet.green.os with patched read() and write(), etc
247 * moved stuff from wrap_pipes_with_coroutine_pipe into green.os
248 * eventlet.green.subprocess instead of eventlet.processes
249 * improve patching docs, explaining more about patcher and why you'd use eventlet.green
250 * better documentation on greenpiles
251 * deprecate api.py completely
252 * deprecate util.py completely
253 * deprecate saranwrap
254 * performance improvements in the hubs
255 * much better documentation overall
256 * new convenience functions: eventlet.connect and eventlet.listen.  Thanks, Sergey!
257
258
259 0.9.4
260 =====
261 * Deprecated coros.Queue and coros.Channel (use queue.Queue instead)
262 * Added putting and getting methods to queue.Queue.
263 * Added eventlet.green.Queue which is a greened clone of stdlib Queue, along with stdlib tests.
264 * Changed __init__.py so that the version number is readable even if greenlet's not installed.
265 * Bugfixes in wsgi, greenpool
266
267 0.9.3
268 =====
269
270 * Moved primary api module to __init__ from api.  It shouldn't be necessary to import eventlet.api anymore; import eventlet should do the same job.
271 * Proc module deprecated in favor of greenthread
272 * New module greenthread, with new class GreenThread.
273 * New GreenPool class that replaces pool.Pool.
274 * Deprecated proc module (use greenthread module instead)
275 * tpooled gethostbyname is configurable via environment variable EVENTLET_TPOOL_GETHOSTBYNAME
276 * Removed greenio.Green_fileobject and refactored the code therein to be more efficient.  Only call makefile() on sockets now; makeGreenFile() is deprecated.  The main loss here is that of the readuntil method.  Also, Green_fileobjects used to be auto-flushing; flush() must be called explicitly now.
277 * Added epoll support
278 * Improved documentation across the board.
279 * New queue module, API-compatible with stdlib Queue
280 * New debug module, used for enabling verbosity within Eventlet that can help debug applications or Eventlet itself.
281 * Bugfixes in tpool, green.select, patcher
282 * Deprecated coros.execute (use eventlet.spawn instead)
283 * Deprecated coros.semaphore (use semaphore.Semaphore or semaphore.BoundedSemaphore instead)
284 * Moved coros.BoundedSemaphore to semaphore.BoundedSemaphore
285 * Moved coros.Semaphore to semaphore.Semaphore
286 * Moved coros.event to event.Event
287 * Deprecated api.tcp_listener, api.connect_tcp, api.ssl_listener
288 * Moved get_hub, use_hub, get_default_hub from eventlet.api to eventlet.hubs
289 * Renamed libevent hub to pyevent.
290 * Removed previously-deprecated features tcp_server, GreenSSL, erpc, and trap_errors.
291 * Removed saranwrap as an option for making db connections nonblocking in db_pool.
292
293 0.9.2
294 =====
295
296 * Bugfix for wsgi.py where it was improperly expecting the environ variable to be a constant when passed to the application.
297 * Tpool.py now passes its tests on Windows.
298 * Fixed minor performance issue in wsgi.
299
300 0.9.1
301 =====
302
303 * PyOpenSSL is no longer required for Python 2.6: use the eventlet.green.ssl module. 2.5 and 2.4 still require PyOpenSSL.
304 * Cleaned up the eventlet.green packages and their associated tests, this should result in fewer version-dependent bugs with these modules.
305 * PyOpenSSL is now fully wrapped in eventlet.green.OpenSSL; using it is therefore more consistent with using other green modules.
306 * Documentation on using SSL added.
307 * New green modules: ayncore, asynchat, SimpleHTTPServer, CGIHTTPServer, ftplib.
308 * Fuller thread/threading compatibility: patching threadlocal with corolocal so coroutines behave even more like threads.
309 * Improved Windows compatibility for tpool.py
310 * With-statement compatibility for pools.Pool objects.
311 * Refactored copyrights in the files, added LICENSE and AUTHORS files.
312 * Added support for logging x-forwarded-for header in wsgi.
313 * api.tcp_server is now deprecated, will be removed in a future release.
314 * Added instructions on how to generate coverage reports to the documentation.
315 * Renamed GreenFile to Green_fileobject, to better reflect its purpose.
316 * Deprecated erpc method in tpool.py
317 * Bug fixes in: wsgi.py, twistedr.py, poll.py, greenio.py, util.py, select.py, processes.py, selects.py
318
319 0.9.0
320 =====
321
322 * Full-duplex sockets (simultaneous readers and writers in the same process).
323 * Remove modules that distract from the core mission of making it straightforward to write event-driven networking apps:
324     httpd, httpc, channel, greenlib, httpdate, jsonhttp, logutil
325 * Removed test dependency on sqlite, using nose instead.
326 * Marked known-broken tests using nose's mechanism (most of these are not broken but are simply run in the incorrect context, such as threading-related tests that are incompatible with the libevent hub).
327 * Remove copied code from python standard libs (in tests).
328 * Added eventlet.patcher which can be used to import "greened" modules.
329
330 0.8.16
331 ======
332 * GreenSSLObject properly masks ZeroReturnErrors with an empty read; with unit test.
333 * Fixed 2.6 SSL compatibility issue.
334
335 0.8.15
336 ======
337
338 * GreenSSL object no longer converts ZeroReturnErrors into empty reads, because that is more compatible with the underlying SSLConnection object.
339 * Fixed issue caused by SIGCHLD handler in processes.py
340 * Stopped supporting string exceptions in saranwrap and fixed a few test failures.
341
342 0.8.14
343 ======
344 * Fixed some more Windows compatibility problems, resolving EVT-37 :
345 http://jira.secondlife.com/browse/EVT-37
346 * waiting() method on Pool class, which was lost when the Pool implementation
347 replaced CoroutinePool.
348
349 0.8.13
350 ======
351 * 2.6 SSL compatibility patch by Marcus Cavanaugh.
352 * Added greenlet and pyopenssl as dependencies in setup.py.
353
354 0.8.12
355 ======
356
357 * The ability to resize() pools of coroutines, which was lost when the
358 Pool implementation replaced CoroutinePool.
359 * Fixed Cesar's issue with SSL connections, and furthermore did a
360 complete overhaul of SSL handling in eventlet so that it's much closer
361 to the behavior of the built-in libraries.  In particular, users of
362 GreenSSL sockets must now call shutdown() before close(), exactly
363 like SSL.Connection objects.
364 * A small patch that makes Eventlet work on Windows.  This is the first
365 release of Eventlet that works on Windows.
366
367 0.8.11
368 ======
369
370 Eventlet can now run on top of twisted reactor. Twisted-based hub is enabled automatically if
371 twisted.internet.reactor is imported. It is also possible to "embed" eventlet into a twisted
372 application via eventlet.twistedutil.join_reactor. See the examples for details.
373
374 A new package, eventlet.twistedutil, is added that makes integration of twisted and eventlet
375 easier. It has block_on function that allows to wait for a Deferred to fire and it wraps
376 twisted's Protocol in a synchronous interface. This is similar to and is inspired by Christopher
377 Armstrong's corotwine library. Thanks to Dan Pascu for reviewing the package.
378
379 Another new package, eventlet.green, was added to provide some of the standard modules
380 that are fixed not to block other greenlets. This is an alternative to monkey-patching
381 the socket, which is impossible to do if you are running twisted reactor.
382 The package includes socket, httplib, urllib2.
383
384 Much of the core functionality has been refactored and cleaned up, including the removal
385 of eventlet.greenlib. This means that it is now possible to use plain greenlets without
386 modification in eventlet, and the subclasses of greenlet instead of the old
387 eventlet.greenlib.GreenletContext. Calling eventlet.api.get_hub().switch() now checks to
388 see whether the current greenlet has a "switch_out" method and calls it if so, providing the
389 same functionality that the GreenletContext.swap_out used to. The swap_in behavior can be
390 duplicated by overriding the switch method, and the finalize functionality can be duplicated
391 by having a try: finally: block around the greenlet's main implementation. The eventlet.backdoor
392 module has been ported to this new scheme, although it's signature had to change slightly so
393 existing code that used the backdoor will have to be modified.
394
395 A number of bugs related to improper scheduling of switch calls has been fixed.
396 The fixed functions and classes include api.trampoline, api.sleep, coros.event,
397 coros.semaphore, coros.queue.
398
399 Many methods of greenio.GreenSocket were fixed to make its behavior more like that of a regular
400 socket. Thanks to Marcin Bachry for fixing GreenSocket.dup to preserve the timeout.
401
402 Added proc module which provides an easy way to subscribe to coroutine's results. This makes
403 it easy to wait for a single greenlet or for a set of greenlets to complete.
404
405 wsgi.py now supports chunked transfer requests (patch by Mike Barton)
406
407 The following modules were deprecated or removed because they were broken:
408 hubs.nginx, hubs.libev, support.pycurls, support.twisteds, cancel method of coros.event class
409
410 The following classes are still present but will be removed in the future version:
411 - channel.channel (use coros.Channel)
412 - coros.CoroutinePool (use pool.Pool)
413
414 saranwrap.py now correctly closes the child process when the referring object is deleted,
415 received some fixes to its detection of child process death, now correctly deals with the in
416 keyword, and it is now possible to use coroutines in a non-blocking fashion in the child process.
417
418 Time-based expiry added to db_pool.  This adds the ability to expire connections both by idleness
419 and also by total time open.  There is also a connection timeout option.
420
421 A small bug in httpd's error method was fixed.
422
423 Python 2.3 is no longer supported.
424
425 A number of tests was added along with a script to run all of them for all the configurations.
426 The script generates an html page with the results.
427
428 Thanks to Brian Brunswick for investigation of popen4 badness (eventlet.process)
429 Thanks to Marcus Cavanaugh for pointing out some coros.queue(0) bugs.
430
431 The twisted integration as well as many other improvements were funded by AG Projects (http://ag-projects.com), thanks!
432
433 0.8.x
434 =====
435
436 Fix a CPU leak that would cause the poll hub to consume 100% CPU in certain conditions, for example the echoserver example. (Donovan Preston)
437
438 Fix the libev hub to match libev's callback signature. (Patch by grugq)
439
440 Add a backlog argument to api.tcp_listener (Patch by grugq)
441
442 0.7.x
443 =====
444
445 Fix a major memory leak when using the libevent or libev hubs. Timers were not being removed from the hub after they fired. (Thanks Agusto Becciu and the grugq). Also, make it possible to call wrap_socket_with_coroutine_socket without using the threadpool to make dns operations non-blocking (Thanks the grugq).
446
447 It's now possible to use eventlet's SSL client to talk to eventlet's SSL server. (Thanks to Ryan Williams)
448
449 Fixed a major CPU leak when using select hub. When adding a descriptor to the hub, entries were made in all three dictionaries, readers, writers, and exc, even if the callback is None. Thus every fd would be passed into all three lists when calling select regardless of whether there was a callback for that event or not. When reading the next request out of a keepalive socket, the socket would come back as ready for writing, the hub would notice the callback is None and ignore it, and then loop as fast as possible consuming CPU.
450
451 0.6.x
452 =====
453
454 Fixes some long-standing bugs where sometimes failures in accept() or connect() would cause the coroutine that was waiting to be double-resumed, most often resulting in SwitchingToDeadGreenlet exceptions as well as weird tuple-unpacking exceptions in the CoroutinePool main loop.
455
456 0.6.1: Added eventlet.tpool.killall. Blocks until all of the threadpool threads have been told to exit and join()ed. Meant to be used to clean up the threadpool on exit or if calling execv. Used by Spawning.
457
458 0.5.x
459 =====
460
461 "The Pycon 2008 Refactor": The first release which incorporates libevent support. Also comes with significant refactoring and code cleanup, especially to the eventlet.wsgi http server. Docstring coverage is much higher and there is new extensive documentation: http://wiki.secondlife.com/wiki/Eventlet/Documentation
462
463 The point releases of 0.5.x fixed some bugs in the wsgi server, most notably handling of Transfer-Encoding: chunked; previously, it would happily send chunked encoding to clients which asked for HTTP/1.0, which isn't legal.
464
465 0.2
466 =====
467
468 Initial re-release of forked linden branch.