summaryrefslogtreecommitdiff
path: root/Changes
diff options
context:
space:
mode:
Diffstat (limited to 'Changes')
-rw-r--r--Changes844
1 files changed, 844 insertions, 0 deletions
diff --git a/Changes b/Changes
new file mode 100644
index 0000000..8fc2d7f
--- /dev/null
+++ b/Changes
@@ -0,0 +1,844 @@
+Revision history for IO-Async
+
+0.67 2015/06/01 15:06:13
+ [CHANGES]
+ * Add a ->post_fork method to IO::Async::Loop in case subclasses
+ should take specific action (RT104130)
+ * Remove IO::Async::MergePoint entirely
+ * Add debug_printf() calls to IO::Async::Process
+ * Various documentation additions
+
+ [BUGFIXES]
+ * Remember to actually delete unused filehandles from the pollmask
+ (RT103922)
+
+0.66 2015/04/17 20:36:39
+ [CHANGES]
+ * Created IO::Async::Debug
+ * Ignore SIGPIPE by default (RT92024)
+ * IaSocket->bind now returns a Future
+ * Added IaSocket->bind resolver support and neatened up UDP examples
+ in synopsis/documentation
+
+ [BUGFIXES]
+ * Correct call to unpack() in IaStream example (RT103143)
+ * Don't silently eat accept() failures in IaListener (RT102677)
+ * Remember to add the new resolver instance to $loop in
+ ->set_resolver (RT103446)
+ * Correct implementation of ->unwatch_io on IaLoop::Poll to prevent
+ 100% CPU spin (RT103445)
+ * Ensure that an exception thrown by Timer::Periodic's on_tick
+ doesn't prevent rescheduling
+
+0.65 2015/02/15 14:28:02
+ [CHANGES]
+ * Optionally allow IO::Async::Channel to use 'Sereal' serialisation
+ * Added documentation about the 'env' Child Manager key and copying
+ %ENV
+ * Take OS "preferred loop subclass" hints from IO::Async::OS directly
+
+ [BUGFIXES]
+ * Nested $stream->read_* inside read_* cause double-completion of
+ Future (RT101774)
+ * Implement IO::Async::Loop::Poll directly on _poll() syscall
+ wrapper, thus avoiding many bugs in IO::Poll (RT93141)
+ * Ensure that IO::Async::Loop::Select can cope with callbacks that
+ remove other IO handle watches (RT101919)
+ * Silently upgrade watched IO handles to O_NONBLOCK (RT102044)
+ * Complain about unrecognised keys to ->extract_addrinfo (RT101453)
+
+0.64 2014/10/17 17:51:07
+ [CHANGES]
+ * Make specific mention of 'TCP' and 'UDP' around socket examples
+ where appropriate
+ * Allow construction of an IO::Async::Handle using fileno integers
+ directly
+ * Provide a better search for 'all open filehandles' via IO::Async::OS
+ on Linux (RT97942)
+ * Allow IO::Async::Listener to have handle_constructor or handle_class
+ as a subclass method (RT97208)
+ * Clarify documentation on how to use IO::Async::Process's
+ on_exception event (RT98929)
+
+ [BUGFIXES]
+ * Ensure that Stream's write Futures are also informed of write errors
+ (RT97433)
+ * Remember to ->remove_child the individual workers of an
+ IO::Async::Function (RT99552)
+ * Fix IO::Async::Function synopsis example (RT97713)
+
+0.63 2014/07/11 15:09:08
+ [CHANGES]
+ * Allow Notifier subclasses to last-ditch handle unrecognised
+ ->configure() params
+ * Added $notifier->adopt_future
+ * Added $notifier->invoke_error and 'on_error' event
+ * Ensure that TimeQueue inserts in FIFO order for equal timestamps
+ * Kill remaining docs to long-dead IO::Async::Sequencer
+
+ [BUGFIXES]
+ * Cygwin needs the SELECT_CONNECT_EVEC OS hint as well
+ * Probe for a broken port to perform listen() tests on by using
+ ReuseAddr => 1 so it matches what IO::Async will do (RT84051)
+
+0.62 2014/03/27 23:15:25
+ [CHANGES]
+ * Added IO::Async::Future->{done,fail}_later
+ * Allow overriding of debug log file or file descriptor
+ * Avoid Future's and_then/or_else methods
+ * Allow Channel->recv in async mode to return a Future (RT91180)
+ * Ensure that Function ->call Futures cancel correctly
+ * Added $routine->kill
+ * Kill the 'getaddrinfo' => 'getaddrinfo_array' legacy redirection
+ * Allow Loop's resolver to be changed to a different object
+
+ [BUGFIXES]
+ * Avoid relying on strong forward references in Future, by creating
+ intentional cycles on pending Futures. Workaround for bugfix in
+ upcoming Future release.
+
+0.61 2013/10/15 01:10:51
+ [CHANGES]
+ * Some OSes lack signals; forbid the ->*_signal methods, and use
+ waitpid() polling for child processes if so
+ * Rearrangement of $loop->listen and IO::Async::Listener logic to
+ allow Listener subclasses to use listen extensions (e.g. SSL)
+ * Allow ->listen to construct new Stream or Socket handles
+ * Updated documentation and tests to emphasise futures with resolver
+ and ->listen
+ * Support spawning threads and watching for exit
+ * Support IO::Async::Routine based on threads
+ * Various MSWin32 improvements and fixes - it now passes tests \o/
+ * Declare that MSWin32 does not support POSIX-like fork(); skip all
+ unit tests and functionallity based on it if so
+
+ Note: These changes break IO::Async::SSL versions 0.12 or older.
+
+ [BUGFIXES]
+ * Ensure that $stream->write( CODE, on_write/write_len ) works
+ correctly
+
+ With many thanks to Mithaldu for the use of his Windows smoker for
+ development and testing of the MSWin32 fixes
+
+0.60 2013/09/19 14:26:22
+ [CHANGES]
+ * Updated for Future 0.16 - no longer needs 'return' argument for
+ Future::Utils functions
+ * $stream->connect() ought to default socktype => "stream"
+
+ [BUGFIXES]
+ * Fix unit tests to better handle INADDR_LOOPBACK not being 127.0.0.1
+ * Skip-guard ->socket("inet6") unit tests on machines unable to
+ socket(AF_INET6)
+ * Remmeber to ->accept connections to testing socket in
+ t/63handle-connect.t
+
+0.59 CHANGES:
+ * Allow IO::Async::Stream to define custom reader/writer methods
+ * Support writeready-for-read and readready-for-write in Stream
+ * Allow Stream->write() on_write and write_len args
+ * Neatened and documented Future ->fail arguments and conventions
+ * Added Stream on_writeable_{start,stop} events
+ * Added Handle->socket, ->bind and ->connect methods
+ * Revamp of Loop->connect logic; allow passing through an
+ IO::Async::Handle instance
+
+ BUGFIXES:
+ * Ensure that stream read EOF state is visible during queued on_read
+ events that caused it
+ * Fix 'return ... or die' precendence bug in Resolver (RT87051)
+ * Need to poll() for POLLPRI on MSWin32 and Cygwin
+
+0.58 CHANGES:
+ * Added Stream read watermarks
+
+ BUGFIXES:
+ * Fix weakself event handlers' use of "shift or return"
+
+0.57 CHANGES:
+ * Allow Stream->write from a Future, CODE that returns Future, Future
+ that returns CODE, etc...
+ * Added Future-returning Stream->read_* methods and ->push_on_read
+ * Return a flush-complete notification Future from Stream->write
+ * Allow Timer::Periodic to stop itself from its own on_tick event
+ * Wrap transport on_{read,write}_eof from Protocol::Stream
+
+0.56 CHANGES:
+ * Added $loop->delay_future and $loop->timeout_future
+ * Added $future->loop accessor
+ * Use a faster splice()-based mechanism for the ARRAY-based TimeQueue
+ * Updated for Future::Utils 0.12 'repeat' function
+
+ BUGFIXES:
+ * Ensure that Process from => "" works
+ * If select() returns -1 ignore the bit vectors
+ * pipe() on Windows doesn't play with select(); emulate ->pipepair
+ using ->socketpair
+ * Correct use of S_ISREG and stat()
+
+0.55 CHANGES:
+ * Try to ensure IO::Async::OS->socket returns an IO::Socket::IP
+ instance for PF_INET or PF_INET6 if it is available
+ * Don't bother testing subsecond loop_once behaviour because most
+ loops can't actually do it
+ * Use Future::Utils instead of CPS, removing a dependency
+ * Removed IO::Async::Sequencer
+ * Print a deprecation warning on old loop classes with old timer
+ support
+
+0.54 CHANGES:
+ * Use Future instead of CPS::Future
+ * Created IO::Async::Future subclass
+ * Initial support for Futures on Loops
+ * Rewrite lots of internals to use Futures instead of MergePoints or
+ other logic
+ * Renamed all "task" to "future" in APIs
+ * Allow packing of inet/inet6 address structures to omit the IP or
+ port and presume passive or port 0
+ * Removed $notifier->get_loop synonym
+ * Make IO::Async::MergePoint throw a deprecation warning
+
+0.53 CHANGES:
+ * Added IO_ASYNC_WATCHDOG debugging support
+
+ BUGFIXES:
+ * Remember to return a task from Function->call even if it's queued
+ (RT79248)
+
+0.52 CHANGES:
+ * Initial attempt at Tasks using CPS::Future
+ * Minor fixes to timer LoopTests to prevent spurious failures of
+ sub-second timing
+ * Declare dependence on perl 5.10 now we're using 5.10 features
+ * Removed long-since deprecated IO::Async::DetachedCode
+
+0.51 CHANGES:
+ * Split much code out to new IO::Async::OS heirarchy
+ * Drop dead dependency on Test::Warn
+ * Smaller simpler signal handling, avoid POSIX::SigSet
+ * Expose getfamilybyname and getsocktypebyname as OS methods
+
+ BUGFIXES:
+ * Many small MSWin32 fixes that might help pass some tests. Likely
+ still incomplete though
+
+0.50 CHANGES:
+ * Added IO::Async::File
+ * Added filename mode of IO::Async::FileStream
+ * Make Heap dependency optional by reimplementing a tiny but less
+ efficient version of TimeQueue using a plain array
+ * No longer need MB-only Build.PL
+
+ BUGFIXES:
+ * Round up select() and poll() timeouts to nearest milisecond, might
+ help correct wait-time vs. gettimeofday() mismatches
+ * Fake read- and write-readiness of S_ISREG filehandles in select()
+ on MSWin32
+ * select() for exceptional status on MSWin32 to check for connect()
+ failures
+ * Don't unit-test that getsockname() works on socketpair()ed sockets
+
+0.49 CHANGES:
+ * Fix watch_time => enqueue_timer conversions; fix unit tests and
+ Timer implementations
+
+0.48 CHANGES:
+ * Support Channel long-running on_recv handler
+ * Support Channel directly between two Routines, in sync. mode at
+ both ends
+ * Added Loop->{watch,unwatch}_time API
+ * Added Function->restart and max_worker_calls parameter
+ * Support other reschedule policies for Timer::Periodic to allow
+ tick skipping, or drift
+
+ BUGFIXES:
+ * Fix example in Routine SYNOPSIS (thanks apeiron)
+ * Connector should check definedness of local_{host,port} rather than
+ existence
+
+0.47 CHANGES:
+ * Support $listener->listen( v6only => ... )
+ * Added new data-passing $loop->run and $loop->stop methods
+
+ BUGFIXES:
+ * Emulate ->socketpair on MSWin32 by connecting to a temporary socket
+ * Account for EWOULDBLOCK on MSWin32
+ * Don't try reading STDIN to block awaiting a signal in unit-tests
+ * Allow zero-delay Countdown timers (RT75954)
+ * Handle dup2() collisions in ChildManager filehandle setups
+ (RT75573)
+ * Fix race condition in t/33process.t (RT75573)
+ * Ensure Timer->stop doesn't fail if the timer isn't running
+ (RT75571)
+ * Possibly-fix some cygwin test failures (RT71706)
+ * Ensure that 'passive' getaddrinfo hint is handled in both
+ synchronous and numeric cases
+
+0.46 ADDITIONS:
+ * IO::Async::Routine + IO::Async::Channel
+ * IO::Async::Process->kill method
+
+ CHANGES:
+ * Use Socket 1.93 rather than dual-dependency logic on
+ Socket::GetAddrInfo
+ * Rewrote ::Function based on ::Routine and ::Channel
+ * Cleaner refcount behaviour in ::Process
+ * ::Process no longer waits for EOF condition on write-only pipes
+ * Don't unit-test the reading end of a pipe for HUP condition
+ * Documentation updates
+ * Removed documentation for long-since deprecated $loop->detach_child
+ and ->detach_code methods
+
+0.45 CHANGES:
+ * Added Timer->is_expired predicate, remove_on_expire parameter
+ (RT71767)
+
+ BUGFIXES:
+ * Use fd3/4 in ::Function rather than STDIN/STDOUT, to avoid
+ corrupting the return channel if the body function prints (RT72448)
+ * Better error detection around setuid/setgid/setgroups (RT72407)
+ * IO::Handle->binmode is not available as a method before perl 5.12;
+ use CORE::binmode() instead
+ * Don't attempt to invoke a missing on_notifier callback in
+ Loop->listen (RT71768)
+
+0.44 CHANGES:
+ * Allow Process to have sockets as handles; including datagram
+ sockets
+
+ BUGFIXES:
+ * Extract TimeQueue entiries before firing them, in case they do
+ something weird like cancelling themselves (RT70231)
+ * Test dollarbang for EWOULDBLOCK which might help MSWin32
+ * Cope correctly with Function handles in the presence of -CS or
+ PERL_UNICODE=S
+
+0.43 CHANGES:
+ * Allow IO::Async::Notifier to be used as a non-principle mixin class
+ * Provide Notifier->loop accessor
+ * Added (still-experimental) Notifier debug features
+ * Deleted various deprecated features:
+ + Notifier to Handle upgrade
+ + Loop->enable_childmanager, Loop->disable_childmanager
+ * Print deprecation warnings on Loop->detach_code, Loop->detach_child
+ * Minor improvements to LoopTests
+
+0.42 BUGFIXES:
+ * Test Stream encoding errors on a sequence which still returns
+ U+FFFD immediately on 5.14.0 (RT69020)
+
+0.41 CHANGES:
+ * Support 'encoding' parameter in IO::Async::Stream
+ * Allow IO::Async::Stream->write with an empty string, for the
+ side-effect of setting an on_flush handler
+ * Support 'first_interval' parameter to IO::Async::Timer::Periodic
+ * Expanded documentation of timers
+
+ BUGFIXES:
+ * Explicitly 'use IO::Handle;'
+
+0.40 ADDITIONS:
+ * Added IO::Async::FileStream - RT66520
+ * Added IO::Async::Stream 'close_on_read_eof' parameter
+ * Added IO::Async::Listener 'on_accept_failure' event
+
+ CHANGES:
+ * Allow Loop->listen to be extended via extensions, similar to
+ ->connect
+ * Autoflush streams used in Function::Worker objects by default
+ * Default Resolver to idle_timeout=30, min_workers=0
+
+ BUGFIXES:
+ * Don't convert method names to CODErefs during _capture_weakself as
+ it breaks dynamic dispatch and code reload - RT65785
+ * Only calculate Timer::Periodic's next tick time if it actually has
+ a Loop
+ * Put primary GID first in a 'setgroups' list, otherwise some BSDs
+ get upset - RT65127
+ * Load getaddrinfo() from Socket or Socket::GetAddrInfo in
+ t/50resolver.t
+ * Remove the anonymous Listener from the Loop if Loop->listen fails
+ - RT66168
+ * Supply LocalPort => 0 to IO::Socket::INET constructor explicitly
+ during testing
+
+0.39 CHANGES:
+ * Added IO::Async::Notifier 'notifier_name' parameter, which may be
+ used in debugging code in a later version
+ * Added IO::Async::Stream on_write_eof event
+ * Complain about unrecognised keys in IO::Async::Loop->watch_io and
+ IO::Async::Stream->write
+
+ BUGFIXES:
+ * Don't claim on_hangup supported except on those places we know it
+ will be (Linux, FreeBSD >= 8.0)
+ * Fixed race condition in t/41detached-code.t
+ * Fixed race condition in IO::Async::Function
+
+0.38 ADDITIONS:
+ * IO::Async::Function
+ * IO::Async::Loop->notifiers accessor
+
+ CHANGES:
+ * Symbolic flags in IO::Async::Resolver as convenience for commonly
+ used flag constants
+ * Distribution now uses Test::Fatal rather than Test::Exception
+ * Resolver is now a subclass of Function, not DetachedCode
+
+ BUGFIXES:
+ * More robust detection of Socket vs Socket::GetAddrInfo
+ * Portability fix for ChildManager's FD_CLOEXEC flag
+
+0.37 ADDITIONS:
+ * Handle->close_read, ->close_write
+ * Stream on_read_eof event
+ * extract_addrinfo conveniences for 'inet', 'inet6' and 'unix'
+
+ CHANGES:
+ * Allow Process filehandles to set up plain pipes without read/write
+ behaviour on the associated Stream
+ * Renamed Loop->unpack_addrinfo to ->extract_addrinfo
+ * Prepare for Socket::getaddrinfo() in core; prefer it to
+ Socket::GetAddrInfo::getaddrinfo()
+
+0.36 ADDITIONS:
+ * IO::Async::Process
+
+ CHANGES:
+ * Allow prequeuing of ->write data in Stream
+ * Check that signal handling remains properly deferred in LoopTests
+ * Miscellaneous documentation and examples updates
+
+ BUGFIXES:
+ * RT 64558 - getaddrinfo() returns duplicate addresses for localhost
+ * Don't rely on having NI_NUMERICSERV
+
+0.35 ADDITIONS:
+ * Loop->unpack_addrinfo
+
+ CHANGES:
+ * Recognise 'inet' and 'unix' as socket families
+ * Recognise 'stream', 'dgram' and 'raw' as socket types
+ * Recognise nicer HASH-based addrinfo layout in ->connect and
+ ->listen
+ * Listener now has on_stream / on_socket as full events, not just
+ CODEref parameters
+ * Make Resolver->getaddrinfo try synchronously if given numeric names
+ * Make Resolver->getnameinfo run synchronously if given
+ NI_NUMERICHOST|NI_NUMERICSERV flags
+ * Try to combine small data buffers from Stream->write calls if
+ possible
+
+ BUGFIXES:
+ * Linefeed in die case of getaddrinfo_hash to preserve exeception
+ string
+ * Deconfigure Protocol->transport after it is closed
+
+0.34 ADDITIONS:
+ * New Notifier methods ->_replace_weakself, ->maybe_invoke_event,
+ ->maybe_make_event_cb
+ * New Protocol method ->connect
+ * New subclass Protocol::LineStream
+ * Direct Resolver->getaddrinfo and ->getnameinfo methods
+
+ CHANGES:
+ * New Protocol::Stream->new( handle => $io ) parameters, which
+ creates an IO::Async::Stream to use as a transport
+ * Renamed Loop->detach_child to Loop->fork
+ * Pass errno values into ->connect on_connect_error and
+ ->listen on_listen_error
+ * Support timeouts on Resolver operations
+ * Allow direct access to Resolver via Loop->resolver
+
+ BUGFIXES:
+ * Make sure Protocol::Stream handles writersub and on_flush callback
+
+0.33 ADDITIONS:
+ * Allow watching child PID 0, to capture every child process exit
+ * $loop->time accessor
+ * Stream->write( sub { ... } ) dynamic stream generation
+ * Stream->write( $data, on_flush => sub { ... } ) callback
+
+ CHANGES:
+ * IO::Async::Loop->new magic constructor now caches the loop; useful
+ for wrapping modules, other event system integration, etc..
+
+0.32 ADDITIONS:
+ * IO::Async::Timer::Absolute
+ * Listener accessors for ->sockname, ->family, ->socktype
+
+ CHANGES:
+ * Implement and document Handle's want_{read,write}ready parameters
+ * Rearranged documentation for Notifier subclasses; new EVENTS
+ sections
+ * Correct location for #io-async channel on irc.perl.org
+
+0.31 ADDITIONS:
+ * Delegate Protocol->close method and on_closed continuation to its
+ transport object
+ * Stream->new_for_stdin, ->new_for_stdout, ->new_for_stdio
+ * Support Listener->new( handle => $fh )
+ * IO::Async::PID notifier subclass
+
+ CHANGES:
+ * Better documentation of Listener and Connector addr and addrs
+ arguments
+
+ BUGFIXES:
+ * INADDR_ANY/INADDR_LOOPBACK fixes inside BSD jails with restricted
+ networking
+
+0.30 ADDITIONS:
+ * Added IO::Async::Socket
+ * Added IO::Async::Protocol and ::Protocol::Stream
+ * Added on_stream and on_socket continuations for $loop->connect and
+ Listener
+
+ CHANGES:
+ * Emulate socketpair(AF_INET,...)
+ * Allow IO::Async::Stream 's read_len and write_len to be configured
+ per-instance
+ * Allow a Stream object without an on_read handler
+
+ BUGFIXES:
+ * Cope with exceptional-state sockets in Loop::Poll
+
+0.29 CHANGES:
+ * Don't require 'CODE' refs for callbacks/continations; this allows
+ the use of CODEref objects, &{} operator overloads, or other things
+ that are callable
+ * Implement 'read_all' and 'write_all' options on IO::Async::Stream
+ * Allow IO::Async::Stream subclasses to override on_closed
+
+ BUGFIXES:
+ * Work around some OSes not implementing SO_ACCEPTCONN
+ * Ensure Handle's on_read_ready/on_write_ready callbacks also take a
+ $self reference
+
+0.28 BUGFIXES:
+ * Ensure that Timer->start returns $self even when not in a Loop
+ * Accept bare GLOB refs as IO::Async::Listener handles; upgrade them
+ to IO::Socket refs if required
+ * Applied documentation patch from RT 55375 - thanks to
+ Chris Williams
+
+0.27 CHANGES:
+ * Implement 'autoflush' option on IO::Async::Stream
+
+ BUGFIXES:
+ * Avoid $_ breaking stored signal handler references when invoking
+ them
+ * Ignore EINTR from sysread/syswrite
+ * More reliable socket address tests - don't rely on uninitialised
+ padding bytes between struct members
+
+0.26 BUGFIXES:
+ * Connect to INADDR_LOOPBACK rather than INADDR_ANY during
+ t/24listener.t; hopefully fixes FAILs on OpenBSD
+ * Fix IO::Async::Stream during combined read/write-ready of a closed
+ stream
+
+0.25 CHANGES:
+ * Accept 'stream'/'dgram'/'raw' as symbolic shortcuts for socket
+ types in connect/listen operations - avoids 'use Socket'
+ * Accept IO::Handle-derived objects in ChildManager setup keys as
+ well as raw GLOB refs
+
+ BUGFIXES:
+ * Various changes to test scripts to hopefully improve portability or
+ reliability during smoke tests
+
+0.24 ADDITIONS:
+ * Timer subclasses - Countdown and Periodic
+ * Idleness event watching via low-level 'watch_io/unwatch_io' methods
+ and higher-level 'later' method
+ * Added the missing 'unwatch_child' method
+ * Shareable acceptance testing suite for IO::Async::Loop subclasses
+ for better testing in subclass implementations
+
+ CHANGES:
+ * More future-proof API version checking for subclasses - requires
+ subclasses to declare their version.
+ ### pre-0.24 Loop subclasses are no longer compatible. ###
+ * Entirely remove the need to $loop->enable_childmanager by calling
+ waitpid() in 'watch_child'.
+
+0.23 CHANGES:
+ * Rearranged IO::Async::Listener to be a constructable Notifier
+ suclass
+ * Allow Signal, Timer and Listener to act as base classes as well as
+ standalone with callbacks
+ * Renamed IO::Async::Loop::IO_Poll to ::Poll; created transparent
+ backward-compatibility wrapper
+
+0.22 CHANGES:
+ * Added tcp-proxy.pl example
+ * More documentation on IO::Async::Notifier subclass-override methods
+ * Documented that IO::Async::MergePoint is just an Async::MergePoint
+ * Various small updates to keep CPANTS happy
+
+ BUGFIXES:
+ * Don't test Async::MergePoint locally as it's now a separate dist,
+ and the tests here were reporting false negatives.
+
+0.21 CHANGES:
+ * Added "use warnings" to all modules
+ * Created Notifier->configure method to allow changing properties of
+ a Notifier or subclass after construction
+ * New 'examples' dir with some small example scripts
+
+ BUGFIXES:
+ * More robust timing tests to avoid some spurious test failures due
+ to busy testing servers or other non-issues
+
+0.20 CHANGES:
+ * Major reworking of underlying Loop implementation:
+ + Unified low-level IO, timer and signal watches as callbacks
+ + Split IO handle parts of Notifier into new IO::Async::Handle
+ class
+ + Created Timer and Signal subclasses of Notifier
+
+ These changes will require a compatible upgrade to the underlying
+ Loop implementation.
+
+ * Hide SignalProxy and TimeQueue from CPAN's indexer, as they are
+ internal-only details that don't need exposing there.
+ * Loop magic constructor now warns if a specifically-requested class
+ is not available
+ * Allow multiple attachment of signals via Loop->attach_signal or new
+ Signal objects
+
+0.19 CHANGES:
+ * Allow control of Sequencer's pipelining
+ * Documentation fixes
+ * Allow Loop->run_child to take a 'setup' array
+ * Added 'setuid', 'setgid' and 'setgroups' child setup operations
+ * Support 'on_notifier' in Loop->listen
+
+ BUGFIXES:
+ * carp before return in Stream->write so it actually prints
+ * Ensure Streams still work after being closed and reopened by
+ ->set_handle
+ * If IO::Socket->new() fails, try again with generic ->socket
+ (makes IPv6 work on platforms without IO::Socket::INET6)
+
+0.18 CHANGES:
+ * Allow Sequencer to be a base class as well as using constructor
+ callbacks
+ * Use signal names from Config.pm rather than relying on POSIX.pm.
+ Covers more signals that way
+
+ BUGFIXES:
+ * Gracefully handle accept() returning EAGAIN
+ * Fixed handling of IO::Socket->getsockopt( SOL_SOCKET, SO_ERROR )
+
+0.17 CHANGES:
+ * Added Stream->close_when_empty and ->close_now. Added docs
+ * Added OS abstractions of socketpair() and pipe()
+ * Many documentation changes and updates
+
+ BUGFIXES:
+ * Properly handle stream read/write errors; close immediately rather
+ than deferring until empty.
+ * Various CPAN testers somketest bug fixes
+ * Fixed http://rt.cpan.org/Ticket/Display.html?id=38476
+
+0.16 ADDITIONS:
+ * Loop->requeue_timer()
+ * Magic constructor in IO::Async::Loop which tries to find the best
+ subclass
+ * 'chdir' and 'nice' ChildManager operations
+
+ CHANGES:
+ * Make sure that top-level objects are refcount-clean by using
+ Test::Refcount, and Scalar::Util::weaken()
+
+ BUGFIXES:
+ * Keep perl 5.6.1 happy by not passing LocalPort => 0 when
+ constructing IO::Socket::INETs
+ * Pass the Type option to IO::Socket::INET constructor in test
+ scripts
+
+0.15 REMOVALS:
+ * IO::Async::Set subclasses and IO::Async::Buffer have now been
+ entirely removed.
+
+ CHANGES:
+ * Support handle-less IO::Async::Sequencer, like ::Notifier
+ * Set SO_REUSEADDR on listening sockets by default
+ * Allow Loop->listen() on a plain filehandle containing a socket
+ * No longer any need to explcitly call Loop->enable_childmanager
+
+ BUGFIXES:
+ * IO::Async::Loop->_adjust_timeout actually works properly
+ * Notifier->close() only runs on_closed callback if it actually
+ closed - allows for neater cross-connected Notifiers
+ * Made Notifier->want_{read,write}ready more efficient
+ * Notifier->close() on a child notifier works
+ * Loop->listen() should take the first successful address, rather
+ than trying them all
+
+0.14 REMOVALS:
+ * IO::Async::Set subclasses and IO::Async::Buffer are now completely
+ deprecated. Any attempt to use them will fail immediately.
+
+ ADDITIONS:
+ * 'keep' ChildManager operation
+ * IO::Async::Test::wait_for_stream()
+ * Loop->listen()
+ * IO::Async::Sequencer class
+
+ CHANGES:
+ * Support dynamic swapping of temporary 'on_read' handlers in Stream
+ * Now requires Socket::GetAddrInfo >= 0.08
+ * Further shortcuts in ChildManager setup keys - IO references and
+ simple string operation names
+ * Support handle-less IO::Async::Notifiers that have IO handles added
+ to them later
+ * Allow 'setup' key to Loop->detach_code()
+ * Various documentation updates
+
+ BUGFIXES:
+ * Allow the same filehandle to be 'dup'ed more than once in
+ ChildManager
+
+0.13 CHANGES:
+ * Flush all awaiting data from Stream when it becomes writeready
+ * Supply a real IO::Async::Test module to allow testing in 3rd party
+ distros
+ * Various documentation fixes
+
+ BUGFIXES:
+ * Don't rely on STDOUT being writable during test scripts
+
+0.12 CHANGES:
+ * Allow Notifiers that are write-only.
+ * Added ChildManager->open and ->run; with ->open_child and
+ ->run_child on the containing Loop.
+ * Moved IO::Async::Loop::Glib out to its own CPAN dist, to
+ simplify Build.PL and testing scripts
+
+ BUGFIXES:
+ * Make sure to "use IO::Socket" in IO::Async::Connector
+ * Pass 'socktype' argument to ->connect during testing
+
+0.11 INCOMPATIBLE CHANGES:
+ * Renamed IO::Async::Set::* to IO::Async::Loop::* - provided
+ backward-compatibility wrappers around old names.
+ IO::Async::Set::GMainLoop has become IO::Async::Lib::Glib
+ * Renamed IO::Async::Buffer to IO::Async::Stream - provided backward-
+ compatibility wrapper around old name.
+ * Loop->get_childmanager() and ->get_sigproxy() no longer allowed
+
+ CHANGES:
+ * Extended ->loop_once() and ->loop() feature out to all
+ IO::Async::Loop classes
+ * Added IO::Async::Resolver and IO::Async::Connector, plus Loop
+ integration
+ * Allow write-only IO::Async::Notifiers that have no read handle or
+ readiness callback.
+
+0.10 INCOMPATIBLE CHANGES:
+ * Renamed events and methods in IO::Async::Notifier to better fit the
+ naming scheme of normal Perl handles. Backward-compatibility hooks
+ are currently provided, but will be removed in a later release. Any
+ code using the old names should be updated
+
+ CHANGES:
+ * Allow DetachedCode to have multiple back-end worker processes.
+ * Control if a back-end worker exits when the code "die"s
+ * Added 'close()' method on Notifiers/Buffers. Sensible behaviour on
+ buffers with queued data to send
+ * Reset %SIG hash in ChildManager->detach_child()
+
+ BUGFIXES:
+ * Clean up temporary directory during testing
+ * Shut down DetachedCode workers properly on object deref
+ * Better handling of borderline timing failures in t/11set-*.t
+ * Close old handles before dup2()ing new ones when detaching code
+ * Various other minor test script improvements
+
+0.09 CHANGES:
+ * Added TimeQueue object and integration with IO::Async::Set and
+ subclasses.
+ * Added MergePoint object
+ * Added 'on_closed' callback support to IO::Async::Notifier
+
+ BUGFIXES:
+ * Don't depend on system locale when checking string value of $!
+ * Fixed test scripts to more closely approximate real code behaviour
+ in the presence of poll() vs. deferred signal delivery
+
+0.08 CHANGES:
+ * Added ChildManager->detach_child() method
+ * Added DetachedCode object
+
+ BUGFIXES:
+ * Better tests for presence of Glib to improve test false failures
+ * More lenient times in test script 11set-IO-Poll-timing to allow for
+ variances at test time
+ * Avoid bugs in post_select()/post_poll() caused by some notifier
+ callbacks removing other notifiers from the set
+
+0.07 BUGFIXES:
+ * Avoid race condition in t/30childmanager.t - wait for child process
+ to actually exit
+ * Avoid race condition in IO::Async::ChildManager->spawn() by waiting
+ for SIGCHLD+pipe close, rather than SIGCHLD+pipe data
+
+0.06 CHANGES:
+ * Allow 'env' setup key to ChildManager->spawn() to change the
+ child's %ENV
+ * Updated the way some of the ->spawn() tests are conducted. There
+ seems to be massive failures reported on cpantesters against 0.05.
+ These changes won't fix the bugs, but should assist in reporting
+ and tracking them down.
+
+ BUGFIXES:
+ * Don't rely on existence of /bin/true - test for /usr/bin/true as
+ well, fall back on "$^X -e 1"
+ * Avoid kernel race condition in t/32childmanager-spawn-setup.t by
+ proper use of select() when testing.
+
+0.05 CHANGES:
+ * Added ChildManager object
+ * Added singleton storage in IO::Async::Set to store a SignalProxy or
+ ChildManager conveniently
+
+ BUGFIXES:
+ * Workaround for a bug in IO::Poll version 0.05
+
+0.04 CHANGES:
+ * Added dynamic signal attach / detach methods to SignalProxy
+ * Buffer now has on_read_error / on_write_error callbacks for
+ handling IO errors on underlying sysread()/syswrite() calls
+
+0.03 CHANGES:
+ * No longer build_requires 'Glib' - print a warning if it's not
+ installed but carry on anyway.
+ * IO_Poll->loop_once() now returns the result from the poll() call
+ * Added concept of nested child notifiers within Notifier object
+
+ BUGFIXES:
+ * Fix to test scripts that call IO_Poll's loop_once() with a timeout
+ of zero. This can cause a kernel race condition, so supply some
+ small non-zero value instead.
+
+0.02 INCOMPATIBLE CHANGES:
+ * Event methods/callback functions now called "on_*" to distinguish
+ them
+ * Callback functions now pass $self as first argument to simplify
+ called code
+
+ CHANGES:
+ * Improved POD in Notifier.pm and Buffer.pm
+
+ BUGFIXES:
+ * GMainLoop.pm - return 1 from callbacks so that glib doesn't remove
+ our IO sources
+ * GMainLoop.pm - make sure re-asserting want_writeready actually adds
+ the IO source again
+
+0.01 First version, released on an unsuspecting world.
+