Crossroads I/O Release Notes
----------------------------

This file documents the major changes in between releases of Crossroads
I/O. For a detailed list of changes please refer to Git history, or the
ChangeLog file included with your distribution of Crossroads.

Release 1.2.0 (13 Jun 2012)
---------------------------

This release introduces the topic (wildcard) filtering mechanism.
Aside of that it fixes several problems with 1.1.0.

Backward incompatible changes::
* xs.h header was moved to xs subdirectory to prevent clash with XenStore
  header; use #include <xs/xs.h> from now on
* Expired survey returns ETIMEDOUT instead of EAGAIN

New features::
* Topic filter implemented

Bugfixes::
* libzmq and tests MSVC projects added to the distribution
* Do not crash when multiple peers connect to PAIR socket
* Opening plug-in directory made more robust
* Use global event to synchronise signaler creation on Windows
* Polling on SURVEYOR socket implemented
* Properly handle infinite timeout in zmq_poll()

Build::
* Install plugins under $(libdir) to simplify multi-arch packaging
* Issues a warning on unsupported architectures instead of failing
* Different minor improvements

Self tests::
* test for multiple peers on PAIR socket added


Release 1.1.0 (12 May 2012)
---------------------------

This release adds several new features as well as fixing large amount of bugs.

Backward incompatible changes::
* xs_bind() and xs_connect() return non-negative number (endpoint ID) in
  the case of success, as opposed to zero returned in previous versions

New features::
* Survey messaging pattern added which allows to send request (survey) to
  multiple peers and get response from them; new socket types: SURVEYOR,
  XSURVEYOR, RESPONDENT, XRESPONDENT
* xs_shutdown() function added that allows to shut down specific parts of
  the topology without the need to close the socket
* 0MQ/2.1 wire format compatibility for PUB/SUB implemented; it can be switched
  on using XS_PROTOCOL socket option
* EXPERIMENTAL: Infrastructure for plugins added; at the moment only pluggable
  filters for PUB/SUB are supported

Bugfixes::
* Internal handles are not inherited to child processes on Windows
* Properly handle very large messages on platforms with small size_t type
* Bug in command throttling fixed
* Dropping of first message by (E)PGM transport fixed
* When invalid connection string is used, xs_connect() and xs_bind() return
  an error rather than cause assertion
* Prototype definition for xs_init() fixed
* Bug in async connection algorithm fixed
* Premature reset_pollout fixed preventing hang ups in certain situations
* Multiple fixes handling the situation when OS runs out of file descriptors
* Bug in prefix filter compaction logic fixed
* Truncate the message when it is sent to XSUB
* Fix of a critical bug in zmq_getsockopt in 0MQ compatibility layer
* Fix of intermittent assertion failure on laggy networks
* Set CLOEXEC flag on fds used by signaler
* Fix identity exchange for inproc transport
* Check connction string length before manipulating it
* Accept ECONNRESET from close()

Optimisation::
* Atomic operations on ARMV7A architecture used instead of mutexes
* GCC built-in atomic opserations used if possible
* Superfluous RDTSC instruction is not issued when command throttling is
  turned off
* Initialise fd_set once for signaler_t object rather then every time
* Improve efficiency of time measurement in tight loops

Build::
* --disable-plugins option added
* Improvements in how the polling mechanism is selected
* The build system now relies more on feature checks and does less guesswork
  based on what OS it is compiling for
* Improve POSIX threads detection and configuration
* Honour --with-poller option for synchronous polling
* Define _GNU_SOURCE in addition to the __BSD_VISIBLE on freebsd-like hosts
* Modified the configure.ac file according to autoconf best practices
* Various warnings generated by SunStudio fixed

Self tests::
* Several new tests added to the test suite
* Tolerances for timeouts in test were increased so that the tests can succeed
  even on slow or overloaded hardware


Release 1.0.1 (29 March 2012)
-----------------------------

This is a bug fix release, with the only new addition being the XS_KEEPALIVE
socket option for enabling TCP keepalives.

New features::
* XS_KEEPALIVE options added

Bugfixes::
* Fix race condition in find_endpoint
* Small ommision in session creation mechanism
* Reconnect test fixed
* OpenVMS tests fixed
* Send identities on reconnect
* Make REQ session state machine aware of reconnections
* Error handling during connect
* Ignore distorted timeouts on Windows in debug mode
* Add long comment about security problem on Windows platform
* Signaler's global event is now accessible by everyone
* Handle duplicate identities decently
* wireformat test added
* Fixed issue LIBZMQ-345 - race condition in ctx.socket/term allows segfault
* Add missing <sys/types.h> header.
* Use strncpy() instead of strcpy().
* Documentation updates.


Release 1.0.0 (15 March 2012)
-----------------------------

Initial release.  Changes listed here are as compared to libzmq release
3.1.

New features::

* The io_threads argument has been removed from xs_init(), and the default
  number of I/O threads per context is now 1.
* Context options added - see xs_setctxopt(3):
  - The XS_IO_THREADS context option allows the user to specify the size of
    the worker thread pool.
  - The XS_MAX_SOCKETS context option allows the user to specify the
    maximum number of sockets that can exist in parallel within a context.
* Allow setting the source address for TCP connections - see xs_tcp(7).
* ZeroMQ drop-in compatibility mode, enabled by the --enable-libzmq option
  to configure. This is a binary compatible emulation of the ZeroMQ 2.1.11
  API, for details see zmq(7).

Bugfixes::

* Fix pgm_receiver.cpp: zmq_assert (pending_bytes == 0). (LIBZMQ-205)
* Fix assertion in pgm_sender_t::plug(). (LIBZMQ-303)
* Race condition in zmq_term() fixed.
* Message loss when a SUB socket disconnects fixed.
* Fix data loss for PUB/SUB and unidirectional transports. (LIBZMQ-268)
* Bug in linger implementation fixed.
* Fix IPC transport domain socket stream file not being removed when
  connection is closed.
* Removal of pipe from dist_t fixed.
* Only use AI_V4MAPPED if defined, and don't use it on FreeBSD.

Optimisation::

* Several optimisations to reduce the memory size of PUB/SUB subscription
  map.
* Avoid one extra call to poll() when there are no more data to send.

Build::

* MSVC build updated to use MSVC2010 instead of MSVC2008.
* configure prints out a summary of XS configuration.

Self tests::

* Many more tests have been added, see the tests/ subdirectory.
* The self tests can now be run from a MSVC build, see the "tests" project.

