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.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 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.