Release Notes: Uninitialized fields were accessed on the stack in a structure assignment expression. Theoretically, this might have entailed read accesses to trap representations. Since those fields weren't initialized because they weren't used at all in the first place, this portability bug was fixed by introducing a dedicated structure without those fields.
Release Notes: Non-regular input files passed on the command line are skipped (symbolic links are followed, because lbzip2 doesn't remove input files). Instead of exiting, lbzip2 skips input files passed on the command line that it cannot open, or for which it cannot create the corresponding output files. Standard output is also closed with --stdout and file operands, not just in filter mode. Signal handling has been cleaned up; lbzip2 can now be interrupted during skipping many files in a row. Writing an error message to a broken pipe doesn't result in an incomplete output file anymore.
Release Notes: Features like settable compression block size and working with file operands were implemented. lbzip2 can now be considered a multi-threaded, command-line compatible replacement for bzip2 in most situations. Lbzip2 never deletes or overwrites files, however. The workaround for an earlier GNU getconf bug was extended to EGLIBC in the large file support build script. The development status was degraded to beta.
Release Notes: A bug has been fixed where the single-worker decompressor could theoretically skip decompression of the last part of the compressed input and incorrectly signify premature EOF instead. In this release, logically independent buffer sizes are detached from each other. Several buffer sizes should be more I/O-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.
Release Notes: 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.
Release Notes: Besides some code cleanup, various portability and other workarounds were introduced to cope with bugs in C libraries, shells, and upstream bzip2.
Release Notes: 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 required for building and testing) were added to the README.
Release Notes: This release adds support for testing by end-users in a portable way.
Release Notes: Testing on a 128-core HP SuperDome showed a known bottleneck in the multiple-workers decompressor to be significant on many-core machines: whenever there were fewer 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.
Release Notes: 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.