ChangeLog,v 1.32 2009-04-05 19:32:34 lacos Exp

Version: lbzip2-0.15
Focus:   Minor bugfixes
Date:    05-Apr-2009
Changes: A bug has been fixed where the single-worker decompressor could
         theoretically omit to decompress the last part of the compressed input
         and wrongfully signify premature EOF instead. In this release,
         logically independent buffer sizes are detached from each other.
         Several buffer sizes should be more IO-friendly now. The splitter
         block size of the multiple-workers decompressor was recalculated; an
         effort was made to deduce it formally in comments. The
         "malloc_trace.pl" script tracks peak memory usage. The documentation
         was refined.

Version: lbzip2-0.14
Focus:   Major bugfixes
Date:    15-Mar-2009
Changes: The single-worker decompressor's multiplexer, while passing back all
         accrued released input slots to the splitter, wrote out at most one
         decompressed sub-block per one iteration of its outermost loop. In
         case of a slowly progressing muxer, this could lead to skyrocketing
         memory allocation on part of the worker. Now the SWD's muxer writes
         out all accrued decompressed sub-blocks per iteration. The
         documentation has been updated. The build system has received a
         minuscule portability improvement.

Version: lbzip2-0.13
Focus:   Code cleanup
Date:    28-Jan-2009
Changes: Besides some code cleanup, various portability and other workarounds
         were introduced to cope with bugs in C libraries, shells, and upstream
         bzip2.

Version: lbzip2-0.12
Focus:   Minor feature enhancements
Date:    26-Jan-2009
Changes: In this release the shell script test.sh tests the installed instance
         of lbzip2, which can be different from the currently built one. pbzip2
         is not a requirement for testing anymore, but test.sh will try to
         measure its performance if it's available. The same applies to the
         bzip2 module of 7za (from p7zip). Some GNU/Linux specific hints on
         enabling SUSv2 conformance (which is requried for building and
         testing) were added to the README.

Version: lbzip2-0.11
Focus:   Minor feature enhancements
Date:    21-Jan-2009
Changes: This release adds support for testing by end-users, in a portable way.

Version: lbzip2-0.10
Focus:   Minor bugfixes
Date:    18-Jan-2009
Changes: Testing on a 128-core HP SuperDome by a volunteering user showed a
         known bottleneck in the multiple-workers decompressor to be
         significant on many-core machines: whenever there were less input
         blocks than cores, the work was distributed unevenly. Hence, the
         splitter-to-workers queue of "scan and decompress" tasks was replaced
         with two queues, a low priority, splitter-to-workers one of "scan"
         tasks, and a high priority, workers-to-workers one of "decompress"
         tasks. Alas, this also increased the number of context switches. The
         new worker broadcast conditions were formally proven in the comments.

Version: lbzip2-0.09
Focus:   Minor feature enhancements
Date:    06-Jan-2009
Changes: Now the Makefiles, with the help of the standard getconf utility,
         select a programming environment, if there is one, in which large
         files are supported.

Version: lbzip2-0.08
Focus:   Code cleanup
Date:    04-Dec-2008
Changes: In the multiple-workers decompressor, the tail pointer of the
         splitter-to-workers queue proved to be private to the splitter.
         Accordingly, said pointer was eliminated as a shared resource,
         simplifying the code.

Version: lbzip2-0.07
Focus:   Documentation
Date:    29-Nov-2008
Changes: A manual page using the man macro package was added. The README file
         describes the compressed output and why there is only one exit status
         for all types of errors. A more portable Makefile was created. A
         little code was cleaned up.

Version: lbzip2-0.06a
Focus:   Documentation
Date:    29-Sep-2008
Changes: A class of valid bz2 files the multiple-workers decompressor (MWD)
         possibly refuses has been described in the Bugs section of the README.
         By concatenating empty bzip2 streams (each having a length of 14
         bytes) and optionally inserting such a sequence before, after or
         between non-empty bzip2 streams, the size of the input block that
         unavoidably contains an entire bzip2 block header can be increased
         without bound. This invalidates the assumption the MWD is based on.
         However, neither bzip2 nor lbzip2 creates such files, and bz2 file
         sets that do defeat the MWD when catenated should be rare.

Version: lbzip2-0.06
Focus:   Minor feature enhancements
Date:    16-Sep-2008
Changes: When decompressing with a single worker thread, lbzip2 was previously
         45% slower than standard bzip2. The new, dedicated single-worker
         decompressor is only 3% slower, and provides input and output
         buffering, which is useful in pipelines and on network file systems.
         Hence using lbzip2 incurs virtually no performance penalty over bzip2
         even on a single-core machine. A script was added to help automated
         testing. Some thread notification conditions have been cleaned up. In
         this release, lbzip2 compresses an empty file to a valid bzip2 stream
         instead of an empty file.

Version: lbzip2-0.05
Focus:   Major feature enhancements
Date:    10-Sep-2008
Changes: The decompressor was redesigned: all CPU-bound operations were moved
         into the worker threads, so that now, besides the muxer, the splitter
         is purely I/O-bound too. Lbzip2 supports tracing its memory allocation
         with the new "-t" option. Both the compressor and decompressor were
         retested.

Version: lbzip2-0.04
Focus:   Major feature enhancements
Date:    01-Sep-2008
Changes: Decompression was extracted from the split-work-multiplex skeleton
         into a separate module. Compression was added. The project has been
         renamed to lbzip2. The reordering of processed sub-blocks happens
         entirely in the multiplexer now, changing the time complexity from
         O(log n) to O(1) inside the critical section between workers and the
         muxer. The command line conforms to utility syntax guidelines. Lbzip2
         queries the number of online processors if sysconf() supports it.
         Block serial numbers have fixed 64 bit width. The README file was
         updated. The development status has been advanced to Beta.

Version: lbunzip2-0.03
Focus:   Major bugfixes
Date:    20-Aug-2008
Changes: After running lbunzip2 on the bz2 test material of CERT-FI 20469, a
         bug was fixed where a worker (decompressor) thread could get into an
         infinite loop, spinning until finally outrunning the multiplexer
         thread, then consuming all available memory and exiting.

Version: lbunzip2-0.02
Focus:   Major bugfixes
Date:    18-Aug-2008
Changes: Version 0.01 didn't throttle the decompressor threads when the
         multiplexer thread was blocked on the write() system call, thus memory
         consumption could grow indefinitely. This is fixed now. Some
         performance testing was done on five multicore machines (Alpha,
         Athlon, Itanium, Sparc, and Xeon). The README file was rewritten.

Version: lbunzip2-0.01
Focus:   Initial freshmeat announcement
Date:    13-Aug-2008
Changes: Initial freshmeat announcement.
