Skip to content

feat: add zxc compression support#362

Open
hellobertrand wants to merge 7 commits into
mhx:mainfrom
hellobertrand:zxc-compressor
Open

feat: add zxc compression support#362
hellobertrand wants to merge 7 commits into
mhx:mainfrom
hellobertrand:zxc-compressor

Conversation

@hellobertrand
Copy link
Copy Markdown

@hellobertrand hellobertrand commented Apr 18, 2026

Adds zxc as a new compression backend (type ID 8), available via -C zxc[:level=N].

Design

Uses the buffer-level API (zxc_compress / zxc_decompress)
Runtime metadata via zxc_version_string(), zxc_min/max/default_level()

Options

level: compression level (zxc_min_level()..zxc_max_level())

Build

Optional via TRY_ENABLE_ZXC (ON by default)
Detected via pkg-config (libzxc >= 0.11.0)
Available through vcpkg with a version override (baseline has 0.7.3, override pins 0.11.0)
Requires zxc ≥ 0.11.0 for the block-level API and runtime metadata functions.

@hellobertrand hellobertrand mentioned this pull request Apr 18, 2026
Copy link
Copy Markdown
Owner

@mhx mhx left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thanks for your PR, @hellobertrand!

This already seems to be in pretty good shape and I'm happy to integrate it under a few conditions:

  • It should be rock-solid on all platforms supported by DwarFS and the format should be completely platform-independent.
  • The decompression code must guarantee to always be able to read any compressed blobs generated with v0.10.0 or later. (I'm sure that's the case.)
  • The code size of the (compressed) statically linked binaries should not increase significantly. I'm assuming this also won't be the case. But integrating brotli was a very bad idea in this regard due to its compiled-in dictionaries.

It is quite possible that this PR is going to stay unmerged for a while. That is mainly because I've made a whole bunch of changes to the CI config in my work branch and I'll need to update those configs to also build cross-compiled versions of zxc before giving this a full spin. Just saying that if this hangs around for a few weeks, it's not because I'm not interested. :)

Comment thread src/compression/zxc.cpp Outdated
Comment thread src/compression/zxc.cpp Outdated
Comment thread src/compression/zxc.cpp Outdated
@mhx
Copy link
Copy Markdown
Owner

mhx commented Apr 18, 2026

One question regarding building the zxc libs for static releases. I think the following config should be fine for both native and cross-compiled libs:

cmake -DCMAKE_INSTALL_PREFIX="$INSTALL_DIR" \
      -DBUILD_SHARED_LIBS=OFF \
      -DBUILD_STATIC_LIBS=ON \
      -DZXC_NATIVE_ARCH=OFF \
      -DZXC_ENABLE_LTO=OFF \
      -DZXC_BUILD_CLI=OFF \
      -DZXC_BUILD_TESTS=OFF

Disabling -march=native is obvious. LTO flags are already injected by the build environment during the library build, depending on the build config, and I'm reasonably sure this would work fine after briefly scanning the CMakeLists.txt. (I might turn CLI / tests back on after realizing that they don't really contribute to build time.)

@mhx
Copy link
Copy Markdown
Owner

mhx commented Apr 18, 2026

There's probably still a bit of work to do :)

Thread 2 received signal SIGSEGV, Segmentation fault.
[Switching to Thread 4162.4179]
0x0000000000931af0 in zxc_encode_block_glo ()
(gdb) bt
#0  0x0000000000931af0 in zxc_encode_block_glo ()
#1  0x000000000092d056 in zxc_compress_chunk_wrapper_default ()
#2  0x000000000094af5c in zxc_compress_block ()
#3  0x00000000011191b2 in dwarfs::(anonymous namespace)::zxc_block_compressor::compress (this=0x7fbb16875e60, data=...) at /workspace/src/compression/zxc.cpp:97
#4  0x0000000000c8a4f8 in dwarfs::block_compressor::compress (this=0x7fbb16950a30, data=..., metadata=...) at /workspace/include/dwarfs/block_compressor.h:65
#5  0x0000000000c8dd9a in dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >)::{lambda()#1}::operator()() (this=0x7fbb021a00a0) at /workspace/src/writer/filesystem_writer.cpp:266

That's on s390x. Can you check that zxc works correctly on big-endian / "exotic" targets?

@hellobertrand
Copy link
Copy Markdown
Author

Thanks for the thorough review, @mhx! Really appreciate you taking the time, and I'm glad to hear you're open to integrating zxc into DwarFS.

I've addressed all three points in the updated commit:

  1. Author: Restored myself as the author, as you suggested.
  2. Varint: Switched from uint32le_t to varint::encode / varint::decode, matching the brotli/flac pattern. This also removes the 4 GB limitation and is byte-order independent. That's better.
  3. checked_subspan: Extracted into a private static method using DWARFS_THROW, keeping the initializer list clean.

Regarding the s390x SEGFAULT, thank you for catching that, this is very valuable. The crash is in zxc_encode_block_glo(), which points to a big-endian issue in zxc itself. I'll investigate and fix this on the zxc side. I'll report back once I have a fix.

Regarding the static build config you mentioned:

cmake -DBUILD_SHARED_LIBS=OFF -DBUILD_STATIC_LIBS=ON \
      -DZXC_NATIVE_ARCH=OFF -DZXC_ENABLE_LTO=OFF \
      -DZXC_BUILD_CLI=OFF -DZXC_BUILD_TESTS=OFF

That looks correct to me. Disabling -march=native and LTO makes sense for cross-compiled builds, and the CLI/tests are not needed for library-only usage.

No rush on the merge at all; take whatever time you need. I'm just happy that zxc might find a home in DwarFS. Thanks again! 🙏

@mhx
Copy link
Copy Markdown
Owner

mhx commented Apr 18, 2026

Regarding the s390x SEGFAULT, thank you for catching that, this is very valuable. The crash is in zxc_encode_block_glo(), which points to a big-endian issue in zxc itself. I'll investigate and fix this on the zxc side. I'll report back once I have a fix.

FWIW, I saw the same crash on ppc64 and ppc64le, so I'm not entirely sure it's a big-endian only thing. Didn't have time to look into it, though.

Regarding the static build config you mentioned:

cmake -DBUILD_SHARED_LIBS=OFF -DBUILD_STATIC_LIBS=ON \
      -DZXC_NATIVE_ARCH=OFF -DZXC_ENABLE_LTO=OFF \
      -DZXC_BUILD_CLI=OFF -DZXC_BUILD_TESTS=OFF

That looks correct to me. Disabling -march=native and LTO makes sense for cross-compiled builds, and the CLI/tests are not needed for library-only usage.

Cool, thanks!

No rush on the merge at all; take whatever time you need. I'm just happy that zxc might find a home in DwarFS. Thanks again! 🙏

Yeah, it's always a bit of a chicken-and-egg problem. You don't really get all bugs ironed out unless you have some exposure. And unless you have that exposure and the serious bugs are ironed out, it's hard to get something integrated. zxc is not going to make it into the default configs (i.e. -l0 to -l9) for now, so it'll have to be a conscious choice by the user; and I might add a warning if the user chooses it for compression until we can be sure that it's safe for archival. But I'm happy to include it in the static binaries. From what I've seen, it adds about 50 KiB to the universal binary, which is reasonable

Comment thread src/compression/zxc.cpp Outdated
@hellobertrand
Copy link
Copy Markdown
Author

hellobertrand commented Apr 18, 2026

Thanks for the detailed report. I investigated and I think I have found the root cause and it's not endianness-related.

The crash occurs on all Linux architectures (s390x, ppc64, ppc64le) because it's a heap overflow detected by glibc's malloc.

The previous code called zxc_compress_block() with nullptr opts:

auto const csize = ::zxc_compress_block(cctx_, data.data(), data.size(),
                         compressed.data() + size_size,
                         compressed.size() - size_size, nullptr);

With nullptr, the block API falls back to the context's stored block_size = 256 KB (ZXC_BLOCK_SIZE_DEFAULT). zxc's internal buffers (chain table, literals, etc.) are allocated proportionally to this size.

When DwarFS sends a block larger than 256 KB (e.g. 4 MB with --block-size-bits=22), the compressor writes past the internal buffers -> heap corruption. glibc detects this and aborts (malloc(): corrupted top size). macOS's allocator doesn't check, so it silently corrupts memory on my dev machine.

Fix

Now we pass explicit opts with block_size = bit_ceil(data.size()), ensuring the internal buffers always fit the input:

zxc_compress_opts_t copts{};
copts.level = level_;
copts.block_size = std::max(
    std::bit_ceil(data.size()),
    static_cast<size_t>(ZXC_BLOCK_SIZE_MIN));
copts.checksum_enabled = 0;

std::bit_ceil rounds up to the next power of 2 (required by zxc's internal hash indexing).

@hellobertrand
Copy link
Copy Markdown
Author

I've also addressed this upstream for the upcoming zxc release to improve the API's safety and ease of use. The block_size parameter in zxc_compress_block will be fully optional: if it's omitted, zxc will automatically resolve the required power of two based on src_size and size its internal buffers accordingly. As an added safeguard, if an explicit block_size is provided but is smaller than src_size, the library now cleanly returns a ZXC_ERROR_BAD_BLOCK_SIZE instead of silently overflowing.

@mhx
Copy link
Copy Markdown
Owner

mhx commented Apr 18, 2026

I made a small commit locally to add zxc to the list of compressors to test in one of the unit tests:

commit 5db594d25d9d5a6f3571a3287b2bfcec9598aa92
Author: Marcus Holland-Moritz <github@mhxnet.de>
Date:   Sat Apr 18 22:18:15 2026 +0200

    test: add `zxc` to compression tests

diff --git a/test/dwarfs_test.cpp b/test/dwarfs_test.cpp
index a615882d..03f7c4e4 100644
--- a/test/dwarfs_test.cpp
+++ b/test/dwarfs_test.cpp
@@ -595,6 +595,9 @@ std::vector<std::string> const kCompressionOpts{
 #ifdef DWARFS_HAVE_LIBBROTLI
     "brotli:quality=2",
 #endif
+#ifdef DWARFS_HAVE_LIBZXC
+    "zxc:level=3",
+#endif
 };
 
 } // namespace

That gave me a whole bunch of errors during decompression. :)

They all look pretty much the same (ZXC_ERROR_OVERFLOW) so I'm only posting one for now:

[ RUN      ] dwarfs/compression_test.end_to_end/102
Exception: [zxc.cpp:187] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
Stack trace (most recent call first):
#0  0x000055d99e0263d0 in dwarfs::(anonymous namespace)::zxc_block_decompressor::decompress_frame(unsigned long) at /home/mhx/git/github/dwarfs/src/compression/zxc.cpp:187:7
#1  0x000055d99cf9daf4 in dwarfs::block_decompressor::decompress_frame(unsigned long) at /home/mhx/git/github/dwarfs/include/dwarfs/block_decompressor.h:54:19
#2  0x000055d99dc36dbe in dwarfs::block_decompressor::decompress(dwarfs::compression_type, std::span<unsigned char const, 18446744073709551615ul>) at /home/mhx/git/github/dwarfs/src/block_decompressor.cpp:47:6
#3  0x000055d99d95fb18 in dwarfs::reader::internal::(anonymous namespace)::section_wrapper::get_section_data() at /home/mhx/git/github/dwarfs/src/reader/filesystem_v2.cpp:181:9
#4  0x000055d99d95de97 in dwarfs::reader::internal::(anonymous namespace)::make_metadata(dwarfs::logger&, dwarfs::file_view const&, std::unordered_map<dwarfs::section_type, std::vector<dwarfs::internal::fs_section, std::allocator<dwarfs::internal::fs_section> >, std::hash<dwarfs::section_type>, std::equal_to<dwarfs::section_type>, std::allocator<std::pair<dwarfs::section_type const, std::vector<dwarfs::internal::fs_section, std::allocator<dwarfs::internal::fs_section> > > > > const&, dwarfs::reader::metadata_options const&, int, dwarfs::reader::mlock_mode, bool, std::shared_ptr<dwarfs::performance_monitor const> const&) at /home/mhx/git/github/dwarfs/src/reader/filesystem_v2.cpp:238:35
#5  0x000055d99d994af9 in dwarfs::reader::internal::filesystem_<dwarfs::prod_logger_policy>::filesystem_(dwarfs::logger&, dwarfs::os_access const&, dwarfs::file_view const&, dwarfs::reader::filesystem_options const&, std::shared_ptr<dwarfs::performance_monitor const> const&) at /home/mhx/git/github/dwarfs/src/reader/filesystem_v2.cpp:633:7
#6  0x000055d99d9c3799 in dwarfs::reader::internal::filesystem_common_<dwarfs::prod_logger_policy, dwarfs::reader::filesystem_v2::impl>::filesystem_common_(dwarfs::logger&, dwarfs::os_access const&, dwarfs::file_view const&, dwarfs::reader::filesystem_options const&, std::shared_ptr<dwarfs::performance_monitor const> const&) at /home/mhx/git/github/dwarfs/src/reader/filesystem_v2.cpp:1299:9
#7  0x000055d99d9c3664 in dwarfs::reader::internal::filesystem_full_<dwarfs::prod_logger_policy>::filesystem_full_(dwarfs::logger&, dwarfs::os_access const&, dwarfs::file_view const&, dwarfs::reader::filesystem_options const&, std::shared_ptr<dwarfs::performance_monitor const> const&) at /home/mhx/git/github/dwarfs/src/reader/filesystem_v2.cpp:1513:9
#8  0x000055d99d9c34ab in std::__detail::_MakeUniq<dwarfs::reader::internal::filesystem_full_<dwarfs::prod_logger_policy> >::__single_object std::make_unique<dwarfs::reader::internal::filesystem_full_<dwarfs::prod_logger_policy>, dwarfs::logger&, dwarfs::os_access const&, dwarfs::file_view const&, dwarfs::reader::filesystem_options const&, std::shared_ptr<dwarfs::performance_monitor const> const&>(dwarfs::logger&, dwarfs::os_access const&, dwarfs::file_view const&, dwarfs::reader::filesystem_options const&, std::shared_ptr<dwarfs::performance_monitor const> const&) at /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/unique_ptr.h:1070:34
#9  0x000055d99d9c33c0 in std::unique_ptr<dwarfs::reader::filesystem_v2::impl, std::default_delete<dwarfs::reader::filesystem_v2::impl> > dwarfs::detail::unique_ptr_policy<dwarfs::reader::filesystem_v2::impl>::create<dwarfs::reader::internal::filesystem_full_<dwarfs::prod_logger_policy>, dwarfs::logger&, dwarfs::os_access const&, dwarfs::file_view const&, dwarfs::reader::filesystem_options const&, std::shared_ptr<dwarfs::performance_monitor const> const&>(dwarfs::logger&, dwarfs::os_access const&, dwarfs::file_view const&, dwarfs::reader::filesystem_options const&, std::shared_ptr<dwarfs::performance_monitor const> const&) at /home/mhx/git/github/dwarfs/include/dwarfs/detail/logging_class_factory.h:47:12
#10 0x000055d99d9a4c67 in dwarfs::detail::unique_ptr_policy<dwarfs::reader::filesystem_v2::impl>::return_type dwarfs::detail::logging_class_factory::create_impl<dwarfs::reader::internal::filesystem_full_, dwarfs::detail::unique_ptr_policy<dwarfs::reader::filesystem_v2::impl>, dwarfs::prod_logger_policy, , dwarfs::os_access const&, dwarfs::file_view const&, dwarfs::reader::filesystem_options const&, std::shared_ptr<dwarfs::performance_monitor const> const&>(dwarfs::logger&, dwarfs::os_access const&, dwarfs::file_view const&, dwarfs::reader::filesystem_options const&, std::shared_ptr<dwarfs::performance_monitor const> const&) at /home/mhx/git/github/dwarfs/include/dwarfs/detail/logging_class_factory.h:85:14
#11 0x000055d99d9a4a06 in dwarfs::detail::unique_ptr_policy<dwarfs::reader::filesystem_v2::impl>::return_type dwarfs::detail::logging_class_factory::create_impl<dwarfs::reader::internal::filesystem_full_, dwarfs::detail::unique_ptr_policy<dwarfs::reader::filesystem_v2::impl>, dwarfs::debug_logger_policy, dwarfs::prod_logger_policy, dwarfs::os_access const&, dwarfs::file_view const&, dwarfs::reader::filesystem_options const&, std::shared_ptr<dwarfs::performance_monitor const> const&>(dwarfs::logger&, dwarfs::os_access const&, dwarfs::file_view const&, dwarfs::reader::filesystem_options const&, std::shared_ptr<dwarfs::performance_monitor const> const&) at /home/mhx/git/github/dwarfs/include/dwarfs/detail/logging_class_factory.h:89:14
#12 0x000055d99d9a4963 in dwarfs::detail::unique_ptr_policy<dwarfs::reader::filesystem_v2::impl>::return_type dwarfs::detail::logging_class_factory::create_unwrap<dwarfs::reader::internal::filesystem_full_, dwarfs::detail::unique_ptr_policy<dwarfs::reader::filesystem_v2::impl>, dwarfs::debug_logger_policy, dwarfs::prod_logger_policy, dwarfs::os_access const&, dwarfs::file_view const&, dwarfs::reader::filesystem_options const&, std::shared_ptr<dwarfs::performance_monitor const> const&>(dwarfs::logger&, std::type_identity<std::tuple<dwarfs::debug_logger_policy, dwarfs::prod_logger_policy> >, dwarfs::os_access const&, dwarfs::file_view const&, dwarfs::reader::filesystem_options const&, std::shared_ptr<dwarfs::performance_monitor const> const&) at /home/mhx/git/github/dwarfs/include/dwarfs/detail/logging_class_factory.h:77:12
#13 0x000055d99d9a4913 in dwarfs::detail::unique_ptr_policy<dwarfs::reader::filesystem_v2::impl>::return_type dwarfs::detail::logging_class_factory::create<dwarfs::reader::internal::filesystem_full_, dwarfs::detail::unique_ptr_policy<dwarfs::reader::filesystem_v2::impl>, std::tuple<dwarfs::debug_logger_policy, dwarfs::prod_logger_policy>, dwarfs::os_access const&, dwarfs::file_view const&, dwarfs::reader::filesystem_options const&, std::shared_ptr<dwarfs::performance_monitor const> const&>(dwarfs::logger&, dwarfs::os_access const&, dwarfs::file_view const&, dwarfs::reader::filesystem_options const&, std::shared_ptr<dwarfs::performance_monitor const> const&) at /home/mhx/git/github/dwarfs/include/dwarfs/detail/logging_class_factory.h:66:12
#14 0x000055d99d96b473 in std::unique_ptr<dwarfs::reader::filesystem_v2::impl, std::default_delete<dwarfs::reader::filesystem_v2::impl> > dwarfs::make_unique_logging_object<dwarfs::reader::filesystem_v2::impl, dwarfs::reader::internal::filesystem_full_, std::tuple<dwarfs::debug_logger_policy, dwarfs::prod_logger_policy>, dwarfs::os_access const&, dwarfs::file_view const&, dwarfs::reader::filesystem_options const&, std::shared_ptr<dwarfs::performance_monitor const> const&>(dwarfs::logger&, dwarfs::os_access const&, dwarfs::file_view const&, dwarfs::reader::filesystem_options const&, std::shared_ptr<dwarfs::performance_monitor const> const&) at /home/mhx/git/github/dwarfs/include/dwarfs/logger.h:395:10
#15 0x000055d99d95c581 in dwarfs::reader::filesystem_v2::filesystem_v2(dwarfs::logger&, dwarfs::os_access const&, dwarfs::file_view const&, dwarfs::reader::filesystem_options const&, std::shared_ptr<dwarfs::performance_monitor const> const&) at /home/mhx/git/github/dwarfs/src/reader/filesystem_v2.cpp:1606:11
#16 0x000055d99cc5fba0 in (anonymous namespace)::basic_end_to_end_test(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int, dwarfs::writer::fragment_order_mode, bool, bool, b

@mhx
Copy link
Copy Markdown
Owner

mhx commented Apr 18, 2026

Here's another problem (playing with mkdwarfs). This is interesting because it's totally non-deterministic. Sometimes I just get a leak, sometimes this:

./mkdwarfs -i /usr/include/boost -o /tmp/boost-zxc.dwarfs --force -C zxc:level=3 -S 12 --no-progress
I 22:39:28.515742 scanning "/usr/include/boost"
I 22:39:30.743042 waiting for background scanners...
I 22:39:31.037464 scanning CPU time: 15.38s
I 22:39:31.037518 assigning directory and link inodes...
I 22:39:31.074072 finalizing file inodes...
I 22:39:31.445319 saved 1.489 MiB / 143.2 MiB (1.04%) in 309/15,760 duplicate files
I 22:39:31.451380 assigning device inodes...
I 22:39:31.468188 assigning pipe/socket inodes...
I 22:39:31.484962 building metadata...
I 22:39:31.484997 building blocks...
I 22:39:31.485121 saving names and symlinks...
I 22:39:31.489175 waiting for segmenting/blockifying to finish...
I 22:39:31.552619 updating name and link indices...
*** Caught signal SIGSEGV
Stack trace (most recent call first):
#0  0x0000564b2d4920b3 in dwarfs::(anonymous namespace)::fatal_signal_handler_posix(int) at /home/mhx/git/github/dwarfs/src/util.cpp:1192:3
#1  0x00007f600916db3f at /lib64/libc.so.6
#2  (inlined)          in zxc_lz77_find_best_match at /var/tmp/portage/app-arch/zxc-0.10.0/work/zxc-0.10.0/src/lib/zxc_compress.c:176:32
#3  (inlined)          in zxc_encode_block_ghi at /var/tmp/portage/app-arch/zxc-0.10.0/work/zxc-0.10.0/src/lib/zxc_compress.c:1229:13
#4  0x00007f60098ff439 in zxc_compress_chunk_wrapper_avx2 at /var/tmp/portage/app-arch/zxc-0.10.0/work/zxc-0.10.0/src/lib/zxc_compress.c:1463:19
#5  (inlined)          in zxc_compress_chunk_wrapper at /var/tmp/portage/app-arch/zxc-0.10.0/work/zxc-0.10.0/src/lib/zxc_dispatch.c:319:33
#6  0x00007f60099546ed in zxc_compress_block at /var/tmp/portage/app-arch/zxc-0.10.0/work/zxc-0.10.0/src/lib/zxc_dispatch.c:934:21
#7  0x0000564b2d5e5435 in dwarfs::(anonymous namespace)::zxc_block_compressor::compress(dwarfs::shared_byte_buffer const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const*) const at /home/mhx/git/github/dwarfs/src/compression/zxc.cpp:103:9
#8  0x0000564b2c8ec624 in dwarfs::block_compressor::compress(dwarfs::shared_byte_buffer const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const at /home/mhx/git/github/dwarfs/include/dwarfs/block_compressor.h:65:19
#9  0x0000564b2c8c2acd in dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >)::{lambda()#1}::operator()() at /home/mhx/git/github/dwarfs/src/writer/filesystem_writer.cpp:266:25
#10 0x0000564b2c8c27c4 in void std::__invoke_impl<void, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >)::{lambda()#1}&>(std::__invoke_other, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >)::{lambda()#1}&) at /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14
#11 0x0000564b2c8c2764 in std::enable_if<is_invocable_r_v<void, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >)::{lambda()#1}&>, void>::type std::__invoke_r<void, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >)::{lambda()#1}&>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >)::{lambda()#1}&) at /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:111:2
#12 0x0000564b2c8c25e0 in void std::move_only_function<void ()>::_S_invoke<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >)::{lambda()#1}>(std::_Mofunc_base*) at /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/mofunc_impl.h:219:11
#13 0x0000564b2c50f695 in std::move_only_function<void ()>::operator()() at /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/mofunc_impl.h:184:9
#14 0x0000564b2c50f648 in void std::__invoke_impl<void, std::move_only_function<void ()>&>(std::__invoke_other, std::move_only_function<void ()>&) at /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14
#15 0x0000564b2c50f628 in std::__invoke_result<std::move_only_function<void ()>&>::type std::__invoke<std::move_only_function<void ()>&>(std::move_only_function<void ()>&) at /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:96:14
#16 0x0000564b2c50f5fc in _ZSt12__apply_implIRSt18move_only_functionIJFvvEEERSt5tupleIJEETpTnmJEEDcOT_OT0_St16integer_sequenceImJXspT1_EEE at /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/tuple:2302:14
#17 0x0000564b2c50f5b0 in decltype(auto) std::apply<std::move_only_function<void ()>&, std::tuple<>&>(std::move_only_function<void ()>&, std::tuple<>&) at /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/tuple:2313:14
#18 0x0000564b2c8c33b4 in _ZZN6dwarfs8internal18basic_worker_groupIJEE7add_jobITkNS0_6detail15forwards_to_jobISt18move_only_functionIJFvDpT_EEEEEZNS_6writer8internal12_GLOBAL__N_111raw_fsblock8compressERS2_St8optionalINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEUlvE_EEbOT_ENUlRNS4_14worker_contextEE_clESS_ at /home/mhx/git/github/dwarfs/include/dwarfs/internal/worker_group.h:216:11
#19 0x0000564b2c8c336c in _ZSt13__invoke_implIvRZN6dwarfs8internal18basic_worker_groupIJEE7add_jobITkNS1_6detail15forwards_to_jobISt18move_only_functionIJFvDpT_EEEEEZNS0_6writer8internal12_GLOBAL__N_111raw_fsblock8compressERS3_St8optionalINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEUlvE_EEbOT_EUlRNS5_14worker_contextEE_JST_EESQ_St14__invoke_otherOT0_DpOT1_ at /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14
#20 0x0000564b2c8c32fc in _ZSt10__invoke_rIvRZN6dwarfs8internal18basic_worker_groupIJEE7add_jobITkNS1_6detail15forwards_to_jobISt18move_only_functionIJFvDpT_EEEEEZNS0_6writer8internal12_GLOBAL__N_111raw_fsblock8compressERS3_St8optionalINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEUlvE_EEbOT_EUlRNS5_14worker_contextEE_JST_EENSt9enable_ifIX16is_invocable_r_vISQ_T0_DpT1_EESQ_E4typeEOSX_DpOSY_ at /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:111:2
#21 0x0000564b2c8c31e8 in _ZNSt18move_only_functionIJFvRN6dwarfs8internal6detail14worker_contextEEEE9_S_invokeIZNS1_18basic_worker_groupIJEE7add_jobITkNS2_15forwards_to_jobIS_IJFvDpT_EEEEEZNS0_6writer8internal12_GLOBAL__N_111raw_fsblock8compressERS9_St8optionalINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEEEEUlvE_EEbOT_EUlS4_E_EEvPSt12_Mofunc_baseS4_ at /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/mofunc_impl.h:219:11
#22 0x0000564b2d5642d0 in std::move_only_function<void (dwarfs::internal::detail::worker_context&)>::operator()(dwarfs::internal::detail::worker_context&) at /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/mofunc_impl.h:184:9
#23 0x0000564b2d56003b in dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::do_work(dwarfs::internal::detail::worker_context&, bool) at /home/mhx/git/github/dwarfs/src/internal/worker_group.cpp:237:9
#24 0x0000564b2d55fab6 in dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char> >, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context> > (unsigned long)>)::{lambda()#1}::operator()() at /home/mhx/git/github/dwarfs/src/internal/worker_group.cpp:85:9
#25 0x0000564b2d55f5d4 in void std::__invoke_impl<void, dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char> >, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context> > (unsigned long)>)::{lambda()#1}>(std::__invoke_other, dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char> >, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context> > (unsigned long)>)::{lambda()#1}&&) at /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14
#26 0x0000564b2d55f594 in std::__invoke_result<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char> >, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context> > (unsigned long)>)::{lambda()#1}>::type std::__invoke<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char> >, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context> > (unsigned long)>)::{lambda()#1}>(dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char> >, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context> > (unsigned long)>)::{lambda()#1}&&) at /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:96:14
#27 0x0000564b2d55f56c in void std::thread::_Invoker<std::tuple<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char> >, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context> > (unsigned long)>)::{lambda()#1}> >::_M_invoke<0ul>(std::_Index_tuple<0ul>) at /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_thread.h:292:13
#28 0x0000564b2d55f544 in std::thread::_Invoker<std::tuple<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char> >, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context> > (unsigned long)>)::{lambda()#1}> >::operator()() at /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_thread.h:299:11
#29 0x0000564b2d55f33c in std::thread::_State_impl<std::thread::_Invoker<std::tuple<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char> >, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context> > (unsigned long)>)::{lambda()#1}> > >::_M_run() at /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_thread.h:244:13
#30 0x00007f60094e7913 at /usr/lib/gcc/x86_64-pc-linux-gnu/15/libstdc++.so.6
#31 0x0000564b2c27b14f in asan_thread_start at /var/tmp/portage/llvm-runtimes/compiler-rt-sanitizers-22.1.2/work/compiler-rt/lib/asan/asan_interceptors.cpp:246:28
#32 0x00007f60091bd251 at /lib64/libc.so.6
#33 0x00007f6009239e5b at /lib64/libc.so.6
AddressSanitizer:DEADLYSIGNAL
=================================================================
==1375==ERROR: AddressSanitizer: SEGV on unknown address 0x03e80000055f (pc 0x7f60098ff43a bp 0x7b6003ee2810 sp 0x7b6003ee2620 T3)
==1375==The signal is caused by a READ memory access.
    #0 0x7f60098ff43a in zxc_lz77_find_best_match /var/tmp/portage/app-arch/zxc-0.10.0/work/zxc-0.10.0/src/lib/zxc_compress.c:176:32
    #1 0x7f60098ff43a in zxc_encode_block_ghi /var/tmp/portage/app-arch/zxc-0.10.0/work/zxc-0.10.0/src/lib/zxc_compress.c:1229:13
    #2 0x7f60098ff43a in zxc_compress_chunk_wrapper_avx2 /var/tmp/portage/app-arch/zxc-0.10.0/work/zxc-0.10.0/src/lib/zxc_compress.c:1463:19
    #3 0x7f60099546ed in zxc_compress_chunk_wrapper /var/tmp/portage/app-arch/zxc-0.10.0/work/zxc-0.10.0/src/lib/zxc_dispatch.c:319:33
    #4 0x7f60099546ed in zxc_compress_block /var/tmp/portage/app-arch/zxc-0.10.0/work/zxc-0.10.0/src/lib/zxc_dispatch.c:934:21
    #5 0x564b2d5e5435 in dwarfs::(anonymous namespace)::zxc_block_compressor::compress(dwarfs::shared_byte_buffer const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const*) const /home/mhx/git/github/dwarfs/src/compression/zxc.cpp:103:9
    #6 0x564b2c8ec624 in dwarfs::block_compressor::compress(dwarfs::shared_byte_buffer const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&) const /home/mhx/git/github/dwarfs/include/dwarfs/block_compressor.h:65:19
    #7 0x564b2c8c2acd in dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()::operator()() /home/mhx/git/github/dwarfs/src/writer/filesystem_writer.cpp:266:25
    #8 0x564b2c8c27c4 in void std::__invoke_impl<void, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&>(std::__invoke_other, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14
    #9 0x564b2c8c2764 in std::enable_if<is_invocable_r_v<void, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&>, void>::type std::__invoke_r<void, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:111:2
    #10 0x564b2c8c25e0 in void std::move_only_function<void ()>::_S_invoke<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(std::_Mofunc_base*) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/mofunc_impl.h:219:11
    #11 0x564b2c50f695 in std::move_only_function<void ()>::operator()() /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/mofunc_impl.h:184:9
    #12 0x564b2c50f648 in void std::__invoke_impl<void, std::move_only_function<void ()>&>(std::__invoke_other, std::move_only_function<void ()>&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14
    #13 0x564b2c50f628 in std::__invoke_result<std::move_only_function<void ()>&>::type std::__invoke<std::move_only_function<void ()>&>(std::move_only_function<void ()>&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:96:14
    #14 0x564b2c50f5fc in decltype(auto) std::__apply_impl<std::move_only_function<void ()>&, std::tuple<>&>(std::move_only_function<void ()>&, std::tuple<>&, std::integer_sequence<unsigned long, ...>) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/tuple:2302:14
    #15 0x564b2c50f5b0 in decltype(auto) std::apply<std::move_only_function<void ()>&, std::tuple<>&>(std::move_only_function<void ()>&, std::tuple<>&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/tuple:2313:14
    #16 0x564b2c8c33b4 in bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)::operator()(dwarfs::internal::detail::worker_context&) /home/mhx/git/github/dwarfs/include/dwarfs/internal/worker_group.h:216:11
    #17 0x564b2c8c336c in dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'() std::__invoke_impl<void, bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&>(std::__invoke_other, bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14
    #18 0x564b2c8c32fc in std::enable_if<is_invocable_r_v<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'(), bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&>, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>::type std::__invoke_r<void, bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&>(bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:111:2
    #19 0x564b2c8c31e8 in void std::move_only_function<void (dwarfs::internal::detail::worker_context&)>::_S_invoke<bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)>(std::_Mofunc_base*, dwarfs::internal::detail::worker_context&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/mofunc_impl.h:219:11
    #20 0x564b2d5642d0 in std::move_only_function<void (dwarfs::internal::detail::worker_context&)>::operator()(dwarfs::internal::detail::worker_context&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/mofunc_impl.h:184:9
    #21 0x564b2d56003b in dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::do_work(dwarfs::internal::detail::worker_context&, bool) /home/mhx/git/github/dwarfs/src/internal/worker_group.cpp:237:9
    #22 0x564b2d55fab6 in dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()::operator()() /home/mhx/git/github/dwarfs/src/internal/worker_group.cpp:85:9
    #23 0x564b2d55f5d4 in void std::__invoke_impl<void, dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>(std::__invoke_other, dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()&&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14
    #24 0x564b2d55f594 in std::__invoke_result<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>::type std::__invoke<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>(dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()&&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:96:14
    #25 0x564b2d55f56c in void std::thread::_Invoker<std::tuple<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>>::_M_invoke<0ul>(std::_Index_tuple<0ul>) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_thread.h:292:13
    #26 0x564b2d55f544 in std::thread::_Invoker<std::tuple<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>>::operator()() /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_thread.h:299:11
    #27 0x564b2d55f33c in std::thread::_State_impl<std::thread::_Invoker<std::tuple<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>>>::_M_run() /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_thread.h:244:13
    #28 0x7f60094e7913 in execute_native_thread_routine /var/tmp/portage/sys-devel/gcc-15.2.1_p20260214/work/gcc-15-20260214/libstdc++-v3/src/c++11/thread.cc:104:18
    #29 0x564b2c27b14f in asan_thread_start(void*) /var/tmp/portage/llvm-runtimes/compiler-rt-sanitizers-22.1.2/work/compiler-rt/lib/asan/asan_interceptors.cpp:246:28
    #30 0x7f60091bd251  (/lib64/libc.so.6+0x8c251)
    #31 0x7f6009239e5b  (/lib64/libc.so.6+0x108e5b)

==1375==Register values:
rax = 0x0000000000003ce8  rbx = 0x00007b6003ee2620  rcx = 0x0000000000000000  rdx = 0x00007c50085e4000  
rdi = 0x0000000000003ce8  rsi = 0x00007d7008a9d8f4  rbp = 0x00007b6003ee2810  rsp = 0x00007b6003ee2620  
 r8 = 0x74736f6f42202f2f   r9 = 0x00007d7008a9c900  r10 = 0x00000000ffffffe0  r11 = 0x0000000054494152  
r12 = 0x00007d7008a9c900  r13 = 0x0000000000000004  r14 = 0x00000f8a010bc804  r15 = 0x00007c50085e4020  
AddressSanitizer can not provide additional info.
SUMMARY: AddressSanitizer: SEGV /var/tmp/portage/app-arch/zxc-0.10.0/work/zxc-0.10.0/src/lib/zxc_compress.c:176:32 in zxc_lz77_find_best_match
Thread T3 created by T0 here:
    #0 0x564b2c25d6b5 in pthread_create /var/tmp/portage/llvm-runtimes/compiler-rt-sanitizers-22.1.2/work/compiler-rt/lib/asan/asan_interceptors.cpp:257:3
    #1 0x7f60094e79e8 in __gthread_create(unsigned long*, void* (*)(void*), void*) /var/tmp/portage/sys-devel/gcc-15.2.1_p20260214/work/build/x86_64-pc-linux-gnu/libstdc++-v3/include/x86_64-pc-linux-gnu/bits/gthr-default.h:709:35
    #2 0x7f60094e79e8 in std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State>>, void (*)()) /var/tmp/portage/sys-devel/gcc-15.2.1_p20260214/work/gcc-15-20260214/libstdc++-v3/src/c++11/thread.cc:172:37
    #3 0x564b2d55ef70 in decltype(::new((void*)(0)) std::thread(std::declval<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>())) std::construct_at<std::thread, dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>(std::thread*, dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()&&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/stl_construct.h:97:39
    #4 0x564b2d55c3a9 in void std::allocator_traits<std::allocator<std::thread>>::construct<std::thread, dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>(std::allocator<std::thread>&, std::thread*, dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()&&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/alloc_traits.h:540:4
    #5 0x564b2d55c3a9 in std::thread& std::vector<std::thread, std::allocator<std::thread>>::emplace_back<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>(dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()&&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/vector.tcc:117:6
    #6 0x564b2d55c004 in dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>) /home/mhx/git/github/dwarfs/src/internal/worker_group.cpp:81:16
    #7 0x564b2d55b5ab in std::__detail::_MakeUniq<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>>::__single_object std::make_unique<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>, dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>>(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>&&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/unique_ptr.h:1070:34
    #8 0x564b2d55b350 in std::unique_ptr<dwarfs::internal::detail::worker_group_impl, std::default_delete<dwarfs::internal::detail::worker_group_impl>> dwarfs::detail::unique_ptr_policy<dwarfs::internal::detail::worker_group_impl>::create<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>, dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>>(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>&&) /home/mhx/git/github/dwarfs/include/dwarfs/detail/logging_class_factory.h:47:12
    #9 0x564b2d555293 in dwarfs::detail::unique_ptr_policy<dwarfs::internal::detail::worker_group_impl>::return_type dwarfs::detail::logging_class_factory::create_impl<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_, dwarfs::detail::unique_ptr_policy<dwarfs::internal::detail::worker_group_impl>, dwarfs::prod_logger_policy, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>>(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>&&) /home/mhx/git/github/dwarfs/include/dwarfs/detail/logging_class_factory.h:85:14
    #10 0x564b2d555042 in dwarfs::detail::unique_ptr_policy<dwarfs::internal::detail::worker_group_impl>::return_type dwarfs::detail::logging_class_factory::create_impl<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_, dwarfs::detail::unique_ptr_policy<dwarfs::internal::detail::worker_group_impl>, dwarfs::debug_logger_policy, dwarfs::prod_logger_policy, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>>(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>&&) /home/mhx/git/github/dwarfs/include/dwarfs/detail/logging_class_factory.h:89:14
    #11 0x564b2d554f9f in dwarfs::detail::unique_ptr_policy<dwarfs::internal::detail::worker_group_impl>::return_type dwarfs::detail::logging_class_factory::create_unwrap<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_, dwarfs::detail::unique_ptr_policy<dwarfs::internal::detail::worker_group_impl>, dwarfs::debug_logger_policy, dwarfs::prod_logger_policy, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>>(dwarfs::logger&, std::type_identity<std::tuple<dwarfs::debug_logger_policy, dwarfs::prod_logger_policy>>, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>&&) /home/mhx/git/github/dwarfs/include/dwarfs/detail/logging_class_factory.h:77:12
    #12 0x564b2d554f4f in dwarfs::detail::unique_ptr_policy<dwarfs::internal::detail::worker_group_impl>::return_type dwarfs::detail::logging_class_factory::create<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_, dwarfs::detail::unique_ptr_policy<dwarfs::internal::detail::worker_group_impl>, std::tuple<dwarfs::debug_logger_policy, dwarfs::prod_logger_policy>, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>>(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>&&) /home/mhx/git/github/dwarfs/include/dwarfs/detail/logging_class_factory.h:66:12
    #13 0x564b2d554eff in std::unique_ptr<dwarfs::internal::detail::worker_group_impl, std::default_delete<dwarfs::internal::detail::worker_group_impl>> dwarfs::make_unique_logging_object<dwarfs::internal::detail::worker_group_impl, dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_, std::tuple<dwarfs::debug_logger_policy, dwarfs::prod_logger_policy>, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>>(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>&&) /home/mhx/git/github/dwarfs/include/dwarfs/logger.h:395:10
    #14 0x564b2d554e4f in dwarfs::internal::detail::make_worker_group_impl(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>&&) /home/mhx/git/github/dwarfs/src/internal/worker_group.cpp:278:10
    #15 0x564b2c505ae4 in dwarfs::internal::basic_worker_group<>::basic_worker_group<dwarfs::internal::basic_worker_group<>::basic_worker_group(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options) requires sizeof...(T...) == 0::'lambda'(unsigned long)>(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options, dwarfs::internal::basic_worker_group<>::basic_worker_group(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options) requires sizeof...(T...) == 0::'lambda'(unsigned long)&&) /home/mhx/git/github/dwarfs/include/dwarfs/internal/worker_group.h:198:15
    #16 0x564b2c504649 in dwarfs::internal::basic_worker_group<>::basic_worker_group(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options) requires sizeof...(T...) == 0 /home/mhx/git/github/dwarfs/include/dwarfs/internal/worker_group.h:154:9
    #17 0x564b2d483444 in std::__detail::_MakeUniq<dwarfs::internal::basic_worker_group<>>::__single_object std::make_unique<dwarfs::internal::basic_worker_group<>, dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options>(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options&&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/unique_ptr.h:1070:34
    #18 0x564b2d482fd6 in dwarfs::thread_pool::thread_pool(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, unsigned long, unsigned long, int) /home/mhx/git/github/dwarfs/src/thread_pool.cpp:44:11
    #19 0x564b2c2e0a51 in dwarfs::tool::mkdwarfs_main(int, char**, dwarfs::tool::iolayer const&) /home/mhx/git/github/dwarfs/tools/src/mkdwarfs_main.cpp:1473:15
    #20 0x564b2c3c07e2 in dwarfs::tool::main_adapter::operator()(int, char**) const /home/mhx/git/github/dwarfs/tools/src/tool/main_adapter.cpp:99:10
    #21 0x564b2c3c2259 in dwarfs::tool::main_adapter::safe(int, char**) const::$_0::operator()() const /home/mhx/git/github/dwarfs/tools/src/tool/main_adapter.cpp:113:33
    #22 0x564b2c3c2164 in int std::__invoke_impl<int, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&>(std::__invoke_other, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14
    #23 0x564b2c3c2104 in std::enable_if<is_invocable_r_v<int, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&>, int>::type std::__invoke_r<int, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&>(dwarfs::tool::main_adapter::safe(int, char**) const::$_0&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:114:9
    #24 0x564b2c3c1f90 in std::_Function_handler<int (), dwarfs::tool::main_adapter::safe(int, char**) const::$_0>::_M_invoke(std::_Any_data const&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_function.h:290:9
    #25 0x564b2c3c4c9b in std::function<int ()>::operator()() const /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_function.h:591:9
    #26 0x564b2c3c4829 in dwarfs::tool::safe_main(std::function<int ()> const&) /home/mhx/git/github/dwarfs/tools/src/tool/safe_main.cpp:69:14
    #27 0x564b2c3c17cb in dwarfs::tool::main_adapter::safe(int, char**) const /home/mhx/git/github/dwarfs/tools/src/tool/main_adapter.cpp:113:10
    #28 0x564b2c471905 in main /home/mhx/git/github/dwarfs/tools/src/mkdwarfs.cpp:30:38
    #29 0x7f600915827f  (/lib64/libc.so.6+0x2727f)

==1375==ABORTING

Sometimes this:

./mkdwarfs -i /usr/include/boost -o /tmp/boost-zxc.dwarfs --force -C zxc:level=3 -S 12
I 22:37:53.022325 scanning "/usr/include/boost"
I 22:37:55.268213 waiting for background scanners...
I 22:37:55.552237 scanning CPU time: 15.18s
I 22:37:55.552302 assigning directory and link inodes...
I 22:37:55.587895 finalizing file inodes...
I 22:37:55.953398 saved 1.489 MiB / 143.2 MiB (1.04%) in 309/15,760 duplicate files
I 22:37:55.959387 assigning device inodes...
I 22:37:55.975798 assigning pipe/socket inodes...
I 22:37:55.992204 building metadata...
I 22:37:55.992246 building blocks...
I 22:37:55.992424 saving names and symlinks...
I 22:37:55.999102 waiting for segmenting/blockifying to finish...
I 22:37:56.061620 updating name and link indices...
⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯

⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯
writing: /usr/include/boost/geometry/srs/projections/iau2000_traits.hpp
1,309 dirs, 0/0 soft/hard links, 15,760/15,760 files, 0 other
original size: 143.2 MiB, hashed: 29.4 MiB (10,766 files, 62.7 MiB/s)
scanned: 141.7 MiB (15,451 files, 11.55 MiB/s), categorizing: 0 B/s
saved by deduplication: 1.489 MiB (309 files), saved by segmenting: 0 B
filesystem: 2.151 MiB in 550 blocks (552 chunks, 2/15,451 fragments, 15,451 inodes)
compressed filesystem: 1 blocks/1.464 KiB written, using 585.1 MiB of RAM
█▉                                                                                                                                                                                                                 ▏  1% 🌓
/usr/include/boost/geometry/srs/projections/iau2000_traits.hpp                                                                                           ▉                                                     ▏0 B/s
[compressing] compressed 2.148 MiB to 303.7 KiB (ratio 13.81%)                                                                                                                                                  0 B/s
    #0 0x55bbb73c3cca in free /var/tmp/portage/llvm-runtimes/compiler-rt-sanitizers-22.1.2/work/compiler-rt/lib/asan/asan_malloc_linux.cpp:51:3
    #1 0x7f741034d161 in zxc_aligned_free /var/tmp/portage/app-arch/zxc-0.10.0/work/zxc-0.10.0/src/lib/zxc_common.c:56:5
    #2 0x7f741034d161 in zxc_cctx_free /var/tmp/portage/app-arch/zxc-0.10.0/work/zxc-0.10.0/src/lib/zxc_common.c:151:9
    #3 0x7f7410354629 in zxc_compress_block /var/tmp/portage/app-arch/zxc-0.10.0/work/zxc-0.10.0/src/lib/zxc_dispatch.c:919:13
    #4 0x55bbb8727435 in dwarfs::(anonymous namespace)::zxc_block_compressor::compress(dwarfs::shared_byte_buffer const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const*) const /home/mhx/git/github/dwarfs/src/compression/zxc.cpp:103:9
    #5 0x55bbb7a2e624 in dwarfs::block_compressor::compress(dwarfs::shared_byte_buffer const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&) const /home/mhx/git/github/dwarfs/include/dwarfs/block_compressor.h:65:19
    #6 0x55bbb7a04acd in dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()::operator()() /home/mhx/git/github/dwarfs/src/writer/filesystem_writer.cpp:266:25
    #7 0x55bbb7a047c4 in void std::__invoke_impl<void, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&>(std::__invoke_other, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14
    #8 0x55bbb7a04764 in std::enable_if<is_invocable_r_v<void, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&>, void>::type std::__invoke_r<void, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:111:2
    #9 0x55bbb7a045e0 in void std::move_only_function<void ()>::_S_invoke<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(std::_Mofunc_base*) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/mofunc_impl.h:219:11
    #10 0x55bbb7651695 in std::move_only_function<void ()>::operator()() /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/mofunc_impl.h:184:9
    #11 0x55bbb7651648 in void std::__invoke_impl<void, std::move_only_function<void ()>&>(std::__invoke_other, std::move_only_function<void ()>&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14
    #12 0x55bbb7651628 in std::__invoke_result<std::move_only_function<void ()>&>::type std::__invoke<std::move_only_function<void ()>&>(std::move_only_function<void ()>&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:96:14
    #13 0x55bbb76515fc in decltype(auto) std::__apply_impl<std::move_only_function<void ()>&, std::tuple<>&>(std::move_only_function<void ()>&, std::tuple<>&, std::integer_sequence<unsigned long, ...>) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/tuple:2302:14
    #14 0x55bbb76515b0 in decltype(auto) std::apply<std::move_only_function<void ()>&, std::tuple<>&>(std::move_only_function<void ()>&, std::tuple<>&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/tuple:2313:14
    #15 0x55bbb7a053b4 in bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)::operator()(dwarfs::internal::detail::worker_context&) /home/mhx/git/github/dwarfs/include/dwarfs/internal/worker_group.h:216:11
    #16 0x55bbb7a0536c in dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'() std::__invoke_impl<void, bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&>(std::__invoke_other, bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14
    #17 0x55bbb7a052fc in std::enable_if<is_invocable_r_v<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'(), bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&>, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>::type std::__invoke_r<void, bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&>(bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:111:2
    #18 0x55bbb7a051e8 in void std::move_only_function<void (dwarfs::internal::detail::worker_context&)>::_S_invoke<bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)>(std::_Mofunc_base*, dwarfs::internal::detail::worker_context&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/mofunc_impl.h:219:11
    #19 0x55bbb86a62d0 in std::move_only_function<void (dwarfs::internal::detail::worker_context&)>::operator()(dwarfs::internal::detail::worker_context&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/mofunc_impl.h:184:9
    #20 0x55bbb86a203b in dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::do_work(dwarfs::internal::detail::worker_context&, bool) /home/mhx/git/github/dwarfs/src/internal/worker_group.cpp:237:9
    #21 0x55bbb86a1ab6 in dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()::operator()() /home/mhx/git/github/dwarfs/src/internal/worker_group.cpp:85:9
    #22 0x55bbb86a15d4 in void std::__invoke_impl<void, dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>(std::__invoke_other, dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()&&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14
    #23 0x55bbb86a1594 in std::__invoke_result<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>::type std::__invoke<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>(dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()&&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:96:14
    #24 0x55bbb86a156c in void std::thread::_Invoker<std::tuple<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>>::_M_invoke<0ul>(std::_Index_tuple<0ul>) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_thread.h:292:13
    #25 0x55bbb86a1544 in std::thread::_Invoker<std::tuple<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>>::operator()() /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_thread.h:299:11
    #26 0x55bbb86a133c in std::thread::_State_impl<std::thread::_Invoker<std::tuple<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>>>::_M_run() /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_thread.h:244:13
    #27 0x7f740fee7913 in execute_native_thread_routine /var/tmp/portage/sys-devel/gcc-15.2.1_p20260214/work/gcc-15-20260214/libstdc++-v3/src/c++11/thread.cc:104:18
    #28 0x55bbb73bd14f in asan_thread_start(void*) /var/tmp/portage/llvm-runtimes/compiler-rt-sanitizers-22.1.2/work/compiler-rt/lib/asan/asan_interceptors.cpp:246:28
    #29 0x7f740fbbd251  (/lib64/libc.so.6+0x8c251)
    #30 0x7f740fc39e5b  (/lib64/libc.so.6+0x108e5b)

0x7b73e360f800 is located 0 bytes inside of 1805632-byte region [0x7b73e360f800,0x7b73e37c8540)
freed by thread T4 here:
    #0 0x55bbb73c3cca in free /var/tmp/portage/llvm-runtimes/compiler-rt-sanitizers-22.1.2/work/compiler-rt/lib/asan/asan_malloc_linux.cpp:51:3
    #1 0x7f741034d161 in zxc_aligned_free /var/tmp/portage/app-arch/zxc-0.10.0/work/zxc-0.10.0/src/lib/zxc_common.c:56:5
    #2 0x7f741034d161 in zxc_cctx_free /var/tmp/portage/app-arch/zxc-0.10.0/work/zxc-0.10.0/src/lib/zxc_common.c:151:9

previously allocated by thread T0 here:
    #0 0x55bbb73c47ab in posix_memalign /var/tmp/portage/llvm-runtimes/compiler-rt-sanitizers-22.1.2/work/compiler-rt/lib/asan/asan_malloc_linux.cpp:139:3
    #1 0x7f741034cde8 in zxc_aligned_malloc /var/tmp/portage/app-arch/zxc-0.10.0/work/zxc-0.10.0/src/lib/zxc_common.c:42:9
    #2 0x7f741034cde8 in zxc_cctx_init /var/tmp/portage/app-arch/zxc-0.10.0/work/zxc-0.10.0/src/lib/zxc_common.c:120:36
    #3 0x7f741035314c in zxc_create_cctx /var/tmp/portage/app-arch/zxc-0.10.0/work/zxc-0.10.0/src/lib/zxc_dispatch.c:670:22
    #4 0x55bbb87280a7 in std::__detail::_MakeUniq<dwarfs::(anonymous namespace)::zxc_block_compressor>::__single_object std::make_unique<dwarfs::(anonymous namespace)::zxc_block_compressor, dwarfs::(anonymous namespace)::zxc_block_compressor const&>(dwarfs::(anonymous namespace)::zxc_block_compressor const&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/unique_ptr.h:1070:34
    #5 0x55bbb8726efb in dwarfs::(anonymous namespace)::zxc_block_compressor::clone() const /home/mhx/git/github/dwarfs/src/compression/zxc.cpp:84:12
    #6 0x55bbb744aeb1 in dwarfs::block_compressor::block_compressor(dwarfs::block_compressor const&) /home/mhx/git/github/dwarfs/include/dwarfs/block_compressor.h:54:25
    #7 0x55bbb744b953 in dwarfs::writer::contextual_option<dwarfs::writer::detail::categorized_option_policy<dwarfs::block_compressor>>::get() const /home/mhx/git/github/dwarfs/include/dwarfs/writer/contextual_option.h:93:35
    #8 0x55bbb742338d in dwarfs::tool::mkdwarfs_main(int, char**, dwarfs::tool::iolayer const&) /home/mhx/git/github/dwarfs/tools/src/mkdwarfs_main.cpp:1511:33
    #9 0x55bbb75027e2 in dwarfs::tool::main_adapter::operator()(int, char**) const /home/mhx/git/github/dwarfs/tools/src/tool/main_adapter.cpp:99:10
    #10 0x55bbb7504259 in dwarfs::tool::main_adapter::safe(int, char**) const::$_0::operator()() const /home/mhx/git/github/dwarfs/tools/src/tool/main_adapter.cpp:113:33
    #11 0x55bbb7504164 in int std::__invoke_impl<int, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&>(std::__invoke_other, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14
    #12 0x55bbb7504104 in std::enable_if<is_invocable_r_v<int, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&>, int>::type std::__invoke_r<int, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&>(dwarfs::tool::main_adapter::safe(int, char**) const::$_0&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:114:9
    #13 0x55bbb7503f90 in std::_Function_handler<int (), dwarfs::tool::main_adapter::safe(int, char**) const::$_0>::_M_invoke(std::_Any_data const&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_function.h:290:9
    #14 0x55bbb7506c9b in std::function<int ()>::operator()() const /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_function.h:591:9
    #15 0x55bbb7506829 in dwarfs::tool::safe_main(std::function<int ()> const&) /home/mhx/git/github/dwarfs/tools/src/tool/safe_main.cpp:69:14
    #16 0x55bbb75037cb in dwarfs::tool::main_adapter::safe(int, char**) const /home/mhx/git/github/dwarfs/tools/src/tool/main_adapter.cpp:113:10
    #17 0x55bbb75b3905 in main /home/mhx/git/github/dwarfs/tools/src/mkdwarfs.cpp:30:38
    #18 0x7f740fb5827f  (/lib64/libc.so.6+0x2727f)

Thread T8 created by T0 here:
    #0 0x55bbb739f6b5 in pthread_create /var/tmp/portage/llvm-runtimes/compiler-rt-sanitizers-22.1.2/work/compiler-rt/lib/asan/asan_interceptors.cpp:257:3
    #1 0x7f740fee79e8 in __gthread_create(unsigned long*, void* (*)(void*), void*) /var/tmp/portage/sys-devel/gcc-15.2.1_p20260214/work/build/x86_64-pc-linux-gnu/libstdc++-v3/include/x86_64-pc-linux-gnu/bits/gthr-default.h:709:35
    #2 0x7f740fee79e8 in std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State>>, void (*)()) /var/tmp/portage/sys-devel/gcc-15.2.1_p20260214/work/gcc-15-20260214/libstdc++-v3/src/c++11/thread.cc:172:37
    #3 0x55bbb86a0f70 in decltype(::new((void*)(0)) std::thread(std::declval<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>())) std::construct_at<std::thread, dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>(std::thread*, dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()&&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/stl_construct.h:97:39
    #4 0x55bbb869e3a9 in void std::allocator_traits<std::allocator<std::thread>>::construct<std::thread, dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>(std::allocator<std::thread>&, std::thread*, dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()&&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/alloc_traits.h:540:4
    #5 0x55bbb869e3a9 in std::thread& std::vector<std::thread, std::allocator<std::thread>>::emplace_back<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>(dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()&&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/vector.tcc:117:6
    #6 0x55bbb869e004 in dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>) /home/mhx/git/github/dwarfs/src/internal/worker_group.cpp:81:16
    #7 0x55bbb869d5ab in std::__detail::_MakeUniq<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>>::__single_object std::make_unique<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>, dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>>(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>&&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/unique_ptr.h:1070:34
    #8 0x55bbb869d350 in std::unique_ptr<dwarfs::internal::detail::worker_group_impl, std::default_delete<dwarfs::internal::detail::worker_group_impl>> dwarfs::detail::unique_ptr_policy<dwarfs::internal::detail::worker_group_impl>::create<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>, dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>>(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>&&) /home/mhx/git/github/dwarfs/include/dwarfs/detail/logging_class_factory.h:47:12
    #9 0x55bbb8697293 in dwarfs::detail::unique_ptr_policy<dwarfs::internal::detail::worker_group_impl>::return_type dwarfs::detail::logging_class_factory::create_impl<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_, dwarfs::detail::unique_ptr_policy<dwarfs::internal::detail::worker_group_impl>, dwarfs::prod_logger_policy, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>>(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>&&) /home/mhx/git/github/dwarfs/include/dwarfs/detail/logging_class_factory.h:85:14
    #10 0x55bbb8697042 in dwarfs::detail::unique_ptr_policy<dwarfs::internal::detail::worker_group_impl>::return_type dwarfs::detail::logging_class_factory::create_impl<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_, dwarfs::detail::unique_ptr_policy<dwarfs::internal::detail::worker_group_impl>, dwarfs::debug_logger_policy, dwarfs::prod_logger_policy, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>>(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>&&) /home/mhx/git/github/dwarfs/include/dwarfs/detail/logging_class_factory.h:89:14
    #11 0x55bbb8696f9f in dwarfs::detail::unique_ptr_policy<dwarfs::internal::detail::worker_group_impl>::return_type dwarfs::detail::logging_class_factory::create_unwrap<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_, dwarfs::detail::unique_ptr_policy<dwarfs::internal::detail::worker_group_impl>, dwarfs::debug_logger_policy, dwarfs::prod_logger_policy, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>>(dwarfs::logger&, std::type_identity<std::tuple<dwarfs::debug_logger_policy, dwarfs::prod_logger_policy>>, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>&&) /home/mhx/git/github/dwarfs/include/dwarfs/detail/logging_class_factory.h:77:12
    #12 0x55bbb8696f4f in dwarfs::detail::unique_ptr_policy<dwarfs::internal::detail::worker_group_impl>::return_type dwarfs::detail::logging_class_factory::create<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_, dwarfs::detail::unique_ptr_policy<dwarfs::internal::detail::worker_group_impl>, std::tuple<dwarfs::debug_logger_policy, dwarfs::prod_logger_policy>, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>>(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>&&) /home/mhx/git/github/dwarfs/include/dwarfs/detail/logging_class_factory.h:66:12
    #13 0x55bbb8696eff in std::unique_ptr<dwarfs::internal::detail::worker_group_impl, std::default_delete<dwarfs::internal::detail::worker_group_impl>> dwarfs::make_unique_logging_object<dwarfs::internal::detail::worker_group_impl, dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_, std::tuple<dwarfs::debug_logger_policy, dwarfs::prod_logger_policy>, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>>(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>&&) /home/mhx/git/github/dwarfs/include/dwarfs/logger.h:395:10
    #14 0x55bbb8696e4f in dwarfs::internal::detail::make_worker_group_impl(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>&&) /home/mhx/git/github/dwarfs/src/internal/worker_group.cpp:278:10
    #15 0x55bbb7647ae4 in dwarfs::internal::basic_worker_group<>::basic_worker_group<dwarfs::internal::basic_worker_group<>::basic_worker_group(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options) requires sizeof...(T...) == 0::'lambda'(unsigned long)>(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options, dwarfs::internal::basic_worker_group<>::basic_worker_group(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options) requires sizeof...(T...) == 0::'lambda'(unsigned long)&&) /home/mhx/git/github/dwarfs/include/dwarfs/internal/worker_group.h:198:15
    #16 0x55bbb7646649 in dwarfs::internal::basic_worker_group<>::basic_worker_group(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options) requires sizeof...(T...) == 0 /home/mhx/git/github/dwarfs/include/dwarfs/internal/worker_group.h:154:9
    #17 0x55bbb85c5444 in std::__detail::_MakeUniq<dwarfs::internal::basic_worker_group<>>::__single_object std::make_unique<dwarfs::internal::basic_worker_group<>, dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options>(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options&&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/unique_ptr.h:1070:34
    #18 0x55bbb85c4fd6 in dwarfs::thread_pool::thread_pool(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, unsigned long, unsigned long, int) /home/mhx/git/github/dwarfs/src/thread_pool.cpp:44:11
    #19 0x55bbb7422a51 in dwarfs::tool::mkdwarfs_main(int, char**, dwarfs::tool::iolayer const&) /home/mhx/git/github/dwarfs/tools/src/mkdwarfs_main.cpp:1473:15
    #20 0x55bbb75027e2 in dwarfs::tool::main_adapter::operator()(int, char**) const /home/mhx/git/github/dwarfs/tools/src/tool/main_adapter.cpp:99:10
    #21 0x55bbb7504259 in dwarfs::tool::main_adapter::safe(int, char**) const::$_0::operator()() const /home/mhx/git/github/dwarfs/tools/src/tool/main_adapter.cpp:113:33
    #22 0x55bbb7504164 in int std::__invoke_impl<int, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&>(std::__invoke_other, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14
    #23 0x55bbb7504104 in std::enable_if<is_invocable_r_v<int, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&>, int>::type std::__invoke_r<int, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&>(dwarfs::tool::main_adapter::safe(int, char**) const::$_0&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:114:9
    #24 0x55bbb7503f90 in std::_Function_handler<int (), dwarfs::tool::main_adapter::safe(int, char**) const::$_0>::_M_invoke(std::_Any_data const&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_function.h:290:9
    #25 0x55bbb7506c9b in std::function<int ()>::operator()() const /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_function.h:591:9
    #26 0x55bbb7506829 in dwarfs::tool::safe_main(std::function<int ()> const&) /home/mhx/git/github/dwarfs/tools/src/tool/safe_main.cpp:69:14
    #27 0x55bbb75037cb in dwarfs::tool::main_adapter::safe(int, char**) const /home/mhx/git/github/dwarfs/tools/src/tool/main_adapter.cpp:113:10
    #28 0x55bbb75b3905 in main /home/mhx/git/github/dwarfs/tools/src/mkdwarfs.cpp:30:38
    #29 0x7f740fb5827f  (/lib64/libc.so.6+0x2727f)

Thread T4 created by T0 here:
    #0 0x55bbb739f6b5 in pthread_create /var/tmp/portage/llvm-runtimes/compiler-rt-sanitizers-22.1.2/work/compiler-rt/lib/asan/asan_interceptors.cpp:257:3
    #1 0x7f740fee79e8 in __gthread_create(unsigned long*, void* (*)(void*), void*) /var/tmp/portage/sys-devel/gcc-15.2.1_p20260214/work/build/x86_64-pc-linux-gnu/libstdc++-v3/include/x86_64-pc-linux-gnu/bits/gthr-default.h:709:35
    #2 0x7f740fee79e8 in std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State>>, void (*)()) /var/tmp/portage/sys-devel/gcc-15.2.1_p20260214/work/gcc-15-20260214/libstdc++-v3/src/c++11/thread.cc:172:37
    #3 0x55bbb86a0f70 in decltype(::new((void*)(0)) std::thread(std::declval<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>())) std::construct_at<std::thread, dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>(std::thread*, dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()&&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/stl_construct.h:97:39
    #4 0x55bbb869e3a9 in void std::allocator_traits<std::allocator<std::thread>>::construct<std::thread, dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>(std::allocator<std::thread>&, std::thread*, dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()&&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/alloc_traits.h:540:4
    #5 0x55bbb869e3a9 in std::thread& std::vector<std::thread, std::allocator<std::thread>>::emplace_back<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>(dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()&&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/vector.tcc:117:6
    #6 0x55bbb869e004 in dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>) /home/mhx/git/github/dwarfs/src/internal/worker_group.cpp:81:16
    #7 0x55bbb869d5ab in std::__detail::_MakeUniq<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>>::__single_object std::make_unique<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>, dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>>(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>&&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/unique_ptr.h:1070:34
    #8 0x55bbb869d350 in std::unique_ptr<dwarfs::internal::detail::worker_group_impl, std::default_delete<dwarfs::internal::detail::worker_group_impl>> dwarfs::detail::unique_ptr_policy<dwarfs::internal::detail::worker_group_impl>::create<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>, dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>>(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>&&) /home/mhx/git/github/dwarfs/include/dwarfs/detail/logging_class_factory.h:47:12
    #9 0x55bbb8697293 in dwarfs::detail::unique_ptr_policy<dwarfs::internal::detail::worker_group_impl>::return_type dwarfs::detail::logging_class_factory::create_impl<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_, dwarfs::detail::unique_ptr_policy<dwarfs::internal::detail::worker_group_impl>, dwarfs::prod_logger_policy, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>>(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>&&) /home/mhx/git/github/dwarfs/include/dwarfs/detail/logging_class_factory.h:85:14
    #10 0x55bbb8697042 in dwarfs::detail::unique_ptr_policy<dwarfs::internal::detail::worker_group_impl>::return_type dwarfs::detail::logging_class_factory::create_impl<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_, dwarfs::detail::unique_ptr_policy<dwarfs::internal::detail::worker_group_impl>, dwarfs::debug_logger_policy, dwarfs::prod_logger_policy, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>>(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>&&) /home/mhx/git/github/dwarfs/include/dwarfs/detail/logging_class_factory.h:89:14
    #11 0x55bbb8696f9f in dwarfs::detail::unique_ptr_policy<dwarfs::internal::detail::worker_group_impl>::return_type dwarfs::detail::logging_class_factory::create_unwrap<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_, dwarfs::detail::unique_ptr_policy<dwarfs::internal::detail::worker_group_impl>, dwarfs::debug_logger_policy, dwarfs::prod_logger_policy, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>>(dwarfs::logger&, std::type_identity<std::tuple<dwarfs::debug_logger_policy, dwarfs::prod_logger_policy>>, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>&&) /home/mhx/git/github/dwarfs/include/dwarfs/detail/logging_class_factory.h:77:12
    #12 0x55bbb8696f4f in dwarfs::detail::unique_ptr_policy<dwarfs::internal::detail::worker_group_impl>::return_type dwarfs::detail::logging_class_factory::create<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_, dwarfs::detail::unique_ptr_policy<dwarfs::internal::detail::worker_group_impl>, std::tuple<dwarfs::debug_logger_policy, dwarfs::prod_logger_policy>, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>>(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>&&) /home/mhx/git/github/dwarfs/include/dwarfs/detail/logging_class_factory.h:66:12
    #13 0x55bbb8696eff in std::unique_ptr<dwarfs::internal::detail::worker_group_impl, std::default_delete<dwarfs::internal::detail::worker_group_impl>> dwarfs::make_unique_logging_object<dwarfs::internal::detail::worker_group_impl, dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_, std::tuple<dwarfs::debug_logger_policy, dwarfs::prod_logger_policy>, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>>(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>&&) /home/mhx/git/github/dwarfs/include/dwarfs/logger.h:395:10
    #14 0x55bbb8696e4f in dwarfs::internal::detail::make_worker_group_impl(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>&&) /home/mhx/git/github/dwarfs/src/internal/worker_group.cpp:278:10
    #15 0x55bbb7647ae4 in dwarfs::internal::basic_worker_group<>::basic_worker_group<dwarfs::internal::basic_worker_group<>::basic_worker_group(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options) requires sizeof...(T...) == 0::'lambda'(unsigned long)>(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options, dwarfs::internal::basic_worker_group<>::basic_worker_group(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options) requires sizeof...(T...) == 0::'lambda'(unsigned long)&&) /home/mhx/git/github/dwarfs/include/dwarfs/internal/worker_group.h:198:15
    #16 0x55bbb7646649 in dwarfs::internal::basic_worker_group<>::basic_worker_group(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options) requires sizeof...(T...) == 0 /home/mhx/git/github/dwarfs/include/dwarfs/internal/worker_group.h:154:9
    #17 0x55bbb85c5444 in std::__detail::_MakeUniq<dwarfs::internal::basic_worker_group<>>::__single_object std::make_unique<dwarfs::internal::basic_worker_group<>, dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options>(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options&&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/unique_ptr.h:1070:34
    #18 0x55bbb85c4fd6 in dwarfs::thread_pool::thread_pool(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, unsigned long, unsigned long, int) /home/mhx/git/github/dwarfs/src/thread_pool.cpp:44:11
    #19 0x55bbb7422a51 in dwarfs::tool::mkdwarfs_main(int, char**, dwarfs::tool::iolayer const&) /home/mhx/git/github/dwarfs/tools/src/mkdwarfs_main.cpp:1473:15
    #20 0x55bbb75027e2 in dwarfs::tool::main_adapter::operator()(int, char**) const /home/mhx/git/github/dwarfs/tools/src/tool/main_adapter.cpp:99:10
    #21 0x55bbb7504259 in dwarfs::tool::main_adapter::safe(int, char**) const::$_0::operator()() const /home/mhx/git/github/dwarfs/tools/src/tool/main_adapter.cpp:113:33
    #22 0x55bbb7504164 in int std::__invoke_impl<int, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&>(std::__invoke_other, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14
    #23 0x55bbb7504104 in std::enable_if<is_invocable_r_v<int, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&>, int>::type std::__invoke_r<int, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&>(dwarfs::tool::main_adapter::safe(int, char**) const::$_0&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:114:9
    #24 0x55bbb7503f90 in std::_Function_handler<int (), dwarfs::tool::main_adapter::safe(int, char**) const::$_0>::_M_invoke(std::_Any_data const&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_function.h:290:9
    #25 0x55bbb7506c9b in std::function<int ()>::operator()() const /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_function.h:591:9
    #26 0x55bbb7506829 in dwarfs::tool::safe_main(std::function<int ()> const&) /home/mhx/git/github/dwarfs/tools/src/tool/safe_main.cpp:69:14
    #27 0x55bbb75037cb in dwarfs::tool::main_adapter::safe(int, char**) const /home/mhx/git/github/dwarfs/tools/src/tool/main_adapter.cpp:113:10
    #28 0x55bbb75b3905 in main /home/mhx/git/github/dwarfs/tools/src/mkdwarfs.cpp:30:38
    #29 0x7f740fb5827f  (/lib64/libc.so.6+0x2727f)

SUMMARY: AddressSanitizer: double-free /var/tmp/portage/app-arch/zxc-0.10.0/work/zxc-0.10.0/src/lib/zxc_common.c:56:5 in zxc_aligned_free
==941==ABORTING

@mhx
Copy link
Copy Markdown
Owner

mhx commented Apr 18, 2026

Here's another trace of the double-free error, this time without the mkdwarfs progress messing things up:

./mkdwarfs -i ~/perl-install-small -o /dev/null --force -C zxc:level=3 -S 10 --no-progress
I 22:44:41.504497 scanning "/home/mhx/perl-install-small"
I 22:44:45.148198 waiting for background scanners...
I 22:44:45.828920 scanning CPU time: 29.91s
I 22:44:45.828963 assigning directory and link inodes...
I 22:44:45.893716 finalizing file inodes...
I 22:44:46.923017 saved 266.1 MiB / 610.1 MiB (43.6%) in 22,802/26,401 duplicate files
I 22:44:46.924503 assigning device inodes...
I 22:44:46.953288 assigning pipe/socket inodes...
I 22:44:46.981978 building metadata...
I 22:44:46.982008 building blocks...
I 22:44:46.982179 saving names and symlinks...
I 22:44:46.985648 waiting for segmenting/blockifying to finish...
I 22:44:47.054575 updating name and link indices...
=================================================================
==3051==ERROR: AddressSanitizer: attempting double-free on 0x7bbe98a57800 in thread T3:
    #0 0x55b9e4626cca in free /var/tmp/portage/llvm-runtimes/compiler-rt-sanitizers-22.1.2/work/compiler-rt/lib/asan/asan_malloc_linux.cpp:51:3
    #1 0x7fbec574d161 in zxc_aligned_free /var/tmp/portage/app-arch/zxc-0.10.0/work/zxc-0.10.0/src/lib/zxc_common.c:56:5
    #2 0x7fbec574d161 in zxc_cctx_free /var/tmp/portage/app-arch/zxc-0.10.0/work/zxc-0.10.0/src/lib/zxc_common.c:151:9
    #3 0x7fbec5754629 in zxc_compress_block /var/tmp/portage/app-arch/zxc-0.10.0/work/zxc-0.10.0/src/lib/zxc_dispatch.c:919:13
    #4 0x55b9e598a435 in dwarfs::(anonymous namespace)::zxc_block_compressor::compress(dwarfs::shared_byte_buffer const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const*) const /home/mhx/git/github/dwarfs/src/compression/zxc.cpp:103:9
    #5 0x55b9e4c91624 in dwarfs::block_compressor::compress(dwarfs::shared_byte_buffer const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&) const /home/mhx/git/github/dwarfs/include/dwarfs/block_compressor.h:65:19
    #6 0x55b9e4c67acd in dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()::operator()() /home/mhx/git/github/dwarfs/src/writer/filesystem_writer.cpp:266:25
    #7 0x55b9e4c677c4 in void std::__invoke_impl<void, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&>(std::__invoke_other, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14
    #8 0x55b9e4c67764 in std::enable_if<is_invocable_r_v<void, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&>, void>::type std::__invoke_r<void, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:111:2
    #9 0x55b9e4c675e0 in void std::move_only_function<void ()>::_S_invoke<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(std::_Mofunc_base*) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/mofunc_impl.h:219:11
    #10 0x55b9e48b4695 in std::move_only_function<void ()>::operator()() /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/mofunc_impl.h:184:9
    #11 0x55b9e48b4648 in void std::__invoke_impl<void, std::move_only_function<void ()>&>(std::__invoke_other, std::move_only_function<void ()>&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14
    #12 0x55b9e48b4628 in std::__invoke_result<std::move_only_function<void ()>&>::type std::__invoke<std::move_only_function<void ()>&>(std::move_only_function<void ()>&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:96:14
    #13 0x55b9e48b45fc in decltype(auto) std::__apply_impl<std::move_only_function<void ()>&, std::tuple<>&>(std::move_only_function<void ()>&, std::tuple<>&, std::integer_sequence<unsigned long, ...>) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/tuple:2302:14
    #14 0x55b9e48b45b0 in decltype(auto) std::apply<std::move_only_function<void ()>&, std::tuple<>&>(std::move_only_function<void ()>&, std::tuple<>&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/tuple:2313:14
    #15 0x55b9e4c683b4 in bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)::operator()(dwarfs::internal::detail::worker_context&) /home/mhx/git/github/dwarfs/include/dwarfs/internal/worker_group.h:216:11
    #16 0x55b9e4c6836c in dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'() std::__invoke_impl<void, bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&>(std::__invoke_other, bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14
    #17 0x55b9e4c682fc in std::enable_if<is_invocable_r_v<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'(), bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&>, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>::type std::__invoke_r<void, bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&>(bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:111:2
    #18 0x55b9e4c681e8 in void std::move_only_function<void (dwarfs::internal::detail::worker_context&)>::_S_invoke<bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)>(std::_Mofunc_base*, dwarfs::internal::detail::worker_context&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/mofunc_impl.h:219:11
    #19 0x55b9e59092d0 in std::move_only_function<void (dwarfs::internal::detail::worker_context&)>::operator()(dwarfs::internal::detail::worker_context&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/mofunc_impl.h:184:9
    #20 0x55b9e590503b in dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::do_work(dwarfs::internal::detail::worker_context&, bool) /home/mhx/git/github/dwarfs/src/internal/worker_group.cpp:237:9
    #21 0x55b9e5904ab6 in dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()::operator()() /home/mhx/git/github/dwarfs/src/internal/worker_group.cpp:85:9
    #22 0x55b9e59045d4 in void std::__invoke_impl<void, dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>(std::__invoke_other, dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()&&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14
    #23 0x55b9e5904594 in std::__invoke_result<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>::type std::__invoke<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>(dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()&&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:96:14
    #24 0x55b9e590456c in void std::thread::_Invoker<std::tuple<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>>::_M_invoke<0ul>(std::_Index_tuple<0ul>) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_thread.h:292:13
    #25 0x55b9e5904544 in std::thread::_Invoker<std::tuple<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>>::operator()() /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_thread.h:299:11
    #26 0x55b9e590433c in std::thread::_State_impl<std::thread::_Invoker<std::tuple<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>>>::_M_run() /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_thread.h:244:13
    #27 0x7fbec52e7913 in execute_native_thread_routine /var/tmp/portage/sys-devel/gcc-15.2.1_p20260214/work/gcc-15-20260214/libstdc++-v3/src/c++11/thread.cc:104:18
    #28 0x55b9e462014f in asan_thread_start(void*) /var/tmp/portage/llvm-runtimes/compiler-rt-sanitizers-22.1.2/work/compiler-rt/lib/asan/asan_interceptors.cpp:246:28
    #29 0x7fbec507d251  (/lib64/libc.so.6+0x8c251)
    #30 0x7fbec50f9e5b  (/lib64/libc.so.6+0x108e5b)

0x7bbe98a57800 is located 0 bytes inside of 1805632-byte region [0x7bbe98a57800,0x7bbe98c10540)
freed by thread T8 here:
    #0 0x55b9e4626cca in free /var/tmp/portage/llvm-runtimes/compiler-rt-sanitizers-22.1.2/work/compiler-rt/lib/asan/asan_malloc_linux.cpp:51:3
    #1 0x7fbec574d161 in zxc_aligned_free /var/tmp/portage/app-arch/zxc-0.10.0/work/zxc-0.10.0/src/lib/zxc_common.c:56:5
    #2 0x7fbec574d161 in zxc_cctx_free /var/tmp/portage/app-arch/zxc-0.10.0/work/zxc-0.10.0/src/lib/zxc_common.c:151:9

previously allocated by thread T0 here:
    #0 0x55b9e46277ab in posix_memalign /var/tmp/portage/llvm-runtimes/compiler-rt-sanitizers-22.1.2/work/compiler-rt/lib/asan/asan_malloc_linux.cpp:139:3
    #1 0x7fbec574cde8 in zxc_aligned_malloc /var/tmp/portage/app-arch/zxc-0.10.0/work/zxc-0.10.0/src/lib/zxc_common.c:42:9
    #2 0x7fbec574cde8 in zxc_cctx_init /var/tmp/portage/app-arch/zxc-0.10.0/work/zxc-0.10.0/src/lib/zxc_common.c:120:36
    #3 0x7fbec575314c in zxc_create_cctx /var/tmp/portage/app-arch/zxc-0.10.0/work/zxc-0.10.0/src/lib/zxc_dispatch.c:670:22
    #4 0x55b9e598b0a7 in std::__detail::_MakeUniq<dwarfs::(anonymous namespace)::zxc_block_compressor>::__single_object std::make_unique<dwarfs::(anonymous namespace)::zxc_block_compressor, dwarfs::(anonymous namespace)::zxc_block_compressor const&>(dwarfs::(anonymous namespace)::zxc_block_compressor const&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/unique_ptr.h:1070:34
    #5 0x55b9e5989efb in dwarfs::(anonymous namespace)::zxc_block_compressor::clone() const /home/mhx/git/github/dwarfs/src/compression/zxc.cpp:84:12
    #6 0x55b9e46adeb1 in dwarfs::block_compressor::block_compressor(dwarfs::block_compressor const&) /home/mhx/git/github/dwarfs/include/dwarfs/block_compressor.h:54:25
    #7 0x55b9e46ae953 in dwarfs::writer::contextual_option<dwarfs::writer::detail::categorized_option_policy<dwarfs::block_compressor>>::get() const /home/mhx/git/github/dwarfs/include/dwarfs/writer/contextual_option.h:93:35
    #8 0x55b9e468638d in dwarfs::tool::mkdwarfs_main(int, char**, dwarfs::tool::iolayer const&) /home/mhx/git/github/dwarfs/tools/src/mkdwarfs_main.cpp:1511:33
    #9 0x55b9e47657e2 in dwarfs::tool::main_adapter::operator()(int, char**) const /home/mhx/git/github/dwarfs/tools/src/tool/main_adapter.cpp:99:10
    #10 0x55b9e4767259 in dwarfs::tool::main_adapter::safe(int, char**) const::$_0::operator()() const /home/mhx/git/github/dwarfs/tools/src/tool/main_adapter.cpp:113:33
    #11 0x55b9e4767164 in int std::__invoke_impl<int, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&>(std::__invoke_other, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14
    #12 0x55b9e4767104 in std::enable_if<is_invocable_r_v<int, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&>, int>::type std::__invoke_r<int, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&>(dwarfs::tool::main_adapter::safe(int, char**) const::$_0&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:114:9
    #13 0x55b9e4766f90 in std::_Function_handler<int (), dwarfs::tool::main_adapter::safe(int, char**) const::$_0>::_M_invoke(std::_Any_data const&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_function.h:290:9
    #14 0x55b9e4769c9b in std::function<int ()>::operator()() const /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_function.h:591:9
    #15 0x55b9e4769829 in dwarfs::tool::safe_main(std::function<int ()> const&) /home/mhx/git/github/dwarfs/tools/src/tool/safe_main.cpp:69:14
    #16 0x55b9e47667cb in dwarfs::tool::main_adapter::safe(int, char**) const /home/mhx/git/github/dwarfs/tools/src/tool/main_adapter.cpp:113:10
    #17 0x55b9e4816905 in main /home/mhx/git/github/dwarfs/tools/src/mkdwarfs.cpp:30:38
    #18 0x7fbec501827f  (/lib64/libc.so.6+0x2727f)

Thread T3 created by T0 here:
    #0 0x55b9e46026b5 in pthread_create /var/tmp/portage/llvm-runtimes/compiler-rt-sanitizers-22.1.2/work/compiler-rt/lib/asan/asan_interceptors.cpp:257:3
    #1 0x7fbec52e79e8 in __gthread_create(unsigned long*, void* (*)(void*), void*) /var/tmp/portage/sys-devel/gcc-15.2.1_p20260214/work/build/x86_64-pc-linux-gnu/libstdc++-v3/include/x86_64-pc-linux-gnu/bits/gthr-default.h:709:35
    #2 0x7fbec52e79e8 in std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State>>, void (*)()) /var/tmp/portage/sys-devel/gcc-15.2.1_p20260214/work/gcc-15-20260214/libstdc++-v3/src/c++11/thread.cc:172:37
    #3 0x55b9e5903f70 in decltype(::new((void*)(0)) std::thread(std::declval<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>())) std::construct_at<std::thread, dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>(std::thread*, dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()&&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/stl_construct.h:97:39
    #4 0x55b9e59013a9 in void std::allocator_traits<std::allocator<std::thread>>::construct<std::thread, dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>(std::allocator<std::thread>&, std::thread*, dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()&&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/alloc_traits.h:540:4
    #5 0x55b9e59013a9 in std::thread& std::vector<std::thread, std::allocator<std::thread>>::emplace_back<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>(dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()&&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/vector.tcc:117:6
    #6 0x55b9e5901004 in dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>) /home/mhx/git/github/dwarfs/src/internal/worker_group.cpp:81:16
    #7 0x55b9e59005ab in std::__detail::_MakeUniq<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>>::__single_object std::make_unique<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>, dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>>(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>&&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/unique_ptr.h:1070:34
    #8 0x55b9e5900350 in std::unique_ptr<dwarfs::internal::detail::worker_group_impl, std::default_delete<dwarfs::internal::detail::worker_group_impl>> dwarfs::detail::unique_ptr_policy<dwarfs::internal::detail::worker_group_impl>::create<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>, dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>>(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>&&) /home/mhx/git/github/dwarfs/include/dwarfs/detail/logging_class_factory.h:47:12
    #9 0x55b9e58fa293 in dwarfs::detail::unique_ptr_policy<dwarfs::internal::detail::worker_group_impl>::return_type dwarfs::detail::logging_class_factory::create_impl<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_, dwarfs::detail::unique_ptr_policy<dwarfs::internal::detail::worker_group_impl>, dwarfs::prod_logger_policy, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>>(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>&&) /home/mhx/git/github/dwarfs/include/dwarfs/detail/logging_class_factory.h:85:14
    #10 0x55b9e58fa042 in dwarfs::detail::unique_ptr_policy<dwarfs::internal::detail::worker_group_impl>::return_type dwarfs::detail::logging_class_factory::create_impl<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_, dwarfs::detail::unique_ptr_policy<dwarfs::internal::detail::worker_group_impl>, dwarfs::debug_logger_policy, dwarfs::prod_logger_policy, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>>(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>&&) /home/mhx/git/github/dwarfs/include/dwarfs/detail/logging_class_factory.h:89:14
    #11 0x55b9e58f9f9f in dwarfs::detail::unique_ptr_policy<dwarfs::internal::detail::worker_group_impl>::return_type dwarfs::detail::logging_class_factory::create_unwrap<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_, dwarfs::detail::unique_ptr_policy<dwarfs::internal::detail::worker_group_impl>, dwarfs::debug_logger_policy, dwarfs::prod_logger_policy, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>>(dwarfs::logger&, std::type_identity<std::tuple<dwarfs::debug_logger_policy, dwarfs::prod_logger_policy>>, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>&&) /home/mhx/git/github/dwarfs/include/dwarfs/detail/logging_class_factory.h:77:12
    #12 0x55b9e58f9f4f in dwarfs::detail::unique_ptr_policy<dwarfs::internal::detail::worker_group_impl>::return_type dwarfs::detail::logging_class_factory::create<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_, dwarfs::detail::unique_ptr_policy<dwarfs::internal::detail::worker_group_impl>, std::tuple<dwarfs::debug_logger_policy, dwarfs::prod_logger_policy>, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>>(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>&&) /home/mhx/git/github/dwarfs/include/dwarfs/detail/logging_class_factory.h:66:12
    #13 0x55b9e58f9eff in std::unique_ptr<dwarfs::internal::detail::worker_group_impl, std::default_delete<dwarfs::internal::detail::worker_group_impl>> dwarfs::make_unique_logging_object<dwarfs::internal::detail::worker_group_impl, dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_, std::tuple<dwarfs::debug_logger_policy, dwarfs::prod_logger_policy>, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>>(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>&&) /home/mhx/git/github/dwarfs/include/dwarfs/logger.h:395:10
    #14 0x55b9e58f9e4f in dwarfs::internal::detail::make_worker_group_impl(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>&&) /home/mhx/git/github/dwarfs/src/internal/worker_group.cpp:278:10
    #15 0x55b9e48aaae4 in dwarfs::internal::basic_worker_group<>::basic_worker_group<dwarfs::internal::basic_worker_group<>::basic_worker_group(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options) requires sizeof...(T...) == 0::'lambda'(unsigned long)>(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options, dwarfs::internal::basic_worker_group<>::basic_worker_group(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options) requires sizeof...(T...) == 0::'lambda'(unsigned long)&&) /home/mhx/git/github/dwarfs/include/dwarfs/internal/worker_group.h:198:15
    #16 0x55b9e48a9649 in dwarfs::internal::basic_worker_group<>::basic_worker_group(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options) requires sizeof...(T...) == 0 /home/mhx/git/github/dwarfs/include/dwarfs/internal/worker_group.h:154:9
    #17 0x55b9e5828444 in std::__detail::_MakeUniq<dwarfs::internal::basic_worker_group<>>::__single_object std::make_unique<dwarfs::internal::basic_worker_group<>, dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options>(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options&&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/unique_ptr.h:1070:34
    #18 0x55b9e5827fd6 in dwarfs::thread_pool::thread_pool(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, unsigned long, unsigned long, int) /home/mhx/git/github/dwarfs/src/thread_pool.cpp:44:11
    #19 0x55b9e4685a51 in dwarfs::tool::mkdwarfs_main(int, char**, dwarfs::tool::iolayer const&) /home/mhx/git/github/dwarfs/tools/src/mkdwarfs_main.cpp:1473:15
    #20 0x55b9e47657e2 in dwarfs::tool::main_adapter::operator()(int, char**) const /home/mhx/git/github/dwarfs/tools/src/tool/main_adapter.cpp:99:10
    #21 0x55b9e4767259 in dwarfs::tool::main_adapter::safe(int, char**) const::$_0::operator()() const /home/mhx/git/github/dwarfs/tools/src/tool/main_adapter.cpp:113:33
    #22 0x55b9e4767164 in int std::__invoke_impl<int, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&>(std::__invoke_other, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14
    #23 0x55b9e4767104 in std::enable_if<is_invocable_r_v<int, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&>, int>::type std::__invoke_r<int, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&>(dwarfs::tool::main_adapter::safe(int, char**) const::$_0&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:114:9
    #24 0x55b9e4766f90 in std::_Function_handler<int (), dwarfs::tool::main_adapter::safe(int, char**) const::$_0>::_M_invoke(std::_Any_data const&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_function.h:290:9
    #25 0x55b9e4769c9b in std::function<int ()>::operator()() const /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_function.h:591:9
    #26 0x55b9e4769829 in dwarfs::tool::safe_main(std::function<int ()> const&) /home/mhx/git/github/dwarfs/tools/src/tool/safe_main.cpp:69:14
    #27 0x55b9e47667cb in dwarfs::tool::main_adapter::safe(int, char**) const /home/mhx/git/github/dwarfs/tools/src/tool/main_adapter.cpp:113:10
    #28 0x55b9e4816905 in main /home/mhx/git/github/dwarfs/tools/src/mkdwarfs.cpp:30:38
    #29 0x7fbec501827f  (/lib64/libc.so.6+0x2727f)

Thread T8 created by T0 here:
    #0 0x55b9e46026b5 in pthread_create /var/tmp/portage/llvm-runtimes/compiler-rt-sanitizers-22.1.2/work/compiler-rt/lib/asan/asan_interceptors.cpp:257:3
    #1 0x7fbec52e79e8 in __gthread_create(unsigned long*, void* (*)(void*), void*) /var/tmp/portage/sys-devel/gcc-15.2.1_p20260214/work/build/x86_64-pc-linux-gnu/libstdc++-v3/include/x86_64-pc-linux-gnu/bits/gthr-default.h:709:35
    #2 0x7fbec52e79e8 in std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State>>, void (*)()) /var/tmp/portage/sys-devel/gcc-15.2.1_p20260214/work/gcc-15-20260214/libstdc++-v3/src/c++11/thread.cc:172:37
    #3 0x55b9e5903f70 in decltype(::new((void*)(0)) std::thread(std::declval<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>())) std::construct_at<std::thread, dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>(std::thread*, dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()&&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/stl_construct.h:97:39
    #4 0x55b9e59013a9 in void std::allocator_traits<std::allocator<std::thread>>::construct<std::thread, dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>(std::allocator<std::thread>&, std::thread*, dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()&&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/alloc_traits.h:540:4
    #5 0x55b9e59013a9 in std::thread& std::vector<std::thread, std::allocator<std::thread>>::emplace_back<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>(dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()&&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/vector.tcc:117:6
    #6 0x55b9e5901004 in dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>) /home/mhx/git/github/dwarfs/src/internal/worker_group.cpp:81:16
    #7 0x55b9e59005ab in std::__detail::_MakeUniq<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>>::__single_object std::make_unique<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>, dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>>(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>&&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/unique_ptr.h:1070:34
    #8 0x55b9e5900350 in std::unique_ptr<dwarfs::internal::detail::worker_group_impl, std::default_delete<dwarfs::internal::detail::worker_group_impl>> dwarfs::detail::unique_ptr_policy<dwarfs::internal::detail::worker_group_impl>::create<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>, dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>>(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>&&) /home/mhx/git/github/dwarfs/include/dwarfs/detail/logging_class_factory.h:47:12
    #9 0x55b9e58fa293 in dwarfs::detail::unique_ptr_policy<dwarfs::internal::detail::worker_group_impl>::return_type dwarfs::detail::logging_class_factory::create_impl<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_, dwarfs::detail::unique_ptr_policy<dwarfs::internal::detail::worker_group_impl>, dwarfs::prod_logger_policy, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>>(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>&&) /home/mhx/git/github/dwarfs/include/dwarfs/detail/logging_class_factory.h:85:14
    #10 0x55b9e58fa042 in dwarfs::detail::unique_ptr_policy<dwarfs::internal::detail::worker_group_impl>::return_type dwarfs::detail::logging_class_factory::create_impl<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_, dwarfs::detail::unique_ptr_policy<dwarfs::internal::detail::worker_group_impl>, dwarfs::debug_logger_policy, dwarfs::prod_logger_policy, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>>(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>&&) /home/mhx/git/github/dwarfs/include/dwarfs/detail/logging_class_factory.h:89:14
    #11 0x55b9e58f9f9f in dwarfs::detail::unique_ptr_policy<dwarfs::internal::detail::worker_group_impl>::return_type dwarfs::detail::logging_class_factory::create_unwrap<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_, dwarfs::detail::unique_ptr_policy<dwarfs::internal::detail::worker_group_impl>, dwarfs::debug_logger_policy, dwarfs::prod_logger_policy, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>>(dwarfs::logger&, std::type_identity<std::tuple<dwarfs::debug_logger_policy, dwarfs::prod_logger_policy>>, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>&&) /home/mhx/git/github/dwarfs/include/dwarfs/detail/logging_class_factory.h:77:12
    #12 0x55b9e58f9f4f in dwarfs::detail::unique_ptr_policy<dwarfs::internal::detail::worker_group_impl>::return_type dwarfs::detail::logging_class_factory::create<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_, dwarfs::detail::unique_ptr_policy<dwarfs::internal::detail::worker_group_impl>, std::tuple<dwarfs::debug_logger_policy, dwarfs::prod_logger_policy>, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>>(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>&&) /home/mhx/git/github/dwarfs/include/dwarfs/detail/logging_class_factory.h:66:12
    #13 0x55b9e58f9eff in std::unique_ptr<dwarfs::internal::detail::worker_group_impl, std::default_delete<dwarfs::internal::detail::worker_group_impl>> dwarfs::make_unique_logging_object<dwarfs::internal::detail::worker_group_impl, dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_, std::tuple<dwarfs::debug_logger_policy, dwarfs::prod_logger_policy>, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>>(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>&&) /home/mhx/git/github/dwarfs/include/dwarfs/logger.h:395:10
    #14 0x55b9e58f9e4f in dwarfs::internal::detail::make_worker_group_impl(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>&&) /home/mhx/git/github/dwarfs/src/internal/worker_group.cpp:278:10
    #15 0x55b9e48aaae4 in dwarfs::internal::basic_worker_group<>::basic_worker_group<dwarfs::internal::basic_worker_group<>::basic_worker_group(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options) requires sizeof...(T...) == 0::'lambda'(unsigned long)>(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options, dwarfs::internal::basic_worker_group<>::basic_worker_group(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options) requires sizeof...(T...) == 0::'lambda'(unsigned long)&&) /home/mhx/git/github/dwarfs/include/dwarfs/internal/worker_group.h:198:15
    #16 0x55b9e48a9649 in dwarfs::internal::basic_worker_group<>::basic_worker_group(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options) requires sizeof...(T...) == 0 /home/mhx/git/github/dwarfs/include/dwarfs/internal/worker_group.h:154:9
    #17 0x55b9e5828444 in std::__detail::_MakeUniq<dwarfs::internal::basic_worker_group<>>::__single_object std::make_unique<dwarfs::internal::basic_worker_group<>, dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options>(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options&&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/unique_ptr.h:1070:34
    #18 0x55b9e5827fd6 in dwarfs::thread_pool::thread_pool(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, unsigned long, unsigned long, int) /home/mhx/git/github/dwarfs/src/thread_pool.cpp:44:11
    #19 0x55b9e4685a51 in dwarfs::tool::mkdwarfs_main(int, char**, dwarfs::tool::iolayer const&) /home/mhx/git/github/dwarfs/tools/src/mkdwarfs_main.cpp:1473:15
    #20 0x55b9e47657e2 in dwarfs::tool::main_adapter::operator()(int, char**) const /home/mhx/git/github/dwarfs/tools/src/tool/main_adapter.cpp:99:10
    #21 0x55b9e4767259 in dwarfs::tool::main_adapter::safe(int, char**) const::$_0::operator()() const /home/mhx/git/github/dwarfs/tools/src/tool/main_adapter.cpp:113:33
    #22 0x55b9e4767164 in int std::__invoke_impl<int, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&>(std::__invoke_other, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14
    #23 0x55b9e4767104 in std::enable_if<is_invocable_r_v<int, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&>, int>::type std::__invoke_r<int, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&>(dwarfs::tool::main_adapter::safe(int, char**) const::$_0&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:114:9
    #24 0x55b9e4766f90 in std::_Function_handler<int (), dwarfs::tool::main_adapter::safe(int, char**) const::$_0>::_M_invoke(std::_Any_data const&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_function.h:290:9
    #25 0x55b9e4769c9b in std::function<int ()>::operator()() const /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_function.h:591:9
    #26 0x55b9e4769829 in dwarfs::tool::safe_main(std::function<int ()> const&) /home/mhx/git/github/dwarfs/tools/src/tool/safe_main.cpp:69:14
    #27 0x55b9e47667cb in dwarfs::tool::main_adapter::safe(int, char**) const /home/mhx/git/github/dwarfs/tools/src/tool/main_adapter.cpp:113:10
    #28 0x55b9e4816905 in main /home/mhx/git/github/dwarfs/tools/src/mkdwarfs.cpp:30:38
    #29 0x7fbec501827f  (/lib64/libc.so.6+0x2727f)

SUMMARY: AddressSanitizer: double-free /var/tmp/portage/app-arch/zxc-0.10.0/work/zxc-0.10.0/src/lib/zxc_common.c:56:5 in zxc_aligned_free
==3051==ABORTING

@mhx
Copy link
Copy Markdown
Owner

mhx commented Apr 18, 2026

Yeah, this felt like some kind of race condition given how non-deterministic it was. And thread sanitizer triggered literally within milliseconds:

./mkdwarfs -i ~/perl-install-small -o /dev/null --force -C zxc:level=3 -S 10 --no-progress
I 22:48:41.216736 scanning "/home/mhx/perl-install-small"
I 22:48:42.815466 waiting for background scanners...
I 22:48:42.881067 scanning CPU time: 10.82s
I 22:48:42.881110 assigning directory and link inodes...
I 22:48:42.885590 finalizing file inodes...
I 22:48:42.949855 saved 266.1 MiB / 610.1 MiB (43.6%) in 22,802/26,401 duplicate files
I 22:48:42.950249 assigning device inodes...
I 22:48:42.952149 assigning pipe/socket inodes...
I 22:48:42.954039 building metadata...
I 22:48:42.954065 building blocks...
I 22:48:42.954234 saving names and symlinks...
I 22:48:42.963034 waiting for segmenting/blockifying to finish...
I 22:48:42.965137 updating name and link indices...
ThreadSanitizer: CHECK failed: sanitizer_allocator_secondary.h:139 "((chunks_[idx])) == ((h))" (0x7f7e64f47000, 0x7f7e76d74000) (tid=8652)
==================
WARNING: ThreadSanitizer: data race (pid=8649)
  Write of size 4 at 0x722c00002d50 by thread T4:
    #0 zxc_compress_block /var/tmp/portage/app-arch/zxc-0.10.0/work/zxc-0.10.0/src/lib/zxc_dispatch.c:912:24 (libzxc.so.3+0x3bbe5)
    #1 dwarfs::(anonymous namespace)::zxc_block_compressor::compress(dwarfs::shared_byte_buffer const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const*) const /home/mhx/git/github/dwarfs/src/compression/zxc.cpp:103:9 (mkdwarfs+0x95954f)
    #2 dwarfs::block_compressor::compress(dwarfs::shared_byte_buffer const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&) const /home/mhx/git/github/dwarfs/include/dwarfs/block_compressor.h:65:19 (mkdwarfs+0x4ef47a)
    #3 dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()::operator()() /home/mhx/git/github/dwarfs/src/writer/filesystem_writer.cpp:266:25 (mkdwarfs+0x4ef47a)
    #4 void std::__invoke_impl<void, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&>(std::__invoke_other, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14 (mkdwarfs+0x4ef47a)
    #5 std::enable_if<is_invocable_r_v<void, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&>, void>::type std::__invoke_r<void, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:111:2 (mkdwarfs+0x4ef47a)
    #6 void std::move_only_function<void ()>::_S_invoke<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(std::_Mofunc_base*) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/mofunc_impl.h:219:11 (mkdwarfs+0x4ef47a)
    #7 std::move_only_function<void ()>::operator()() /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/mofunc_impl.h:184:9 (mkdwarfs+0x4ef87f)
    #8 void std::__invoke_impl<void, std::move_only_function<void ()>&>(std::__invoke_other, std::move_only_function<void ()>&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14 (mkdwarfs+0x4ef87f)
    #9 std::__invoke_result<std::move_only_function<void ()>&>::type std::__invoke<std::move_only_function<void ()>&>(std::move_only_function<void ()>&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:96:14 (mkdwarfs+0x4ef87f)
    #10 decltype(auto) std::__apply_impl<std::move_only_function<void ()>&, std::tuple<>&>(std::move_only_function<void ()>&, std::tuple<>&, std::integer_sequence<unsigned long, ...>) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/tuple:2302:14 (mkdwarfs+0x4ef87f)
    #11 decltype(auto) std::apply<std::move_only_function<void ()>&, std::tuple<>&>(std::move_only_function<void ()>&, std::tuple<>&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/tuple:2313:14 (mkdwarfs+0x4ef87f)
    #12 bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)::operator()(dwarfs::internal::detail::worker_context&) /home/mhx/git/github/dwarfs/include/dwarfs/internal/worker_group.h:216:11 (mkdwarfs+0x4ef87f)
    #13 dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'() std::__invoke_impl<void, bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&>(std::__invoke_other, bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14 (mkdwarfs+0x4ef87f)
    #14 std::enable_if<is_invocable_r_v<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'(), bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&>, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>::type std::__invoke_r<void, bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&>(bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:111:2 (mkdwarfs+0x4ef87f)
    #15 void std::move_only_function<void (dwarfs::internal::detail::worker_context&)>::_S_invoke<bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)>(std::_Mofunc_base*, dwarfs::internal::detail::worker_context&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/mofunc_impl.h:219:11 (mkdwarfs+0x4ef87f)
    #16 std::move_only_function<void (dwarfs::internal::detail::worker_context&)>::operator()(dwarfs::internal::detail::worker_context&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/mofunc_impl.h:184:9 (mkdwarfs+0x9393a9)
    #17 dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::do_work(dwarfs::internal::detail::worker_context&, bool) /home/mhx/git/github/dwarfs/src/internal/worker_group.cpp:237:9 (mkdwarfs+0x9393a9)
    #18 dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()::operator()() /home/mhx/git/github/dwarfs/src/internal/worker_group.cpp:85:9 (mkdwarfs+0x9393a9)
    #19 void std::__invoke_impl<void, dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>(std::__invoke_other, dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()&&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14 (mkdwarfs+0x9393a9)
    #20 std::__invoke_result<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>::type std::__invoke<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>(dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()&&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:96:14 (mkdwarfs+0x9393a9)
    #21 void std::thread::_Invoker<std::tuple<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>>::_M_invoke<0ul>(std::_Index_tuple<0ul>) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_thread.h:292:13 (mkdwarfs+0x9393a9)
    #22 std::thread::_Invoker<std::tuple<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>>::operator()() /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_thread.h:299:11 (mkdwarfs+0x9393a9)
    #23 std::thread::_State_impl<std::thread::_Invoker<std::tuple<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>>>::_M_run() /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_thread.h:244:13 (mkdwarfs+0x9393a9)
    #24 execute_native_thread_routine /var/tmp/portage/sys-devel/gcc-15.2.1_p20260214/work/gcc-15-20260214/libstdc++-v3/src/c++11/thread.cc:104:18 (libstdc++.so.6+0xe7913) (BuildId: 8c10c8dff52d09015dc9af4324856aea4efa96ae)

  Previous write of size 4 at 0x722c00002d50 by thread T3:
    #0 zxc_compress_block /var/tmp/portage/app-arch/zxc-0.10.0/work/zxc-0.10.0/src/lib/zxc_dispatch.c:912:24 (libzxc.so.3+0x3bbe5)
    #1 dwarfs::(anonymous namespace)::zxc_block_compressor::compress(dwarfs::shared_byte_buffer const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const*) const /home/mhx/git/github/dwarfs/src/compression/zxc.cpp:103:9 (mkdwarfs+0x95954f)
    #2 dwarfs::block_compressor::compress(dwarfs::shared_byte_buffer const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&) const /home/mhx/git/github/dwarfs/include/dwarfs/block_compressor.h:65:19 (mkdwarfs+0x4ef47a)
    #3 dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()::operator()() /home/mhx/git/github/dwarfs/src/writer/filesystem_writer.cpp:266:25 (mkdwarfs+0x4ef47a)
    #4 void std::__invoke_impl<void, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&>(std::__invoke_other, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14 (mkdwarfs+0x4ef47a)
    #5 std::enable_if<is_invocable_r_v<void, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&>, void>::type std::__invoke_r<void, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:111:2 (mkdwarfs+0x4ef47a)
    #6 void std::move_only_function<void ()>::_S_invoke<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(std::_Mofunc_base*) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/mofunc_impl.h:219:11 (mkdwarfs+0x4ef47a)
    #7 std::move_only_function<void ()>::operator()() /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/mofunc_impl.h:184:9 (mkdwarfs+0x4ef87f)
    #8 void std::__invoke_impl<void, std::move_only_function<void ()>&>(std::__invoke_other, std::move_only_function<void ()>&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14 (mkdwarfs+0x4ef87f)
    #9 std::__invoke_result<std::move_only_function<void ()>&>::type std::__invoke<std::move_only_function<void ()>&>(std::move_only_function<void ()>&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:96:14 (mkdwarfs+0x4ef87f)
    #10 decltype(auto) std::__apply_impl<std::move_only_function<void ()>&, std::tuple<>&>(std::move_only_function<void ()>&, std::tuple<>&, std::integer_sequence<unsigned long, ...>) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/tuple:2302:14 (mkdwarfs+0x4ef87f)
    #11 decltype(auto) std::apply<std::move_only_function<void ()>&, std::tuple<>&>(std::move_only_function<void ()>&, std::tuple<>&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/tuple:2313:14 (mkdwarfs+0x4ef87f)
    #12 bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)::operator()(dwarfs::internal::detail::worker_context&) /home/mhx/git/github/dwarfs/include/dwarfs/internal/worker_group.h:216:11 (mkdwarfs+0x4ef87f)
    #13 dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'() std::__invoke_impl<void, bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&>(std::__invoke_other, bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14 (mkdwarfs+0x4ef87f)
    #14 std::enable_if<is_invocable_r_v<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'(), bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&>, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>::type std::__invoke_r<void, bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&>(bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:111:2 (mkdwarfs+0x4ef87f)
    #15 void std::move_only_function<void (dwarfs::internal::detail::worker_context&)>::_S_invoke<bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)>(std::_Mofunc_base*, dwarfs::internal::detail::worker_context&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/mofunc_impl.h:219:11 (mkdwarfs+0x4ef87f)
    #16 std::move_only_function<void (dwarfs::internal::detail::worker_context&)>::operator()(dwarfs::internal::detail::worker_context&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/mofunc_impl.h:184:9 (mkdwarfs+0x9393a9)
    #17 dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::do_work(dwarfs::internal::detail::worker_context&, bool) /home/mhx/git/github/dwarfs/src/internal/worker_group.cpp:237:9 (mkdwarfs+0x9393a9)
    #18 dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()::operator()() /home/mhx/git/github/dwarfs/src/internal/worker_group.cpp:85:9 (mkdwarfs+0x9393a9)
    #19 void std::__invoke_impl<void, dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>(std::__invoke_other, dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()&&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14 (mkdwarfs+0x9393a9)
    #20 std::__invoke_result<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>::type std::__invoke<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>(dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()&&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:96:14 (mkdwarfs+0x9393a9)
    #21 void std::thread::_Invoker<std::tuple<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>>::_M_invoke<0ul>(std::_Index_tuple<0ul>) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_thread.h:292:13 (mkdwarfs+0x9393a9)
    #22 std::thread::_Invoker<std::tuple<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>>::operator()() /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_thread.h:299:11 (mkdwarfs+0x9393a9)
    #23 std::thread::_State_impl<std::thread::_Invoker<std::tuple<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>>>::_M_run() /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_thread.h:244:13 (mkdwarfs+0x9393a9)
    #24 execute_native_thread_routine /var/tmp/portage/sys-devel/gcc-15.2.1_p20260214/work/gcc-15-20260214/libstdc++-v3/src/c++11/thread.cc:104:18 (libstdc++.so.6+0xe7913) (BuildId: 8c10c8dff52d09015dc9af4324856aea4efa96ae)

  Location is heap block of size 176 at 0x722c00002cb0 allocated by main thread:
    #0 calloc /var/tmp/portage/llvm-runtimes/compiler-rt-sanitizers-22.1.2/work/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp:692:5 (mkdwarfs+0x2523ab)
    #1 zxc_create_cctx /var/tmp/portage/app-arch/zxc-0.10.0/work/zxc-0.10.0/src/lib/zxc_dispatch.c:658:39 (libzxc.so.3+0x3af67)
    #2 dwarfs::(anonymous namespace)::zxc_block_compressor::zxc_block_compressor(dwarfs::(anonymous namespace)::zxc_block_compressor const&) /home/mhx/git/github/dwarfs/src/compression/zxc.cpp:75:13 (mkdwarfs+0x95921e)
    #3 std::__detail::_MakeUniq<dwarfs::(anonymous namespace)::zxc_block_compressor>::__single_object std::make_unique<dwarfs::(anonymous namespace)::zxc_block_compressor, dwarfs::(anonymous namespace)::zxc_block_compressor const&>(dwarfs::(anonymous namespace)::zxc_block_compressor const&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/unique_ptr.h:1070:34 (mkdwarfs+0x95921e)
    #4 dwarfs::(anonymous namespace)::zxc_block_compressor::clone() const /home/mhx/git/github/dwarfs/src/compression/zxc.cpp:84:12 (mkdwarfs+0x95921e)
    #5 dwarfs::block_compressor::block_compressor(dwarfs::block_compressor const&) /home/mhx/git/github/dwarfs/include/dwarfs/block_compressor.h:54:25 (mkdwarfs+0x2eab30)
    #6 dwarfs::writer::contextual_option<dwarfs::writer::detail::categorized_option_policy<dwarfs::block_compressor>>::get() const /home/mhx/git/github/dwarfs/include/dwarfs/writer/contextual_option.h:93:35 (mkdwarfs+0x2eab30)
    #7 dwarfs::tool::mkdwarfs_main(int, char**, dwarfs::tool::iolayer const&) /home/mhx/git/github/dwarfs/tools/src/mkdwarfs_main.cpp:1511:33 (mkdwarfs+0x2eab30)
    #8 dwarfs::tool::main_adapter::operator()(int, char**) const /home/mhx/git/github/dwarfs/tools/src/tool/main_adapter.cpp:99:10 (mkdwarfs+0x332c39)
    #9 dwarfs::tool::main_adapter::safe(int, char**) const::$_0::operator()() const /home/mhx/git/github/dwarfs/tools/src/tool/main_adapter.cpp:113:33 (mkdwarfs+0x332c39)
    #10 int std::__invoke_impl<int, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&>(std::__invoke_other, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14 (mkdwarfs+0x332c39)
    #11 std::enable_if<is_invocable_r_v<int, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&>, int>::type std::__invoke_r<int, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&>(dwarfs::tool::main_adapter::safe(int, char**) const::$_0&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:114:9 (mkdwarfs+0x332c39)
    #12 std::_Function_handler<int (), dwarfs::tool::main_adapter::safe(int, char**) const::$_0>::_M_invoke(std::_Any_data const&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_function.h:290:9 (mkdwarfs+0x332c39)
    #13 std::function<int ()>::operator()() const /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_function.h:591:9 (mkdwarfs+0x332f30)
    #14 dwarfs::tool::safe_main(std::function<int ()> const&) /home/mhx/git/github/dwarfs/tools/src/tool/safe_main.cpp:69:14 (mkdwarfs+0x332f30)
    #15 dwarfs::tool::main_adapter::safe(int, char**) const /home/mhx/git/github/dwarfs/tools/src/tool/main_adapter.cpp:113:10 (mkdwarfs+0x332970)
    #16 main /home/mhx/git/github/dwarfs/tools/src/mkdwarfs.cpp:30:38 (mkdwarfs+0x36cd09)

  Thread T4 'compress3' (tid=8654, running) created by main thread at:
    #0 pthread_create /var/tmp/portage/llvm-runtimes/compiler-rt-sanitizers-22.1.2/work/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp:1078:3 (mkdwarfs+0x2541fe)
    #1 __gthread_create(unsigned long*, void* (*)(void*), void*) /var/tmp/portage/sys-devel/gcc-15.2.1_p20260214/work/build/x86_64-pc-linux-gnu/libstdc++-v3/include/x86_64-pc-linux-gnu/bits/gthr-default.h:709:35 (libstdc++.so.6+0xe79e8) (BuildId: 8c10c8dff52d09015dc9af4324856aea4efa96ae)
    #2 std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State>>, void (*)()) /var/tmp/portage/sys-devel/gcc-15.2.1_p20260214/work/gcc-15-20260214/libstdc++-v3/src/c++11/thread.cc:172:37 (libstdc++.so.6+0xe79e8)
    #3 dwarfs::internal::basic_worker_group<>::basic_worker_group<dwarfs::internal::basic_worker_group<>::basic_worker_group(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options) requires sizeof...(T...) == 0::'lambda'(unsigned long)>(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options, dwarfs::internal::basic_worker_group<>::basic_worker_group(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options) requires sizeof...(T...) == 0::'lambda'(unsigned long)&&) /home/mhx/git/github/dwarfs/include/dwarfs/internal/worker_group.h:198:15 (mkdwarfs+0x8fbde0)
    #4 dwarfs::internal::basic_worker_group<>::basic_worker_group(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options) requires sizeof...(T...) == 0 /home/mhx/git/github/dwarfs/include/dwarfs/internal/worker_group.h:154:9 (mkdwarfs+0x8fbde0)
    #5 std::__detail::_MakeUniq<dwarfs::internal::basic_worker_group<>>::__single_object std::make_unique<dwarfs::internal::basic_worker_group<>, dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options>(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options&&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/unique_ptr.h:1070:34 (mkdwarfs+0x8fbde0)
    #6 dwarfs::thread_pool::thread_pool(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, unsigned long, unsigned long, int) /home/mhx/git/github/dwarfs/src/thread_pool.cpp:44:11 (mkdwarfs+0x8fbde0)
    #7 dwarfs::tool::mkdwarfs_main(int, char**, dwarfs::tool::iolayer const&) /home/mhx/git/github/dwarfs/tools/src/mkdwarfs_main.cpp:1473:15 (mkdwarfs+0x2ea4b1)
    #8 dwarfs::tool::main_adapter::operator()(int, char**) const /home/mhx/git/github/dwarfs/tools/src/tool/main_adapter.cpp:99:10 (mkdwarfs+0x332c39)
    #9 dwarfs::tool::main_adapter::safe(int, char**) const::$_0::operator()() const /home/mhx/git/github/dwarfs/tools/src/tool/main_adapter.cpp:113:33 (mkdwarfs+0x332c39)
    #10 int std::__invoke_impl<int, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&>(std::__invoke_other, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14 (mkdwarfs+0x332c39)
    #11 std::enable_if<is_invocable_r_v<int, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&>, int>::type std::__invoke_r<int, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&>(dwarfs::tool::main_adapter::safe(int, char**) const::$_0&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:114:9 (mkdwarfs+0x332c39)
    #12 std::_Function_handler<int (), dwarfs::tool::main_adapter::safe(int, char**) const::$_0>::_M_invoke(std::_Any_data const&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_function.h:290:9 (mkdwarfs+0x332c39)
    #13 std::function<int ()>::operator()() const /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_function.h:591:9 (mkdwarfs+0x332f30)
    #14 dwarfs::tool::safe_main(std::function<int ()> const&) /home/mhx/git/github/dwarfs/tools/src/tool/safe_main.cpp:69:14 (mkdwarfs+0x332f30)
    #15 dwarfs::tool::main_adapter::safe(int, char**) const /home/mhx/git/github/dwarfs/tools/src/tool/main_adapter.cpp:113:10 (mkdwarfs+0x332970)
    #16 main /home/mhx/git/github/dwarfs/tools/src/mkdwarfs.cpp:30:38 (mkdwarfs+0x36cd09)

  Thread T3 'compress2' (tid=8653, running) created by main thread at:
    #0 pthread_create /var/tmp/portage/llvm-runtimes/compiler-rt-sanitizers-22.1.2/work/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp:1078:3 (mkdwarfs+0x2541fe)
    #1 __gthread_create(unsigned long*, void* (*)(void*), void*) /var/tmp/portage/sys-devel/gcc-15.2.1_p20260214/work/build/x86_64-pc-linux-gnu/libstdc++-v3/include/x86_64-pc-linux-gnu/bits/gthr-default.h:709:35 (libstdc++.so.6+0xe79e8) (BuildId: 8c10c8dff52d09015dc9af4324856aea4efa96ae)
    #2 std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State>>, void (*)()) /var/tmp/portage/sys-devel/gcc-15.2.1_p20260214/work/gcc-15-20260214/libstdc++-v3/src/c++11/thread.cc:172:37 (libstdc++.so.6+0xe79e8)
    #3 dwarfs::internal::basic_worker_group<>::basic_worker_group<dwarfs::internal::basic_worker_group<>::basic_worker_group(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options) requires sizeof...(T...) == 0::'lambda'(unsigned long)>(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options, dwarfs::internal::basic_worker_group<>::basic_worker_group(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options) requires sizeof...(T...) == 0::'lambda'(unsigned long)&&) /home/mhx/git/github/dwarfs/include/dwarfs/internal/worker_group.h:198:15 (mkdwarfs+0x8fbde0)
    #4 dwarfs::internal::basic_worker_group<>::basic_worker_group(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options) requires sizeof...(T...) == 0 /home/mhx/git/github/dwarfs/include/dwarfs/internal/worker_group.h:154:9 (mkdwarfs+0x8fbde0)
    #5 std::__detail::_MakeUniq<dwarfs::internal::basic_worker_group<>>::__single_object std::make_unique<dwarfs::internal::basic_worker_group<>, dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options>(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options&&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/unique_ptr.h:1070:34 (mkdwarfs+0x8fbde0)
    #6 dwarfs::thread_pool::thread_pool(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, unsigned long, unsigned long, int) /home/mhx/git/github/dwarfs/src/thread_pool.cpp:44:11 (mkdwarfs+0x8fbde0)
    #7 dwarfs::tool::mkdwarfs_main(int, char**, dwarfs::tool::iolayer const&) /home/mhx/git/github/dwarfs/tools/src/mkdwarfs_main.cpp:1473:15 (mkdwarfs+0x2ea4b1)
    #8 dwarfs::tool::main_adapter::operator()(int, char**) const /home/mhx/git/github/dwarfs/tools/src/tool/main_adapter.cpp:99:10 (mkdwarfs+0x332c39)
    #9 dwarfs::tool::main_adapter::safe(int, char**) const::$_0::operator()() const /home/mhx/git/github/dwarfs/tools/src/tool/main_adapter.cpp:113:33 (mkdwarfs+0x332c39)
    #10 int std::__invoke_impl<int, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&>(std::__invoke_other, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14 (mkdwarfs+0x332c39)
    #11 std::enable_if<is_invocable_r_v<int, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&>, int>::type std::__invoke_r<int, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&>(dwarfs::tool::main_adapter::safe(int, char**) const::$_0&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:114:9 (mkdwarfs+0x332c39)
    #12 std::_Function_handler<int (), dwarfs::tool::main_adapter::safe(int, char**) const::$_0>::_M_invoke(std::_Any_data const&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_function.h:290:9 (mkdwarfs+0x332c39)
    #13 std::function<int ()>::operator()() const /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_function.h:591:9 (mkdwarfs+0x332f30)
    #14 dwarfs::tool::safe_main(std::function<int ()> const&) /home/mhx/git/github/dwarfs/tools/src/tool/safe_main.cpp:69:14 (mkdwarfs+0x332f30)
    #15 dwarfs::tool::main_adapter::safe(int, char**) const /home/mhx/git/github/dwarfs/tools/src/tool/main_adapter.cpp:113:10 (mkdwarfs+0x332970)
    #16 main /home/mhx/git/github/dwarfs/tools/src/mkdwarfs.cpp:30:38 (mkdwarfs+0x36cd09)

SUMMARY: ThreadSanitizer: data race /var/tmp/portage/app-arch/zxc-0.10.0/work/zxc-0.10.0/src/lib/zxc_dispatch.c:912:24 in zxc_compress_block
==================
==================
WARNING: ThreadSanitizer: data race (pid=8649)
  Write of size 8 at 0x722c00002d58 by thread T8:
    #0 zxc_compress_block /var/tmp/portage/app-arch/zxc-0.10.0/work/zxc-0.10.0/src/lib/zxc_dispatch.c:913:29 (libzxc.so.3+0x3bbf8)
    #1 dwarfs::(anonymous namespace)::zxc_block_compressor::compress(dwarfs::shared_byte_buffer const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const*) const /home/mhx/git/github/dwarfs/src/compression/zxc.cpp:103:9 (mkdwarfs+0x95954f)
    #2 dwarfs::block_compressor::compress(dwarfs::shared_byte_buffer const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&) const /home/mhx/git/github/dwarfs/include/dwarfs/block_compressor.h:65:19 (mkdwarfs+0x4ef47a)
    #3 dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()::operator()() /home/mhx/git/github/dwarfs/src/writer/filesystem_writer.cpp:266:25 (mkdwarfs+0x4ef47a)
    #4 void std::__invoke_impl<void, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&>(std::__invoke_other, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14 (mkdwarfs+0x4ef47a)
    #5 std::enable_if<is_invocable_r_v<void, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&>, void>::type std::__invoke_r<void, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:111:2 (mkdwarfs+0x4ef47a)
    #6 void std::move_only_function<void ()>::_S_invoke<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(std::_Mofunc_base*) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/mofunc_impl.h:219:11 (mkdwarfs+0x4ef47a)
    #7 std::move_only_function<void ()>::operator()() /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/mofunc_impl.h:184:9 (mkdwarfs+0x4ef87f)
    #8 void std::__invoke_impl<void, std::move_only_function<void ()>&>(std::__invoke_other, std::move_only_function<void ()>&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14 (mkdwarfs+0x4ef87f)
    #9 std::__invoke_result<std::move_only_function<void ()>&>::type std::__invoke<std::move_only_function<void ()>&>(std::move_only_function<void ()>&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:96:14 (mkdwarfs+0x4ef87f)
    #10 decltype(auto) std::__apply_impl<std::move_only_function<void ()>&, std::tuple<>&>(std::move_only_function<void ()>&, std::tuple<>&, std::integer_sequence<unsigned long, ...>) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/tuple:2302:14 (mkdwarfs+0x4ef87f)
    #11 decltype(auto) std::apply<std::move_only_function<void ()>&, std::tuple<>&>(std::move_only_function<void ()>&, std::tuple<>&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/tuple:2313:14 (mkdwarfs+0x4ef87f)
    #12 bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)::operator()(dwarfs::internal::detail::worker_context&) /home/mhx/git/github/dwarfs/include/dwarfs/internal/worker_group.h:216:11 (mkdwarfs+0x4ef87f)
    #13 dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'() std::__invoke_impl<void, bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&>(std::__invoke_other, bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14 (mkdwarfs+0x4ef87f)
    #14 std::enable_if<is_invocable_r_v<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'(), bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&>, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>::type std::__invoke_r<void, bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&>(bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:111:2 (mkdwarfs+0x4ef87f)
    #15 void std::move_only_function<void (dwarfs::internal::detail::worker_context&)>::_S_invoke<bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)>(std::_Mofunc_base*, dwarfs::internal::detail::worker_context&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/mofunc_impl.h:219:11 (mkdwarfs+0x4ef87f)
    #16 std::move_only_function<void (dwarfs::internal::detail::worker_context&)>::operator()(dwarfs::internal::detail::worker_context&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/mofunc_impl.h:184:9 (mkdwarfs+0x9393a9)
    #17 dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::do_work(dwarfs::internal::detail::worker_context&, bool) /home/mhx/git/github/dwarfs/src/internal/worker_group.cpp:237:9 (mkdwarfs+0x9393a9)
    #18 dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()::operator()() /home/mhx/git/github/dwarfs/src/internal/worker_group.cpp:85:9 (mkdwarfs+0x9393a9)
    #19 void std::__invoke_impl<void, dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>(std::__invoke_other, dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()&&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14 (mkdwarfs+0x9393a9)
    #20 std::__invoke_result<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>::type std::__invoke<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>(dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()&&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:96:14 (mkdwarfs+0x9393a9)
    #21 void std::thread::_Invoker<std::tuple<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>>::_M_invoke<0ul>(std::_Index_tuple<0ul>) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_thread.h:292:13 (mkdwarfs+0x9393a9)
    #22 std::thread::_Invoker<std::tuple<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>>::operator()() /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_thread.h:299:11 (mkdwarfs+0x9393a9)
    #23 std::thread::_State_impl<std::thread::_Invoker<std::tuple<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>>>::_M_run() /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_thread.h:244:13 (mkdwarfs+0x9393a9)
    #24 execute_native_thread_routine /var/tmp/portage/sys-devel/gcc-15.2.1_p20260214/work/gcc-15-20260214/libstdc++-v3/src/c++11/thread.cc:104:18 (libstdc++.so.6+0xe7913) (BuildId: 8c10c8dff52d09015dc9af4324856aea4efa96ae)

  Previous write of size 8 at 0x722c00002d58 by thread T6:
    #0 zxc_compress_block /var/tmp/portage/app-arch/zxc-0.10.0/work/zxc-0.10.0/src/lib/zxc_dispatch.c:913:29 (libzxc.so.3+0x3bbf8)
    #1 dwarfs::(anonymous namespace)::zxc_block_compressor::compress(dwarfs::shared_byte_buffer const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const*) const /home/mhx/git/github/dwarfs/src/compression/zxc.cpp:103:9 (mkdwarfs+0x95954f)
    #2 dwarfs::block_compressor::compress(dwarfs::shared_byte_buffer const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&) const /home/mhx/git/github/dwarfs/include/dwarfs/block_compressor.h:65:19 (mkdwarfs+0x4ef47a)
    #3 dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()::operator()() /home/mhx/git/github/dwarfs/src/writer/filesystem_writer.cpp:266:25 (mkdwarfs+0x4ef47a)
    #4 void std::__invoke_impl<void, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&>(std::__invoke_other, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14 (mkdwarfs+0x4ef47a)
    #5 std::enable_if<is_invocable_r_v<void, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&>, void>::type std::__invoke_r<void, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:111:2 (mkdwarfs+0x4ef47a)
    #6 void std::move_only_function<void ()>::_S_invoke<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(std::_Mofunc_base*) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/mofunc_impl.h:219:11 (mkdwarfs+0x4ef47a)
    #7 std::move_only_function<void ()>::operator()() /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/mofunc_impl.h:184:9 (mkdwarfs+0x4ef87f)
    #8 void std::__invoke_impl<void, std::move_only_function<void ()>&>(std::__invoke_other, std::move_only_function<void ()>&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14 (mkdwarfs+0x4ef87f)
    #9 std::__invoke_result<std::move_only_function<void ()>&>::type std::__invoke<std::move_only_function<void ()>&>(std::move_only_function<void ()>&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:96:14 (mkdwarfs+0x4ef87f)
    #10 decltype(auto) std::__apply_impl<std::move_only_function<void ()>&, std::tuple<>&>(std::move_only_function<void ()>&, std::tuple<>&, std::integer_sequence<unsigned long, ...>) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/tuple:2302:14 (mkdwarfs+0x4ef87f)
    #11 decltype(auto) std::apply<std::move_only_function<void ()>&, std::tuple<>&>(std::move_only_function<void ()>&, std::tuple<>&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/tuple:2313:14 (mkdwarfs+0x4ef87f)
    #12 bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)::operator()(dwarfs::internal::detail::worker_context&) /home/mhx/git/github/dwarfs/include/dwarfs/internal/worker_group.h:216:11 (mkdwarfs+0x4ef87f)
    #13 dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'() std::__invoke_impl<void, bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&>(std::__invoke_other, bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14 (mkdwarfs+0x4ef87f)
    #14 std::enable_if<is_invocable_r_v<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'(), bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&>, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>::type std::__invoke_r<void, bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&>(bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:111:2 (mkdwarfs+0x4ef87f)
    #15 void std::move_only_function<void (dwarfs::internal::detail::worker_context&)>::_S_invoke<bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)>(std::_Mofunc_base*, dwarfs::internal::detail::worker_context&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/mofunc_impl.h:219:11 (mkdwarfs+0x4ef87f)
    #16 std::move_only_function<void (dwarfs::internal::detail::worker_context&)>::operator()(dwarfs::internal::detail::worker_context&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/mofunc_impl.h:184:9 (mkdwarfs+0x9393a9)
    #17 dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::do_work(dwarfs::internal::detail::worker_context&, bool) /home/mhx/git/github/dwarfs/src/internal/worker_group.cpp:237:9 (mkdwarfs+0x9393a9)
    #18 dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()::operator()() /home/mhx/git/github/dwarfs/src/internal/worker_group.cpp:85:9 (mkdwarfs+0x9393a9)
    #19 void std::__invoke_impl<void, dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>(std::__invoke_other, dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()&&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14 (mkdwarfs+0x9393a9)
    #20 std::__invoke_result<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>::type std::__invoke<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>(dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()&&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:96:14 (mkdwarfs+0x9393a9)
    #21 void std::thread::_Invoker<std::tuple<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>>::_M_invoke<0ul>(std::_Index_tuple<0ul>) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_thread.h:292:13 (mkdwarfs+0x9393a9)
    #22 std::thread::_Invoker<std::tuple<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>>::operator()() /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_thread.h:299:11 (mkdwarfs+0x9393a9)
    #23 std::thread::_State_impl<std::thread::_Invoker<std::tuple<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>>>::_M_run() /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_thread.h:244:13 (mkdwarfs+0x9393a9)
    #24 execute_native_thread_routine /var/tmp/portage/sys-devel/gcc-15.2.1_p20260214/work/gcc-15-20260214/libstdc++-v3/src/c++11/thread.cc:104:18 (libstdc++.so.6+0xe7913) (BuildId: 8c10c8dff52d09015dc9af4324856aea4efa96ae)

  Location is heap block of size 176 at 0x722c00002cb0 allocated by main thread:
    #0 calloc /var/tmp/portage/llvm-runtimes/compiler-rt-sanitizers-22.1.2/work/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp:692:5 (mkdwarfs+0x2523ab)
    #1 zxc_create_cctx /var/tmp/portage/app-arch/zxc-0.10.0/work/zxc-0.10.0/src/lib/zxc_dispatch.c:658:39 (libzxc.so.3+0x3af67)
    #2 dwarfs::(anonymous namespace)::zxc_block_compressor::zxc_block_compressor(dwarfs::(anonymous namespace)::zxc_block_compressor const&) /home/mhx/git/github/dwarfs/src/compression/zxc.cpp:75:13 (mkdwarfs+0x95921e)
    #3 std::__detail::_MakeUniq<dwarfs::(anonymous namespace)::zxc_block_compressor>::__single_object std::make_unique<dwarfs::(anonymous namespace)::zxc_block_compressor, dwarfs::(anonymous namespace)::zxc_block_compressor const&>(dwarfs::(anonymous namespace)::zxc_block_compressor const&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/unique_ptr.h:1070:34 (mkdwarfs+0x95921e)
    #4 dwarfs::(anonymous namespace)::zxc_block_compressor::clone() const /home/mhx/git/github/dwarfs/src/compression/zxc.cpp:84:12 (mkdwarfs+0x95921e)
    #5 dwarfs::block_compressor::block_compressor(dwarfs::block_compressor const&) /home/mhx/git/github/dwarfs/include/dwarfs/block_compressor.h:54:25 (mkdwarfs+0x2eab30)
    #6 dwarfs::writer::contextual_option<dwarfs::writer::detail::categorized_option_policy<dwarfs::block_compressor>>::get() const /home/mhx/git/github/dwarfs/include/dwarfs/writer/contextual_option.h:93:35 (mkdwarfs+0x2eab30)
    #7 dwarfs::tool::mkdwarfs_main(int, char**, dwarfs::tool::iolayer const&) /home/mhx/git/github/dwarfs/tools/src/mkdwarfs_main.cpp:1511:33 (mkdwarfs+0x2eab30)
    #8 dwarfs::tool::main_adapter::operator()(int, char**) const /home/mhx/git/github/dwarfs/tools/src/tool/main_adapter.cpp:99:10 (mkdwarfs+0x332c39)
    #9 dwarfs::tool::main_adapter::safe(int, char**) const::$_0::operator()() const /home/mhx/git/github/dwarfs/tools/src/tool/main_adapter.cpp:113:33 (mkdwarfs+0x332c39)
    #10 int std::__invoke_impl<int, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&>(std::__invoke_other, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14 (mkdwarfs+0x332c39)
    #11 std::enable_if<is_invocable_r_v<int, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&>, int>::type std::__invoke_r<int, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&>(dwarfs::tool::main_adapter::safe(int, char**) const::$_0&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:114:9 (mkdwarfs+0x332c39)
    #12 std::_Function_handler<int (), dwarfs::tool::main_adapter::safe(int, char**) const::$_0>::_M_invoke(std::_Any_data const&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_function.h:290:9 (mkdwarfs+0x332c39)
    #13 std::function<int ()>::operator()() const /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_function.h:591:9 (mkdwarfs+0x332f30)
    #14 dwarfs::tool::safe_main(std::function<int ()> const&) /home/mhx/git/github/dwarfs/tools/src/tool/safe_main.cpp:69:14 (mkdwarfs+0x332f30)
    #15 dwarfs::tool::main_adapter::safe(int, char**) const /home/mhx/git/github/dwarfs/tools/src/tool/main_adapter.cpp:113:10 (mkdwarfs+0x332970)
    #16 main /home/mhx/git/github/dwarfs/tools/src/mkdwarfs.cpp:30:38 (mkdwarfs+0x36cd09)

  Thread T8 'compress7' (tid=8658, running) created by main thread at:
    #0 pthread_create /var/tmp/portage/llvm-runtimes/compiler-rt-sanitizers-22.1.2/work/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp:1078:3 (mkdwarfs+0x2541fe)
    #1 __gthread_create(unsigned long*, void* (*)(void*), void*) /var/tmp/portage/sys-devel/gcc-15.2.1_p20260214/work/build/x86_64-pc-linux-gnu/libstdc++-v3/include/x86_64-pc-linux-gnu/bits/gthr-default.h:709:35 (libstdc++.so.6+0xe79e8) (BuildId: 8c10c8dff52d09015dc9af4324856aea4efa96ae)
    #2 std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State>>, void (*)()) /var/tmp/portage/sys-devel/gcc-15.2.1_p20260214/work/gcc-15-20260214/libstdc++-v3/src/c++11/thread.cc:172:37 (libstdc++.so.6+0xe79e8)
    #3 dwarfs::internal::basic_worker_group<>::basic_worker_group<dwarfs::internal::basic_worker_group<>::basic_worker_group(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options) requires sizeof...(T...) == 0::'lambda'(unsigned long)>(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options, dwarfs::internal::basic_worker_group<>::basic_worker_group(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options) requires sizeof...(T...) == 0::'lambda'(unsigned long)&&) /home/mhx/git/github/dwarfs/include/dwarfs/internal/worker_group.h:198:15 (mkdwarfs+0x8fbde0)
    #4 dwarfs::internal::basic_worker_group<>::basic_worker_group(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options) requires sizeof...(T...) == 0 /home/mhx/git/github/dwarfs/include/dwarfs/internal/worker_group.h:154:9 (mkdwarfs+0x8fbde0)
    #5 std::__detail::_MakeUniq<dwarfs::internal::basic_worker_group<>>::__single_object std::make_unique<dwarfs::internal::basic_worker_group<>, dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options>(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options&&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/unique_ptr.h:1070:34 (mkdwarfs+0x8fbde0)
    #6 dwarfs::thread_pool::thread_pool(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, unsigned long, unsigned long, int) /home/mhx/git/github/dwarfs/src/thread_pool.cpp:44:11 (mkdwarfs+0x8fbde0)
    #7 dwarfs::tool::mkdwarfs_main(int, char**, dwarfs::tool::iolayer const&) /home/mhx/git/github/dwarfs/tools/src/mkdwarfs_main.cpp:1473:15 (mkdwarfs+0x2ea4b1)
    #8 dwarfs::tool::main_adapter::operator()(int, char**) const /home/mhx/git/github/dwarfs/tools/src/tool/main_adapter.cpp:99:10 (mkdwarfs+0x332c39)
    #9 dwarfs::tool::main_adapter::safe(int, char**) const::$_0::operator()() const /home/mhx/git/github/dwarfs/tools/src/tool/main_adapter.cpp:113:33 (mkdwarfs+0x332c39)
    #10 int std::__invoke_impl<int, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&>(std::__invoke_other, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14 (mkdwarfs+0x332c39)
    #11 std::enable_if<is_invocable_r_v<int, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&>, int>::type std::__invoke_r<int, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&>(dwarfs::tool::main_adapter::safe(int, char**) const::$_0&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:114:9 (mkdwarfs+0x332c39)
    #12 std::_Function_handler<int (), dwarfs::tool::main_adapter::safe(int, char**) const::$_0>::_M_invoke(std::_Any_data const&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_function.h:290:9 (mkdwarfs+0x332c39)
    #13 std::function<int ()>::operator()() const /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_function.h:591:9 (mkdwarfs+0x332f30)
    #14 dwarfs::tool::safe_main(std::function<int ()> const&) /home/mhx/git/github/dwarfs/tools/src/tool/safe_main.cpp:69:14 (mkdwarfs+0x332f30)
    #15 dwarfs::tool::main_adapter::safe(int, char**) const /home/mhx/git/github/dwarfs/tools/src/tool/main_adapter.cpp:113:10 (mkdwarfs+0x332970)
    #16 main /home/mhx/git/github/dwarfs/tools/src/mkdwarfs.cpp:30:38 (mkdwarfs+0x36cd09)

  Thread T6 'compress5' (tid=8656, running) created by main thread at:
    #0 pthread_create /var/tmp/portage/llvm-runtimes/compiler-rt-sanitizers-22.1.2/work/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp:1078:3 (mkdwarfs+0x2541fe)
    #1 __gthread_create(unsigned long*, void* (*)(void*), void*) /var/tmp/portage/sys-devel/gcc-15.2.1_p20260214/work/build/x86_64-pc-linux-gnu/libstdc++-v3/include/x86_64-pc-linux-gnu/bits/gthr-default.h:709:35 (libstdc++.so.6+0xe79e8) (BuildId: 8c10c8dff52d09015dc9af4324856aea4efa96ae)
    #2 std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State>>, void (*)()) /var/tmp/portage/sys-devel/gcc-15.2.1_p20260214/work/gcc-15-20260214/libstdc++-v3/src/c++11/thread.cc:172:37 (libstdc++.so.6+0xe79e8)
    #3 dwarfs::internal::basic_worker_group<>::basic_worker_group<dwarfs::internal::basic_worker_group<>::basic_worker_group(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options) requires sizeof...(T...) == 0::'lambda'(unsigned long)>(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options, dwarfs::internal::basic_worker_group<>::basic_worker_group(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options) requires sizeof...(T...) == 0::'lambda'(unsigned long)&&) /home/mhx/git/github/dwarfs/include/dwarfs/internal/worker_group.h:198:15 (mkdwarfs+0x8fbde0)
    #4 dwarfs::internal::basic_worker_group<>::basic_worker_group(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options) requires sizeof...(T...) == 0 /home/mhx/git/github/dwarfs/include/dwarfs/internal/worker_group.h:154:9 (mkdwarfs+0x8fbde0)
    #5 std::__detail::_MakeUniq<dwarfs::internal::basic_worker_group<>>::__single_object std::make_unique<dwarfs::internal::basic_worker_group<>, dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options>(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options&&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/unique_ptr.h:1070:34 (mkdwarfs+0x8fbde0)
    #6 dwarfs::thread_pool::thread_pool(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, unsigned long, unsigned long, int) /home/mhx/git/github/dwarfs/src/thread_pool.cpp:44:11 (mkdwarfs+0x8fbde0)
    #7 dwarfs::tool::mkdwarfs_main(int, char**, dwarfs::tool::iolayer const&) /home/mhx/git/github/dwarfs/tools/src/mkdwarfs_main.cpp:1473:15 (mkdwarfs+0x2ea4b1)
    #8 dwarfs::tool::main_adapter::operator()(int, char**) const /home/mhx/git/github/dwarfs/tools/src/tool/main_adapter.cpp:99:10 (mkdwarfs+0x332c39)
    #9 dwarfs::tool::main_adapter::safe(int, char**) const::$_0::operator()() const /home/mhx/git/github/dwarfs/tools/src/tool/main_adapter.cpp:113:33 (mkdwarfs+0x332c39)
    #10 int std::__invoke_impl<int, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&>(std::__invoke_other, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14 (mkdwarfs+0x332c39)
    #11 std::enable_if<is_invocable_r_v<int, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&>, int>::type std::__invoke_r<int, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&>(dwarfs::tool::main_adapter::safe(int, char**) const::$_0&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:114:9 (mkdwarfs+0x332c39)
    #12 std::_Function_handler<int (), dwarfs::tool::main_adapter::safe(int, char**) const::$_0>::_M_invoke(std::_Any_data const&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_function.h:290:9 (mkdwarfs+0x332c39)
    #13 std::function<int ()>::operator()() const /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_function.h:591:9 (mkdwarfs+0x332f30)
    #14 dwarfs::tool::safe_main(std::function<int ()> const&) /home/mhx/git/github/dwarfs/tools/src/tool/safe_main.cpp:69:14 (mkdwarfs+0x332f30)
    #15 dwarfs::tool::main_adapter::safe(int, char**) const /home/mhx/git/github/dwarfs/tools/src/tool/main_adapter.cpp:113:10 (mkdwarfs+0x332970)
    #16 main /home/mhx/git/github/dwarfs/tools/src/mkdwarfs.cpp:30:38 (mkdwarfs+0x36cd09)

SUMMARY: ThreadSanitizer: data race /var/tmp/portage/app-arch/zxc-0.10.0/work/zxc-0.10.0/src/lib/zxc_dispatch.c:913:29 in zxc_compress_block
==================
==================
WARNING: ThreadSanitizer: data race (pid=8649)
  Write of size 4 at 0x722c00002d54 by thread T8:
    #0 zxc_compress_block /var/tmp/portage/app-arch/zxc-0.10.0/work/zxc-0.10.0/src/lib/zxc_dispatch.c:914:27 (libzxc.so.3+0x3bc07)
    #1 dwarfs::(anonymous namespace)::zxc_block_compressor::compress(dwarfs::shared_byte_buffer const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const*) const /home/mhx/git/github/dwarfs/src/compression/zxc.cpp:103:9 (mkdwarfs+0x95954f)
    #2 dwarfs::block_compressor::compress(dwarfs::shared_byte_buffer const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&) const /home/mhx/git/github/dwarfs/include/dwarfs/block_compressor.h:65:19 (mkdwarfs+0x4ef47a)
    #3 dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()::operator()() /home/mhx/git/github/dwarfs/src/writer/filesystem_writer.cpp:266:25 (mkdwarfs+0x4ef47a)
    #4 void std::__invoke_impl<void, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&>(std::__invoke_other, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14 (mkdwarfs+0x4ef47a)
    #5 std::enable_if<is_invocable_r_v<void, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&>, void>::type std::__invoke_r<void, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:111:2 (mkdwarfs+0x4ef47a)
    #6 void std::move_only_function<void ()>::_S_invoke<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(std::_Mofunc_base*) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/mofunc_impl.h:219:11 (mkdwarfs+0x4ef47a)
    #7 std::move_only_function<void ()>::operator()() /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/mofunc_impl.h:184:9 (mkdwarfs+0x4ef87f)
    #8 void std::__invoke_impl<void, std::move_only_function<void ()>&>(std::__invoke_other, std::move_only_function<void ()>&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14 (mkdwarfs+0x4ef87f)
    #9 std::__invoke_result<std::move_only_function<void ()>&>::type std::__invoke<std::move_only_function<void ()>&>(std::move_only_function<void ()>&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:96:14 (mkdwarfs+0x4ef87f)
    #10 decltype(auto) std::__apply_impl<std::move_only_function<void ()>&, std::tuple<>&>(std::move_only_function<void ()>&, std::tuple<>&, std::integer_sequence<unsigned long, ...>) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/tuple:2302:14 (mkdwarfs+0x4ef87f)
    #11 decltype(auto) std::apply<std::move_only_function<void ()>&, std::tuple<>&>(std::move_only_function<void ()>&, std::tuple<>&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/tuple:2313:14 (mkdwarfs+0x4ef87f)
    #12 bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)::operator()(dwarfs::internal::detail::worker_context&) /home/mhx/git/github/dwarfs/include/dwarfs/internal/worker_group.h:216:11 (mkdwarfs+0x4ef87f)
    #13 dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'() std::__invoke_impl<void, bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&>(std::__invoke_other, bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14 (mkdwarfs+0x4ef87f)
    #14 std::enable_if<is_invocable_r_v<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'(), bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&>, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>::type std::__invoke_r<void, bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&>(bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:111:2 (mkdwarfs+0x4ef87f)
    #15 void std::move_only_function<void (dwarfs::internal::detail::worker_context&)>::_S_invoke<bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)>(std::_Mofunc_base*, dwarfs::internal::detail::worker_context&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/mofunc_impl.h:219:11 (mkdwarfs+0x4ef87f)
    #16 std::move_only_function<void (dwarfs::internal::detail::worker_context&)>::operator()(dwarfs::internal::detail::worker_context&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/mofunc_impl.h:184:9 (mkdwarfs+0x9393a9)
    #17 dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::do_work(dwarfs::internal::detail::worker_context&, bool) /home/mhx/git/github/dwarfs/src/internal/worker_group.cpp:237:9 (mkdwarfs+0x9393a9)
    #18 dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()::operator()() /home/mhx/git/github/dwarfs/src/internal/worker_group.cpp:85:9 (mkdwarfs+0x9393a9)
    #19 void std::__invoke_impl<void, dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>(std::__invoke_other, dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()&&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14 (mkdwarfs+0x9393a9)
    #20 std::__invoke_result<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>::type std::__invoke<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>(dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()&&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:96:14 (mkdwarfs+0x9393a9)
    #21 void std::thread::_Invoker<std::tuple<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>>::_M_invoke<0ul>(std::_Index_tuple<0ul>) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_thread.h:292:13 (mkdwarfs+0x9393a9)
    #22 std::thread::_Invoker<std::tuple<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>>::operator()() /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_thread.h:299:11 (mkdwarfs+0x9393a9)
    #23 std::thread::_State_impl<std::thread::_Invoker<std::tuple<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>>>::_M_run() /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_thread.h:244:13 (mkdwarfs+0x9393a9)
    #24 execute_native_thread_routine /var/tmp/portage/sys-devel/gcc-15.2.1_p20260214/work/gcc-15-20260214/libstdc++-v3/src/c++11/thread.cc:104:18 (libstdc++.so.6+0xe7913) (BuildId: 8c10c8dff52d09015dc9af4324856aea4efa96ae)

  Previous write of size 4 at 0x722c00002d54 by thread T17:
    #0 zxc_compress_block /var/tmp/portage/app-arch/zxc-0.10.0/work/zxc-0.10.0/src/lib/zxc_dispatch.c:914:27 (libzxc.so.3+0x3bc07)
    #1 dwarfs::(anonymous namespace)::zxc_block_compressor::compress(dwarfs::shared_byte_buffer const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const*) const /home/mhx/git/github/dwarfs/src/compression/zxc.cpp:103:9 (mkdwarfs+0x95954f)
    #2 dwarfs::block_compressor::compress(dwarfs::shared_byte_buffer const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&) const /home/mhx/git/github/dwarfs/include/dwarfs/block_compressor.h:65:19 (mkdwarfs+0x4ef47a)
    #3 dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()::operator()() /home/mhx/git/github/dwarfs/src/writer/filesystem_writer.cpp:266:25 (mkdwarfs+0x4ef47a)
    #4 void std::__invoke_impl<void, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&>(std::__invoke_other, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14 (mkdwarfs+0x4ef47a)
    #5 std::enable_if<is_invocable_r_v<void, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&>, void>::type std::__invoke_r<void, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:111:2 (mkdwarfs+0x4ef47a)
    #6 void std::move_only_function<void ()>::_S_invoke<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(std::_Mofunc_base*) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/mofunc_impl.h:219:11 (mkdwarfs+0x4ef47a)
    #7 std::move_only_function<void ()>::operator()() /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/mofunc_impl.h:184:9 (mkdwarfs+0x4ef87f)
    #8 void std::__invoke_impl<void, std::move_only_function<void ()>&>(std::__invoke_other, std::move_only_function<void ()>&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14 (mkdwarfs+0x4ef87f)
    #9 std::__invoke_result<std::move_only_function<void ()>&>::type std::__invoke<std::move_only_function<void ()>&>(std::move_only_function<void ()>&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:96:14 (mkdwarfs+0x4ef87f)
    #10 decltype(auto) std::__apply_impl<std::move_only_function<void ()>&, std::tuple<>&>(std::move_only_function<void ()>&, std::tuple<>&, std::integer_sequence<unsigned long, ...>) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/tuple:2302:14 (mkdwarfs+0x4ef87f)
    #11 decltype(auto) std::apply<std::move_only_function<void ()>&, std::tuple<>&>(std::move_only_function<void ()>&, std::tuple<>&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/tuple:2313:14 (mkdwarfs+0x4ef87f)
    #12 bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)::operator()(dwarfs::internal::detail::worker_context&) /home/mhx/git/github/dwarfs/include/dwarfs/internal/worker_group.h:216:11 (mkdwarfs+0x4ef87f)
    #13 dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'() std::__invoke_impl<void, bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&>(std::__invoke_other, bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14 (mkdwarfs+0x4ef87f)
    #14 std::enable_if<is_invocable_r_v<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'(), bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&>, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>::type std::__invoke_r<void, bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&>(bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:111:2 (mkdwarfs+0x4ef87f)
    #15 void std::move_only_function<void (dwarfs::internal::detail::worker_context&)>::_S_invoke<bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)>(std::_Mofunc_base*, dwarfs::internal::detail::worker_context&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/mofunc_impl.h:219:11 (mkdwarfs+0x4ef87f)
    #16 std::move_only_function<void (dwarfs::internal::detail::worker_context&)>::operator()(dwarfs::internal::detail::worker_context&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/mofunc_impl.h:184:9 (mkdwarfs+0x9393a9)
    #17 dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::do_work(dwarfs::internal::detail::worker_context&, bool) /home/mhx/git/github/dwarfs/src/internal/worker_group.cpp:237:9 (mkdwarfs+0x9393a9)
    #18 dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()::operator()() /home/mhx/git/github/dwarfs/src/internal/worker_group.cpp:85:9 (mkdwarfs+0x9393a9)
    #19 void std::__invoke_impl<void, dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>(std::__invoke_other, dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()&&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14 (mkdwarfs+0x9393a9)
    #20 std::__invoke_result<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>::type std::__invoke<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>(dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()&&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:96:14 (mkdwarfs+0x9393a9)
    #21 void std::thread::_Invoker<std::tuple<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>>::_M_invoke<0ul>(std::_Index_tuple<0ul>) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_thread.h:292:13 (mkdwarfs+0x9393a9)
    #22 std::thread::_Invoker<std::tuple<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>>::operator()() /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_thread.h:299:11 (mkdwarfs+0x9393a9)
    #23 std::thread::_State_impl<std::thread::_Invoker<std::tuple<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>>>::_M_run() /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_thread.h:244:13 (mkdwarfs+0x9393a9)
    #24 execute_native_thread_routine /var/tmp/portage/sys-devel/gcc-15.2.1_p20260214/work/gcc-15-20260214/libstdc++-v3/src/c++11/thread.cc:104:18 (libstdc++.so.6+0xe7913) (BuildId: 8c10c8dff52d09015dc9af4324856aea4efa96ae)

  Location is heap block of size 176 at 0x722c00002cb0 allocated by main thread:
    #0 calloc /var/tmp/portage/llvm-runtimes/compiler-rt-sanitizers-22.1.2/work/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp:692:5 (mkdwarfs+0x2523ab)
    #1 zxc_create_cctx /var/tmp/portage/app-arch/zxc-0.10.0/work/zxc-0.10.0/src/lib/zxc_dispatch.c:658:39 (libzxc.so.3+0x3af67)
    #2 dwarfs::(anonymous namespace)::zxc_block_compressor::zxc_block_compressor(dwarfs::(anonymous namespace)::zxc_block_compressor const&) /home/mhx/git/github/dwarfs/src/compression/zxc.cpp:75:13 (mkdwarfs+0x95921e)
    #3 std::__detail::_MakeUniq<dwarfs::(anonymous namespace)::zxc_block_compressor>::__single_object std::make_unique<dwarfs::(anonymous namespace)::zxc_block_compressor, dwarfs::(anonymous namespace)::zxc_block_compressor const&>(dwarfs::(anonymous namespace)::zxc_block_compressor const&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/unique_ptr.h:1070:34 (mkdwarfs+0x95921e)
    #4 dwarfs::(anonymous namespace)::zxc_block_compressor::clone() const /home/mhx/git/github/dwarfs/src/compression/zxc.cpp:84:12 (mkdwarfs+0x95921e)
    #5 dwarfs::block_compressor::block_compressor(dwarfs::block_compressor const&) /home/mhx/git/github/dwarfs/include/dwarfs/block_compressor.h:54:25 (mkdwarfs+0x2eab30)
    #6 dwarfs::writer::contextual_option<dwarfs::writer::detail::categorized_option_policy<dwarfs::block_compressor>>::get() const /home/mhx/git/github/dwarfs/include/dwarfs/writer/contextual_option.h:93:35 (mkdwarfs+0x2eab30)
    #7 dwarfs::tool::mkdwarfs_main(int, char**, dwarfs::tool::iolayer const&) /home/mhx/git/github/dwarfs/tools/src/mkdwarfs_main.cpp:1511:33 (mkdwarfs+0x2eab30)
    #8 dwarfs::tool::main_adapter::operator()(int, char**) const /home/mhx/git/github/dwarfs/tools/src/tool/main_adapter.cpp:99:10 (mkdwarfs+0x332c39)
    #9 dwarfs::tool::main_adapter::safe(int, char**) const::$_0::operator()() const /home/mhx/git/github/dwarfs/tools/src/tool/main_adapter.cpp:113:33 (mkdwarfs+0x332c39)
    #10 int std::__invoke_impl<int, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&>(std::__invoke_other, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14 (mkdwarfs+0x332c39)
    #11 std::enable_if<is_invocable_r_v<int, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&>, int>::type std::__invoke_r<int, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&>(dwarfs::tool::main_adapter::safe(int, char**) const::$_0&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:114:9 (mkdwarfs+0x332c39)
    #12 std::_Function_handler<int (), dwarfs::tool::main_adapter::safe(int, char**) const::$_0>::_M_invoke(std::_Any_data const&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_function.h:290:9 (mkdwarfs+0x332c39)
    #13 std::function<int ()>::operator()() const /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_function.h:591:9 (mkdwarfs+0x332f30)
    #14 dwarfs::tool::safe_main(std::function<int ()> const&) /home/mhx/git/github/dwarfs/tools/src/tool/safe_main.cpp:69:14 (mkdwarfs+0x332f30)
    #15 dwarfs::tool::main_adapter::safe(int, char**) const /home/mhx/git/github/dwarfs/tools/src/tool/main_adapter.cpp:113:10 (mkdwarfs+0x332970)
    #16 main /home/mhx/git/github/dwarfs/tools/src/mkdwarfs.cpp:30:38 (mkdwarfs+0x36cd09)

  Thread T8 'compress7' (tid=8658, running) created by main thread at:
    #0 pthread_create /var/tmp/portage/llvm-runtimes/compiler-rt-sanitizers-22.1.2/work/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp:1078:3 (mkdwarfs+0x2541fe)
    #1 __gthread_create(unsigned long*, void* (*)(void*), void*) /var/tmp/portage/sys-devel/gcc-15.2.1_p20260214/work/build/x86_64-pc-linux-gnu/libstdc++-v3/include/x86_64-pc-linux-gnu/bits/gthr-default.h:709:35 (libstdc++.so.6+0xe79e8) (BuildId: 8c10c8dff52d09015dc9af4324856aea4efa96ae)
    #2 std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State>>, void (*)()) /var/tmp/portage/sys-devel/gcc-15.2.1_p20260214/work/gcc-15-20260214/libstdc++-v3/src/c++11/thread.cc:172:37 (libstdc++.so.6+0xe79e8)
    #3 dwarfs::internal::basic_worker_group<>::basic_worker_group<dwarfs::internal::basic_worker_group<>::basic_worker_group(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options) requires sizeof...(T...) == 0::'lambda'(unsigned long)>(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options, dwarfs::internal::basic_worker_group<>::basic_worker_group(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options) requires sizeof...(T...) == 0::'lambda'(unsigned long)&&) /home/mhx/git/github/dwarfs/include/dwarfs/internal/worker_group.h:198:15 (mkdwarfs+0x8fbde0)
    #4 dwarfs::internal::basic_worker_group<>::basic_worker_group(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options) requires sizeof...(T...) == 0 /home/mhx/git/github/dwarfs/include/dwarfs/internal/worker_group.h:154:9 (mkdwarfs+0x8fbde0)
    #5 std::__detail::_MakeUniq<dwarfs::internal::basic_worker_group<>>::__single_object std::make_unique<dwarfs::internal::basic_worker_group<>, dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options>(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options&&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/unique_ptr.h:1070:34 (mkdwarfs+0x8fbde0)
    #6 dwarfs::thread_pool::thread_pool(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, unsigned long, unsigned long, int) /home/mhx/git/github/dwarfs/src/thread_pool.cpp:44:11 (mkdwarfs+0x8fbde0)
    #7 dwarfs::tool::mkdwarfs_main(int, char**, dwarfs::tool::iolayer const&) /home/mhx/git/github/dwarfs/tools/src/mkdwarfs_main.cpp:1473:15 (mkdwarfs+0x2ea4b1)
    #8 dwarfs::tool::main_adapter::operator()(int, char**) const /home/mhx/git/github/dwarfs/tools/src/tool/main_adapter.cpp:99:10 (mkdwarfs+0x332c39)
    #9 dwarfs::tool::main_adapter::safe(int, char**) const::$_0::operator()() const /home/mhx/git/github/dwarfs/tools/src/tool/main_adapter.cpp:113:33 (mkdwarfs+0x332c39)
    #10 int std::__invoke_impl<int, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&>(std::__invoke_other, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14 (mkdwarfs+0x332c39)
    #11 std::enable_if<is_invocable_r_v<int, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&>, int>::type std::__invoke_r<int, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&>(dwarfs::tool::main_adapter::safe(int, char**) const::$_0&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:114:9 (mkdwarfs+0x332c39)
    #12 std::_Function_handler<int (), dwarfs::tool::main_adapter::safe(int, char**) const::$_0>::_M_invoke(std::_Any_data const&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_function.h:290:9 (mkdwarfs+0x332c39)
    #13 std::function<int ()>::operator()() const /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_function.h:591:9 (mkdwarfs+0x332f30)
    #14 dwarfs::tool::safe_main(std::function<int ()> const&) /home/mhx/git/github/dwarfs/tools/src/tool/safe_main.cpp:69:14 (mkdwarfs+0x332f30)
    #15 dwarfs::tool::main_adapter::safe(int, char**) const /home/mhx/git/github/dwarfs/tools/src/tool/main_adapter.cpp:113:10 (mkdwarfs+0x332970)
    #16 main /home/mhx/git/github/dwarfs/tools/src/mkdwarfs.cpp:30:38 (mkdwarfs+0x36cd09)

  Thread T17 'compress16' (tid=8667, running) created by main thread at:
    #0 pthread_create /var/tmp/portage/llvm-runtimes/compiler-rt-sanitizers-22.1.2/work/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp:1078:3 (mkdwarfs+0x2541fe)
    #1 __gthread_create(unsigned long*, void* (*)(void*), void*) /var/tmp/portage/sys-devel/gcc-15.2.1_p20260214/work/build/x86_64-pc-linux-gnu/libstdc++-v3/include/x86_64-pc-linux-gnu/bits/gthr-default.h:709:35 (libstdc++.so.6+0xe79e8) (BuildId: 8c10c8dff52d09015dc9af4324856aea4efa96ae)
    #2 std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State>>, void (*)()) /var/tmp/portage/sys-devel/gcc-15.2.1_p20260214/work/gcc-15-20260214/libstdc++-v3/src/c++11/thread.cc:172:37 (libstdc++.so.6+0xe79e8)
    #3 dwarfs::internal::basic_worker_group<>::basic_worker_group<dwarfs::internal::basic_worker_group<>::basic_worker_group(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options) requires sizeof...(T...) == 0::'lambda'(unsigned long)>(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options, dwarfs::internal::basic_worker_group<>::basic_worker_group(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options) requires sizeof...(T...) == 0::'lambda'(unsigned long)&&) /home/mhx/git/github/dwarfs/include/dwarfs/internal/worker_group.h:198:15 (mkdwarfs+0x8fbde0)
    #4 dwarfs::internal::basic_worker_group<>::basic_worker_group(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options) requires sizeof...(T...) == 0 /home/mhx/git/github/dwarfs/include/dwarfs/internal/worker_group.h:154:9 (mkdwarfs+0x8fbde0)
    #5 std::__detail::_MakeUniq<dwarfs::internal::basic_worker_group<>>::__single_object std::make_unique<dwarfs::internal::basic_worker_group<>, dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options>(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options&&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/unique_ptr.h:1070:34 (mkdwarfs+0x8fbde0)
    #6 dwarfs::thread_pool::thread_pool(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, unsigned long, unsigned long, int) /home/mhx/git/github/dwarfs/src/thread_pool.cpp:44:11 (mkdwarfs+0x8fbde0)
    #7 dwarfs::tool::mkdwarfs_main(int, char**, dwarfs::tool::iolayer const&) /home/mhx/git/github/dwarfs/tools/src/mkdwarfs_main.cpp:1473:15 (mkdwarfs+0x2ea4b1)
    #8 dwarfs::tool::main_adapter::operator()(int, char**) const /home/mhx/git/github/dwarfs/tools/src/tool/main_adapter.cpp:99:10 (mkdwarfs+0x332c39)
    #9 dwarfs::tool::main_adapter::safe(int, char**) const::$_0::operator()() const /home/mhx/git/github/dwarfs/tools/src/tool/main_adapter.cpp:113:33 (mkdwarfs+0x332c39)
    #10 int std::__invoke_impl<int, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&>(std::__invoke_other, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14 (mkdwarfs+0x332c39)
    #11 std::enable_if<is_invocable_r_v<int, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&>, int>::type std::__invoke_r<int, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&>(dwarfs::tool::main_adapter::safe(int, char**) const::$_0&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:114:9 (mkdwarfs+0x332c39)
    #12 std::_Function_handler<int (), dwarfs::tool::main_adapter::safe(int, char**) const::$_0>::_M_invoke(std::_Any_data const&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_function.h:290:9 (mkdwarfs+0x332c39)
    #13 std::function<int ()>::operator()() const /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_function.h:591:9 (mkdwarfs+0x332f30)
    #14 dwarfs::tool::safe_main(std::function<int ()> const&) /home/mhx/git/github/dwarfs/tools/src/tool/safe_main.cpp:69:14 (mkdwarfs+0x332f30)
    #15 dwarfs::tool::main_adapter::safe(int, char**) const /home/mhx/git/github/dwarfs/tools/src/tool/main_adapter.cpp:113:10 (mkdwarfs+0x332970)
    #16 main /home/mhx/git/github/dwarfs/tools/src/mkdwarfs.cpp:30:38 (mkdwarfs+0x36cd09)

SUMMARY: ThreadSanitizer: data race /var/tmp/portage/app-arch/zxc-0.10.0/work/zxc-0.10.0/src/lib/zxc_dispatch.c:914:27 in zxc_compress_block
==================
==================
WARNING: ThreadSanitizer: data race (pid=8649)
  Write of size 8 at 0x722c00002cc8 by thread T5:
    #0 zxc_cctx_free /var/tmp/portage/app-arch/zxc-0.10.0/work/zxc-0.10.0/src/lib/zxc_common.c:152:27 (libzxc.so.3+0x37286)
    #1 zxc_compress_block /var/tmp/portage/app-arch/zxc-0.10.0/work/zxc-0.10.0/src/lib/zxc_dispatch.c:919:13 (libzxc.so.3+0x3bc60)
    #2 dwarfs::(anonymous namespace)::zxc_block_compressor::compress(dwarfs::shared_byte_buffer const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const*) const /home/mhx/git/github/dwarfs/src/compression/zxc.cpp:103:9 (mkdwarfs+0x95954f)
    #3 dwarfs::block_compressor::compress(dwarfs::shared_byte_buffer const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&) const /home/mhx/git/github/dwarfs/include/dwarfs/block_compressor.h:65:19 (mkdwarfs+0x4ef47a)
    #4 dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()::operator()() /home/mhx/git/github/dwarfs/src/writer/filesystem_writer.cpp:266:25 (mkdwarfs+0x4ef47a)
    #5 void std::__invoke_impl<void, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&>(std::__invoke_other, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14 (mkdwarfs+0x4ef47a)
    #6 std::enable_if<is_invocable_r_v<void, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&>, void>::type std::__invoke_r<void, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:111:2 (mkdwarfs+0x4ef47a)
    #7 void std::move_only_function<void ()>::_S_invoke<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(std::_Mofunc_base*) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/mofunc_impl.h:219:11 (mkdwarfs+0x4ef47a)
    #8 std::move_only_function<void ()>::operator()() /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/mofunc_impl.h:184:9 (mkdwarfs+0x4ef87f)
    #9 void std::__invoke_impl<void, std::move_only_function<void ()>&>(std::__invoke_other, std::move_only_function<void ()>&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14 (mkdwarfs+0x4ef87f)
    #10 std::__invoke_result<std::move_only_function<void ()>&>::type std::__invoke<std::move_only_function<void ()>&>(std::move_only_function<void ()>&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:96:14 (mkdwarfs+0x4ef87f)
    #11 decltype(auto) std::__apply_impl<std::move_only_function<void ()>&, std::tuple<>&>(std::move_only_function<void ()>&, std::tuple<>&, std::integer_sequence<unsigned long, ...>) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/tuple:2302:14 (mkdwarfs+0x4ef87f)
    #12 decltype(auto) std::apply<std::move_only_function<void ()>&, std::tuple<>&>(std::move_only_function<void ()>&, std::tuple<>&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/tuple:2313:14 (mkdwarfs+0x4ef87f)
    #13 bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)::operator()(dwarfs::internal::detail::worker_context&) /home/mhx/git/github/dwarfs/include/dwarfs/internal/worker_group.h:216:11 (mkdwarfs+0x4ef87f)
    #14 dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'() std::__invoke_impl<void, bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&>(std::__invoke_other, bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14 (mkdwarfs+0x4ef87f)
    #15 std::enable_if<is_invocable_r_v<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'(), bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&>, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>::type std::__invoke_r<void, bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&>(bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:111:2 (mkdwarfs+0x4ef87f)
    #16 void std::move_only_function<void (dwarfs::internal::detail::worker_context&)>::_S_invoke<bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)>(std::_Mofunc_base*, dwarfs::internal::detail::worker_context&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/mofunc_impl.h:219:11 (mkdwarfs+0x4ef87f)
    #17 std::move_only_function<void (dwarfs::internal::detail::worker_context&)>::operator()(dwarfs::internal::detail::worker_context&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/mofunc_impl.h:184:9 (mkdwarfs+0x9393a9)
    #18 dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::do_work(dwarfs::internal::detail::worker_context&, bool) /home/mhx/git/github/dwarfs/src/internal/worker_group.cpp:237:9 (mkdwarfs+0x9393a9)
    #19 dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()::operator()() /home/mhx/git/github/dwarfs/src/internal/worker_group.cpp:85:9 (mkdwarfs+0x9393a9)
    #20 void std::__invoke_impl<void, dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>(std::__invoke_other, dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()&&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14 (mkdwarfs+0x9393a9)
    #21 std::__invoke_result<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>::type std::__invoke<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>(dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()&&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:96:14 (mkdwarfs+0x9393a9)
    #22 void std::thread::_Invoker<std::tuple<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>>::_M_invoke<0ul>(std::_Index_tuple<0ul>) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_thread.h:292:13 (mkdwarfs+0x9393a9)
    #23 std::thread::_Invoker<std::tuple<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>>::operator()() /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_thread.h:299:11 (mkdwarfs+0x9393a9)
    #24 std::thread::_State_impl<std::thread::_Invoker<std::tuple<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>>>::_M_run() /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_thread.h:244:13 (mkdwarfs+0x9393a9)
    #25 execute_native_thread_routine /var/tmp/portage/sys-devel/gcc-15.2.1_p20260214/work/gcc-15-20260214/libstdc++-v3/src/c++11/thread.cc:104:18 (libstdc++.so.6+0xe7913) (BuildId: 8c10c8dff52d09015dc9af4324856aea4efa96ae)

  Previous read of size 8 at 0x722c00002cc8 by thread T2:
    #0 zxc_cctx_free /var/tmp/portage/app-arch/zxc-0.10.0/work/zxc-0.10.0/src/lib/zxc_common.c:150:14 (libzxc.so.3+0x37270)
    #1 zxc_compress_block /var/tmp/portage/app-arch/zxc-0.10.0/work/zxc-0.10.0/src/lib/zxc_dispatch.c:919:13 (libzxc.so.3+0x3bc60)
    #2 dwarfs::(anonymous namespace)::zxc_block_compressor::compress(dwarfs::shared_byte_buffer const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const*) const /home/mhx/git/github/dwarfs/src/compression/zxc.cpp:103:9 (mkdwarfs+0x95954f)
    #3 dwarfs::block_compressor::compress(dwarfs::shared_byte_buffer const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&) const /home/mhx/git/github/dwarfs/include/dwarfs/block_compressor.h:65:19 (mkdwarfs+0x4ef47a)
    #4 dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()::operator()() /home/mhx/git/github/dwarfs/src/writer/filesystem_writer.cpp:266:25 (mkdwarfs+0x4ef47a)
    #5 void std::__invoke_impl<void, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&>(std::__invoke_other, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14 (mkdwarfs+0x4ef47a)
    #6 std::enable_if<is_invocable_r_v<void, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&>, void>::type std::__invoke_r<void, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:111:2 (mkdwarfs+0x4ef47a)
    #7 void std::move_only_function<void ()>::_S_invoke<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(std::_Mofunc_base*) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/mofunc_impl.h:219:11 (mkdwarfs+0x4ef47a)
    #8 std::move_only_function<void ()>::operator()() /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/mofunc_impl.h:184:9 (mkdwarfs+0x4ef87f)
    #9 void std::__invoke_impl<void, std::move_only_function<void ()>&>(std::__invoke_other, std::move_only_function<void ()>&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14 (mkdwarfs+0x4ef87f)
    #10 std::__invoke_result<std::move_only_function<void ()>&>::type std::__invoke<std::move_only_function<void ()>&>(std::move_only_function<void ()>&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:96:14 (mkdwarfs+0x4ef87f)
    #11 decltype(auto) std::__apply_impl<std::move_only_function<void ()>&, std::tuple<>&>(std::move_only_function<void ()>&, std::tuple<>&, std::integer_sequence<unsigned long, ...>) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/tuple:2302:14 (mkdwarfs+0x4ef87f)
    #12 decltype(auto) std::apply<std::move_only_function<void ()>&, std::tuple<>&>(std::move_only_function<void ()>&, std::tuple<>&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/tuple:2313:14 (mkdwarfs+0x4ef87f)
    #13 bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)::operator()(dwarfs::internal::detail::worker_context&) /home/mhx/git/github/dwarfs/include/dwarfs/internal/worker_group.h:216:11 (mkdwarfs+0x4ef87f)
    #14 dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'() std::__invoke_impl<void, bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&>(std::__invoke_other, bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14 (mkdwarfs+0x4ef87f)
    #15 std::enable_if<is_invocable_r_v<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'(), bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&>, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>::type std::__invoke_r<void, bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&>(bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:111:2 (mkdwarfs+0x4ef87f)
    #16 void std::move_only_function<void (dwarfs::internal::detail::worker_context&)>::_S_invoke<bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)>(std::_Mofunc_base*, dwarfs::internal::detail::worker_context&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/mofunc_impl.h:219:11 (mkdwarfs+0x4ef87f)
    #17 std::move_only_function<void (dwarfs::internal::detail::worker_context&)>::operator()(dwarfs::internal::detail::worker_context&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/mofunc_impl.h:184:9 (mkdwarfs+0x9393a9)
    #18 dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::do_work(dwarfs::internal::detail::worker_context&, bool) /home/mhx/git/github/dwarfs/src/internal/worker_group.cpp:237:9 (mkdwarfs+0x9393a9)
    #19 dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()::operator()() /home/mhx/git/github/dwarfs/src/internal/worker_group.cpp:85:9 (mkdwarfs+0x9393a9)
    #20 void std::__invoke_impl<void, dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>(std::__invoke_other, dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()&&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14 (mkdwarfs+0x9393a9)
    #21 std::__invoke_result<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>::type std::__invoke<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>(dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()&&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:96:14 (mkdwarfs+0x9393a9)
    #22 void std::thread::_Invoker<std::tuple<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>>::_M_invoke<0ul>(std::_Index_tuple<0ul>) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_thread.h:292:13 (mkdwarfs+0x9393a9)
    #23 std::thread::_Invoker<std::tuple<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>>::operator()() /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_thread.h:299:11 (mkdwarfs+0x9393a9)
    #24 std::thread::_State_impl<std::thread::_Invoker<std::tuple<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>>>::_M_run() /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_thread.h:244:13 (mkdwarfs+0x9393a9)
    #25 execute_native_thread_routine /var/tmp/portage/sys-devel/gcc-15.2.1_p20260214/work/gcc-15-20260214/libstdc++-v3/src/c++11/thread.cc:104:18 (libstdc++.so.6+0xe7913) (BuildId: 8c10c8dff52d09015dc9af4324856aea4efa96ae)

  Location is heap block of size 176 at 0x722c00002cb0 allocated by main thread:
    #0 calloc /var/tmp/portage/llvm-runtimes/compiler-rt-sanitizers-22.1.2/work/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp:692:5 (mkdwarfs+0x2523ab)
    #1 zxc_create_cctx /var/tmp/portage/app-arch/zxc-0.10.0/work/zxc-0.10.0/src/lib/zxc_dispatch.c:658:39 (libzxc.so.3+0x3af67)
    #2 dwarfs::(anonymous namespace)::zxc_block_compressor::zxc_block_compressor(dwarfs::(anonymous namespace)::zxc_block_compressor const&) /home/mhx/git/github/dwarfs/src/compression/zxc.cpp:75:13 (mkdwarfs+0x95921e)
    #3 std::__detail::_MakeUniq<dwarfs::(anonymous namespace)::zxc_block_compressor>::__single_object std::make_unique<dwarfs::(anonymous namespace)::zxc_block_compressor, dwarfs::(anonymous namespace)::zxc_block_compressor const&>(dwarfs::(anonymous namespace)::zxc_block_compressor const&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/unique_ptr.h:1070:34 (mkdwarfs+0x95921e)
    #4 dwarfs::(anonymous namespace)::zxc_block_compressor::clone() const /home/mhx/git/github/dwarfs/src/compression/zxc.cpp:84:12 (mkdwarfs+0x95921e)
    #5 dwarfs::block_compressor::block_compressor(dwarfs::block_compressor const&) /home/mhx/git/github/dwarfs/include/dwarfs/block_compressor.h:54:25 (mkdwarfs+0x2eab30)
    #6 dwarfs::writer::contextual_option<dwarfs::writer::detail::categorized_option_policy<dwarfs::block_compressor>>::get() const /home/mhx/git/github/dwarfs/include/dwarfs/writer/contextual_option.h:93:35 (mkdwarfs+0x2eab30)
    #7 dwarfs::tool::mkdwarfs_main(int, char**, dwarfs::tool::iolayer const&) /home/mhx/git/github/dwarfs/tools/src/mkdwarfs_main.cpp:1511:33 (mkdwarfs+0x2eab30)
    #8 dwarfs::tool::main_adapter::operator()(int, char**) const /home/mhx/git/github/dwarfs/tools/src/tool/main_adapter.cpp:99:10 (mkdwarfs+0x332c39)
    #9 dwarfs::tool::main_adapter::safe(int, char**) const::$_0::operator()() const /home/mhx/git/github/dwarfs/tools/src/tool/main_adapter.cpp:113:33 (mkdwarfs+0x332c39)
    #10 int std::__invoke_impl<int, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&>(std::__invoke_other, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14 (mkdwarfs+0x332c39)
    #11 std::enable_if<is_invocable_r_v<int, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&>, int>::type std::__invoke_r<int, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&>(dwarfs::tool::main_adapter::safe(int, char**) const::$_0&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:114:9 (mkdwarfs+0x332c39)
    #12 std::_Function_handler<int (), dwarfs::tool::main_adapter::safe(int, char**) const::$_0>::_M_invoke(std::_Any_data const&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_function.h:290:9 (mkdwarfs+0x332c39)
    #13 std::function<int ()>::operator()() const /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_function.h:591:9 (mkdwarfs+0x332f30)
    #14 dwarfs::tool::safe_main(std::function<int ()> const&) /home/mhx/git/github/dwarfs/tools/src/tool/safe_main.cpp:69:14 (mkdwarfs+0x332f30)
    #15 dwarfs::tool::main_adapter::safe(int, char**) const /home/mhx/git/github/dwarfs/tools/src/tool/main_adapter.cpp:113:10 (mkdwarfs+0x332970)
    #16 main /home/mhx/git/github/dwarfs/tools/src/mkdwarfs.cpp:30:38 (mkdwarfs+0x36cd09)

  Thread T5 'compress4' (tid=8655, running) created by main thread at:
    #0 pthread_create /var/tmp/portage/llvm-runtimes/compiler-rt-sanitizers-22.1.2/work/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp:1078:3 (mkdwarfs+0x2541fe)
    #1 __gthread_create(unsigned long*, void* (*)(void*), void*) /var/tmp/portage/sys-devel/gcc-15.2.1_p20260214/work/build/x86_64-pc-linux-gnu/libstdc++-v3/include/x86_64-pc-linux-gnu/bits/gthr-default.h:709:35 (libstdc++.so.6+0xe79e8) (BuildId: 8c10c8dff52d09015dc9af4324856aea4efa96ae)
    #2 std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State>>, void (*)()) /var/tmp/portage/sys-devel/gcc-15.2.1_p20260214/work/gcc-15-20260214/libstdc++-v3/src/c++11/thread.cc:172:37 (libstdc++.so.6+0xe79e8)
    #3 dwarfs::internal::basic_worker_group<>::basic_worker_group<dwarfs::internal::basic_worker_group<>::basic_worker_group(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options) requires sizeof...(T...) == 0::'lambda'(unsigned long)>(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options, dwarfs::internal::basic_worker_group<>::basic_worker_group(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options) requires sizeof...(T...) == 0::'lambda'(unsigned long)&&) /home/mhx/git/github/dwarfs/include/dwarfs/internal/worker_group.h:198:15 (mkdwarfs+0x8fbde0)
    #4 dwarfs::internal::basic_worker_group<>::basic_worker_group(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options) requires sizeof...(T...) == 0 /home/mhx/git/github/dwarfs/include/dwarfs/internal/worker_group.h:154:9 (mkdwarfs+0x8fbde0)
    #5 std::__detail::_MakeUniq<dwarfs::internal::basic_worker_group<>>::__single_object std::make_unique<dwarfs::internal::basic_worker_group<>, dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options>(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options&&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/unique_ptr.h:1070:34 (mkdwarfs+0x8fbde0)
    #6 dwarfs::thread_pool::thread_pool(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, unsigned long, unsigned long, int) /home/mhx/git/github/dwarfs/src/thread_pool.cpp:44:11 (mkdwarfs+0x8fbde0)
    #7 dwarfs::tool::mkdwarfs_main(int, char**, dwarfs::tool::iolayer const&) /home/mhx/git/github/dwarfs/tools/src/mkdwarfs_main.cpp:1473:15 (mkdwarfs+0x2ea4b1)
    #8 dwarfs::tool::main_adapter::operator()(int, char**) const /home/mhx/git/github/dwarfs/tools/src/tool/main_adapter.cpp:99:10 (mkdwarfs+0x332c39)
    #9 dwarfs::tool::main_adapter::safe(int, char**) const::$_0::operator()() const /home/mhx/git/github/dwarfs/tools/src/tool/main_adapter.cpp:113:33 (mkdwarfs+0x332c39)
    #10 int std::__invoke_impl<int, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&>(std::__invoke_other, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14 (mkdwarfs+0x332c39)
    #11 std::enable_if<is_invocable_r_v<int, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&>, int>::type std::__invoke_r<int, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&>(dwarfs::tool::main_adapter::safe(int, char**) const::$_0&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:114:9 (mkdwarfs+0x332c39)
    #12 std::_Function_handler<int (), dwarfs::tool::main_adapter::safe(int, char**) const::$_0>::_M_invoke(std::_Any_data const&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_function.h:290:9 (mkdwarfs+0x332c39)
    #13 std::function<int ()>::operator()() const /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_function.h:591:9 (mkdwarfs+0x332f30)
    #14 dwarfs::tool::safe_main(std::function<int ()> const&) /home/mhx/git/github/dwarfs/tools/src/tool/safe_main.cpp:69:14 (mkdwarfs+0x332f30)
    #15 dwarfs::tool::main_adapter::safe(int, char**) const /home/mhx/git/github/dwarfs/tools/src/tool/main_adapter.cpp:113:10 (mkdwarfs+0x332970)
    #16 main /home/mhx/git/github/dwarfs/tools/src/mkdwarfs.cpp:30:38 (mkdwarfs+0x36cd09)

  Thread T2 'compress1' (tid=8652, running) created by main thread at:
    #0 pthread_create /var/tmp/portage/llvm-runtimes/compiler-rt-sanitizers-22.1.2/work/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp:1078:3 (mkdwarfs+0x2541fe)
    #1 __gthread_create(unsigned long*, void* (*)(void*), void*) /var/tmp/portage/sys-devel/gcc-15.2.1_p20260214/work/build/x86_64-pc-linux-gnu/libstdc++-v3/include/x86_64-pc-linux-gnu/bits/gthr-default.h:709:35 (libstdc++.so.6+0xe79e8) (BuildId: 8c10c8dff52d09015dc9af4324856aea4efa96ae)
    #2 std::thread::_M_start_thread(std::unique_ptr<std::thread::_State, std::default_delete<std::thread::_State>>, void (*)()) /var/tmp/portage/sys-devel/gcc-15.2.1_p20260214/work/gcc-15-20260214/libstdc++-v3/src/c++11/thread.cc:172:37 (libstdc++.so.6+0xe79e8)
    #3 dwarfs::internal::basic_worker_group<>::basic_worker_group<dwarfs::internal::basic_worker_group<>::basic_worker_group(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options) requires sizeof...(T...) == 0::'lambda'(unsigned long)>(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options, dwarfs::internal::basic_worker_group<>::basic_worker_group(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options) requires sizeof...(T...) == 0::'lambda'(unsigned long)&&) /home/mhx/git/github/dwarfs/include/dwarfs/internal/worker_group.h:198:15 (mkdwarfs+0x8fbde0)
    #4 dwarfs::internal::basic_worker_group<>::basic_worker_group(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options) requires sizeof...(T...) == 0 /home/mhx/git/github/dwarfs/include/dwarfs/internal/worker_group.h:154:9 (mkdwarfs+0x8fbde0)
    #5 std::__detail::_MakeUniq<dwarfs::internal::basic_worker_group<>>::__single_object std::make_unique<dwarfs::internal::basic_worker_group<>, dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options>(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>&, dwarfs::internal::worker_group_options&&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/unique_ptr.h:1070:34 (mkdwarfs+0x8fbde0)
    #6 dwarfs::thread_pool::thread_pool(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, unsigned long, unsigned long, int) /home/mhx/git/github/dwarfs/src/thread_pool.cpp:44:11 (mkdwarfs+0x8fbde0)
    #7 dwarfs::tool::mkdwarfs_main(int, char**, dwarfs::tool::iolayer const&) /home/mhx/git/github/dwarfs/tools/src/mkdwarfs_main.cpp:1473:15 (mkdwarfs+0x2ea4b1)
    #8 dwarfs::tool::main_adapter::operator()(int, char**) const /home/mhx/git/github/dwarfs/tools/src/tool/main_adapter.cpp:99:10 (mkdwarfs+0x332c39)
    #9 dwarfs::tool::main_adapter::safe(int, char**) const::$_0::operator()() const /home/mhx/git/github/dwarfs/tools/src/tool/main_adapter.cpp:113:33 (mkdwarfs+0x332c39)
    #10 int std::__invoke_impl<int, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&>(std::__invoke_other, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14 (mkdwarfs+0x332c39)
    #11 std::enable_if<is_invocable_r_v<int, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&>, int>::type std::__invoke_r<int, dwarfs::tool::main_adapter::safe(int, char**) const::$_0&>(dwarfs::tool::main_adapter::safe(int, char**) const::$_0&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:114:9 (mkdwarfs+0x332c39)
    #12 std::_Function_handler<int (), dwarfs::tool::main_adapter::safe(int, char**) const::$_0>::_M_invoke(std::_Any_data const&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_function.h:290:9 (mkdwarfs+0x332c39)
    #13 std::function<int ()>::operator()() const /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_function.h:591:9 (mkdwarfs+0x332f30)
    #14 dwarfs::tool::safe_main(std::function<int ()> const&) /home/mhx/git/github/dwarfs/tools/src/tool/safe_main.cpp:69:14 (mkdwarfs+0x332f30)
    #15 dwarfs::tool::main_adapter::safe(int, char**) const /home/mhx/git/github/dwarfs/tools/src/tool/main_adapter.cpp:113:10 (mkdwarfs+0x332970)
    #16 main /home/mhx/git/github/dwarfs/tools/src/mkdwarfs.cpp:30:38 (mkdwarfs+0x36cd09)

SUMMARY: ThreadSanitizer: data race /var/tmp/portage/app-arch/zxc-0.10.0/work/zxc-0.10.0/src/lib/zxc_common.c:152:27 in zxc_cctx_free
==================
    #0 __tsan::CheckUnwind() /var/tmp/portage/llvm-runtimes/compiler-rt-sanitizers-22.1.2/work/compiler-rt/lib/tsan/rtl/tsan_rtl.cpp:696:21 (mkdwarfs+0x2beb6f)
    #1 __sanitizer::CheckFailed(char const*, int, char const*, unsigned long long, unsigned long long) /var/tmp/portage/llvm-runtimes/compiler-rt-sanitizers-22.1.2/work/compiler-rt/lib/sanitizer_common/sanitizer_termination.cpp:86:5 (mkdwarfs+0x2345f6)
    #2 __sanitizer::LargeMmapAllocator<__tsan::MapUnmapCallback, __sanitizer::LargeMmapAllocatorPtrArrayDynamic, __sanitizer::LocalAddressSpaceView>::Deallocate(__sanitizer::AllocatorStats*, void*) /var/tmp/portage/llvm-runtimes/compiler-rt-sanitizers-22.1.2/work/compiler-rt/lib/tsan/rtl/../../sanitizer_common/sanitizer_allocator_secondary.h:139:7 (mkdwarfs+0x2ba256)
    #3 Deallocate /var/tmp/portage/llvm-runtimes/compiler-rt-sanitizers-22.1.2/work/compiler-rt/lib/tsan/rtl/../../sanitizer_common/sanitizer_allocator_combined.h:94:18 (mkdwarfs+0x2b5dfd)
    #4 __tsan::user_free(__tsan::ThreadState*, unsigned long, void*, bool) /var/tmp/portage/llvm-runtimes/compiler-rt-sanitizers-22.1.2/work/compiler-rt/lib/tsan/rtl/tsan_mman.cpp:242:16 (mkdwarfs+0x2b5dfd)
    #5 free /var/tmp/portage/llvm-runtimes/compiler-rt-sanitizers-22.1.2/work/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp:736:3 (mkdwarfs+0x25299e)
    #6 zxc_aligned_free /var/tmp/portage/app-arch/zxc-0.10.0/work/zxc-0.10.0/src/lib/zxc_common.c:56:5 (libzxc.so.3+0x3727e)
    #7 zxc_cctx_free /var/tmp/portage/app-arch/zxc-0.10.0/work/zxc-0.10.0/src/lib/zxc_common.c:151:9 (libzxc.so.3+0x3727e)
    #8 zxc_compress_block /var/tmp/portage/app-arch/zxc-0.10.0/work/zxc-0.10.0/src/lib/zxc_dispatch.c:919:13 (libzxc.so.3+0x3bc60)
    #9 dwarfs::(anonymous namespace)::zxc_block_compressor::compress(dwarfs::shared_byte_buffer const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const*) const /home/mhx/git/github/dwarfs/src/compression/zxc.cpp:103:9 (mkdwarfs+0x95954f)
    #10 dwarfs::block_compressor::compress(dwarfs::shared_byte_buffer const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&) const /home/mhx/git/github/dwarfs/include/dwarfs/block_compressor.h:65:19 (mkdwarfs+0x4ef47a)
    #11 dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()::operator()() /home/mhx/git/github/dwarfs/src/writer/filesystem_writer.cpp:266:25 (mkdwarfs+0x4ef47a)
    #12 void std::__invoke_impl<void, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&>(std::__invoke_other, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14 (mkdwarfs+0x4ef47a)
    #13 std::enable_if<is_invocable_r_v<void, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&>, void>::type std::__invoke_r<void, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:111:2 (mkdwarfs+0x4ef47a)
    #14 void std::move_only_function<void ()>::_S_invoke<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(std::_Mofunc_base*) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/mofunc_impl.h:219:11 (mkdwarfs+0x4ef47a)
    #15 std::move_only_function<void ()>::operator()() /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/mofunc_impl.h:184:9 (mkdwarfs+0x4ef87f)
    #16 void std::__invoke_impl<void, std::move_only_function<void ()>&>(std::__invoke_other, std::move_only_function<void ()>&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14 (mkdwarfs+0x4ef87f)
    #17 std::__invoke_result<std::move_only_function<void ()>&>::type std::__invoke<std::move_only_function<void ()>&>(std::move_only_function<void ()>&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:96:14 (mkdwarfs+0x4ef87f)
    #18 decltype(auto) std::__apply_impl<std::move_only_function<void ()>&, std::tuple<>&>(std::move_only_function<void ()>&, std::tuple<>&, std::integer_sequence<unsigned long, ...>) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/tuple:2302:14 (mkdwarfs+0x4ef87f)
    #19 decltype(auto) std::apply<std::move_only_function<void ()>&, std::tuple<>&>(std::move_only_function<void ()>&, std::tuple<>&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/tuple:2313:14 (mkdwarfs+0x4ef87f)
    #20 bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)::operator()(dwarfs::internal::detail::worker_context&) /home/mhx/git/github/dwarfs/include/dwarfs/internal/worker_group.h:216:11 (mkdwarfs+0x4ef87f)
    #21 dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'() std::__invoke_impl<void, bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&>(std::__invoke_other, bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14 (mkdwarfs+0x4ef87f)
    #22 std::enable_if<is_invocable_r_v<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'(), bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&>, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>::type std::__invoke_r<void, bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&>(bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)&, dwarfs::internal::detail::worker_context&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:111:2 (mkdwarfs+0x4ef87f)
    #23 void std::move_only_function<void (dwarfs::internal::detail::worker_context&)>::_S_invoke<bool dwarfs::internal::basic_worker_group<>::add_job<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&&)::'lambda'(dwarfs::internal::detail::worker_context&)>(std::_Mofunc_base*, dwarfs::internal::detail::worker_context&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/mofunc_impl.h:219:11 (mkdwarfs+0x4ef87f)
    #24 std::move_only_function<void (dwarfs::internal::detail::worker_context&)>::operator()(dwarfs::internal::detail::worker_context&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/mofunc_impl.h:184:9 (mkdwarfs+0x9393a9)
    #25 dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::do_work(dwarfs::internal::detail::worker_context&, bool) /home/mhx/git/github/dwarfs/src/internal/worker_group.cpp:237:9 (mkdwarfs+0x9393a9)
==================
WARNING: ThreadSanitizer: data race (pid=8649)
  Write of size 4 at 0x722c00002cd0 by thread T11    #26 dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()::operator()() /home/mhx/git/github/dwarfs/src/internal/worker_group.cpp:85:9 (mkdwarfs+0x9393a9)
:
    #0 zxc_cctx_free /var/tmp/portage/app-arch/zxc-0.10.0/work/zxc-0.10.0/src/lib/zxc_common.c:174:16 (libzxc.so.3+0x372ec)
    #27 void std::__invoke_impl<void, dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>(std::__invoke_other, dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()&&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14 (mkdwarfs+0x9393a9)
    #1 zxc_compress_block /var/tmp/portage/app-arch/zxc-0.10.0/work/zxc-0.10.0/src/lib/zxc_dispatch.c:919:13 (libzxc.so.3+0x3bc60)
    #28 std::__invoke_result<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>::type std::__invoke<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>(dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()&&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:96:14 (mkdwarfs+0x9393a9)
    #2 dwarfs::(anonymous namespace)::zxc_block_compressor::compress(dwarfs::shared_byte_buffer const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const*) const /home/mhx/git/github/dwarfs/src/compression/zxc.cpp:103:9 (mkdwarfs+0x95954f)
    #3 dwarfs::block_compressor::compress(dwarfs::shared_byte_buffer const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>> const&) const /home/mhx/git/github/dwarfs/include/dwarfs/block_compressor.h:65:19 (mkdwarfs+0x4ef47a)
    #29 void std::thread::_Invoker<std::tuple<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>>::_M_invoke<0ul>(std::_Index_tuple<0ul>) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_thread.h:292:13 (mkdwarfs+0x9393a9)
    #4 dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()::operator()() /home/mhx/git/github/dwarfs/src/writer/filesystem_writer.cpp:266:25 (mkdwarfs+0x4ef47a)
    #30 std::thread::_Invoker<std::tuple<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>>::operator()() /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_thread.h:299:11 (mkdwarfs+0x9393a9)
    #5 void std::__invoke_impl<void, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&>(std::__invoke_other, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14 (mkdwarfs+0x4ef47a)
    #31 std::thread::_State_impl<std::thread::_Invoker<std::tuple<dwarfs::internal::detail::(anonymous namespace)::worker_group_impl_<dwarfs::prod_logger_policy>::worker_group_impl_(dwarfs::logger&, dwarfs::os_access const&, std::basic_string_view<char, std::char_traits<char>>, dwarfs::internal::worker_group_options const&, std::move_only_function<std::unique_ptr<dwarfs::internal::detail::worker_context, std::default_delete<dwarfs::internal::detail::worker_context>> (unsigned long)>)::'lambda'()>>>::_M_run() /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/std_thread.h:244:13 (mkdwarfs+0x9393a9)
    #6 std::enable_if<is_invocable_r_v<void, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&>, void>::type std::__invoke_r<void, dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&>(dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:111:2 (mkdwarfs+0x4ef47a)
    #32 execute_native_thread_routine /var/tmp/portage/sys-devel/gcc-15.2.1_p20260214/work/gcc-15-20260214/libstdc++-v3/src/c++11/thread.cc:104:18 (libstdc++.so.6+0xe7913) (BuildId: 8c10c8dff52d09015dc9af4324856aea4efa96ae)
    #7 void std::move_only_function<void ()>::_S_invoke<dwarfs::writer::internal::(anonymous namespace)::raw_fsblock::compress(dwarfs::internal::basic_worker_group<>&, std::optional<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char>>>)::'lambda'()>(std::_Mofunc_base*) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/mofunc_impl.h:219:11 (mkdwarfs+0x4ef47a)
    #33 __tsan_thread_start_func /var/tmp/portage/llvm-runtimes/compiler-rt-sanitizers-22.1.2/work/compiler-rt/lib/tsan/rtl/tsan_interceptors_posix.cpp:1068:15 (mkdwarfs+0x25415b)
    #8 std::move_only_function<void ()>::operator()() /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/mofunc_impl.h:184:9 (mkdwarfs+0x4ef87f)
    #34 <null> <null> (libc.so.6+0x8c251)
    #35 <null> <null> (libc.so.6+0x108e5b)
    #9 void std::__invoke_impl<void, std::move_only_function<void ()>&>(std::__invoke_other, std::move_only_function<void ()>&) /usr/lib/gcc/x86_64-pc-linux-gnu/13/include/g++-v13/bits/invoke.h:61:14 (mkdwarfs+0x4ef87f)

@mhx
Copy link
Copy Markdown
Owner

mhx commented Apr 18, 2026

I was able to build an image by setting the number of compression threads to 1, which confirms the race:

./mkdwarfs -i ~/perl-install-small -o /tmp/perl-install-zxc.dwarfs --force -C zxc:level=3 -S 10 -N 1

However, trying to do a checksum over all files in the image...

./dwarfsck -i /tmp/perl-install-zxc.dwarfs --checksum md5 >/dev/null                                
E 22:57:22.811435 error processing inode for thread5005/perl-5.8.0/lib/5.8.0/x86_64-linux-thread/auto/Encode/JP/JP.so: [zxc.cpp:187] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 22:57:22.905072 error processing inode for debug/perl-5.8.0/lib/5.8.0/x86_64-linux/auto/Encode/KR/KR.so: [zxc.cpp:187] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 22:57:22.981093 error processing inode for debugthread/perl-5.8.0/lib/5.8.0/x86_64-linux-thread-multi/auto/Encode/KR/KR.so: [zxc.cpp:187] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 22:57:23.070745 error processing inode for thread/perl-5.8.0/lib/5.8.0/x86_64-linux-thread-multi/auto/Encode/KR/KR.so: [zxc.cpp:187] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 22:57:23.161081 error processing inode for default/perl-5.8.0/lib/5.8.0/x86_64-linux/auto/Encode/KR/KR.so: [zxc.cpp:187] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 22:57:23.241724 error processing inode for thread5005/perl-5.8.0/lib/5.8.0/x86_64-linux-thread/auto/Encode/KR/KR.so: [zxc.cpp:187] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 22:57:23.364902 error processing inode for debugthread/perl-5.8.0/lib/5.8.0/x86_64-linux-thread-multi/auto/Encode/TW/TW.so: [zxc.cpp:187] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 22:57:23.446204 error processing inode for thread/perl-5.8.0/lib/5.8.0/x86_64-linux-thread-multi/auto/Encode/TW/TW.so: [zxc.cpp:187] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 22:57:23.518099 error processing inode for default/perl-5.8.0/lib/5.8.0/x86_64-linux/auto/Encode/TW/TW.so: [zxc.cpp:187] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 22:57:23.589431 error processing inode for thread5005/perl-5.8.0/lib/5.8.0/x86_64-linux-thread/auto/Encode/TW/TW.so: [zxc.cpp:187] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 22:57:23.657610 error processing inode for debug/perl-5.8.0/lib/5.8.0/x86_64-linux/auto/Encode/TW/TW.so: [zxc.cpp:187] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 22:57:23.729332 error processing inode for thread/perl-5.8.0/lib/5.8.0/x86_64-linux-thread-multi/auto/Encode/CN/CN.so: [zxc.cpp:187] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 22:57:23.813430 error processing inode for default/perl-5.8.0/lib/5.8.0/x86_64-linux/auto/Encode/CN/CN.so: [zxc.cpp:187] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 22:57:23.882239 error processing inode for thread5005/perl-5.8.0/lib/5.8.0/x86_64-linux-thread/auto/Encode/CN/CN.so: [zxc.cpp:187] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 22:57:23.955520 error processing inode for debug/perl-5.8.0/lib/5.8.0/x86_64-linux/auto/Encode/CN/CN.so: [zxc.cpp:187] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 22:57:24.166509 error processing inode for debug/perl-5.8.3/lib/5.8.3/x86_64-linux/auto/Encode/CN/CN.so: [zxc.cpp:187] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 22:57:24.219362 error processing inode for thread/perl-5.8.1/lib/5.8.1/x86_64-linux-thread-multi/auto/Encode/KR/KR.so: [zxc.cpp:187] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 22:57:24.543891 error processing inode for thread5005/perl-5.8.1/lib/5.8.1/x86_64-linux-thread/auto/Encode/KR/KR.so: [zxc.cpp:187] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 22:57:24.595153 error processing inode for thread5005/perl-5.8.2/lib/5.8.2/x86_64-linux-thread/auto/Encode/KR/KR.so: [zxc.cpp:187] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 22:57:24.694137 error processing inode for thread/perl-5.8.1/lib/5.8.1/x86_64-linux-thread-multi/auto/Encode/CN/CN.so: [zxc.cpp:187] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 22:57:24.844587 error processing inode for debugthread/perl-5.8.1/lib/5.8.1/x86_64-linux-thread-multi/auto/Encode/KR/KR.so: [zxc.cpp:187] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 22:57:24.893120 error processing inode for debugthread/perl-5.8.2/lib/5.8.2/x86_64-linux-thread-multi/auto/Encode/KR/KR.so: [zxc.cpp:187] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 22:57:24.945417 error processing inode for debugthread/perl-5.8.3/lib/5.8.3/x86_64-linux-thread-multi/auto/Encode/KR/KR.so: [zxc.cpp:187] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 22:57:24.996554 error processing inode for debug/perl-5.8.1/lib/5.8.1/x86_64-linux/auto/Encode/KR/KR.so: [zxc.cpp:187] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 22:57:25.051925 error processing inode for debug/perl-5.8.2/lib/5.8.2/x86_64-linux/auto/Encode/KR/KR.so: [zxc.cpp:187] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 22:57:25.458112 error processing inode for debugthread/perl-5.8.2/lib/5.8.2/x86_64-linux-thread-multi/auto/Encode/JP/JP.so: [zxc.cpp:187] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 22:57:25.683754 error processing inode for default/perl-5.8.3/lib/5.8.3/x86_64-linux/auto/Encode/TW/TW.so: [zxc.cpp:187] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 22:57:26.229432 error processing inode for thread5005/perl-5.8.1/lib/5.8.1/x86_64-linux-thread/auto/Encode/CN/CN.so: [zxc.cpp:187] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 22:57:26.452076 error processing inode for default/perl-5.8.0/lib/5.8.0/x86_64-linux/auto/Encode/Symbol/Symbol.so: [zxc.cpp:187] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 22:57:26.453654 error processing inode for debugthread/perl-5.8.1/lib/5.8.1/x86_64-linux-thread-multi/auto/Encode/Symbol/Symbol.so: [zxc.cpp:187] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 22:57:26.455111 error processing inode for debugthread/perl-5.8.2/lib/5.8.2/x86_64-linux-thread-multi/auto/Encode/Symbol/Symbol.so: [zxc.cpp:187] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 22:57:26.461288 error processing inode for debug/perl-5.8.1/lib/5.8.1/x86_64-linux/auto/Encode/Symbol/Symbol.so: [zxc.cpp:187] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 22:57:26.462746 error processing inode for debug/perl-5.8.2/lib/5.8.2/x86_64-linux/auto/Encode/Symbol/Symbol.so: [zxc.cpp:187] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 22:57:26.470477 error processing inode for thread/perl-5.8.3/lib/5.8.3/x86_64-linux-thread-multi/auto/Encode/Symbol/Symbol.so: [zxc.cpp:187] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 22:57:26.471715 error processing inode for thread/perl-5.8.0/lib/5.8.0/x86_64-linux-thread-multi/auto/Encode/EBCDIC/EBCDIC.so: [zxc.cpp:187] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 22:57:26.472943 error processing inode for default/perl-5.8.0/lib/5.8.0/x86_64-linux/auto/Encode/EBCDIC/EBCDIC.so: [zxc.cpp:187] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 22:57:26.474083 error processing inode for thread5005/perl-5.8.0/lib/5.8.0/x86_64-linux-thread/auto/Encode/EBCDIC/EBCDIC.so: [zxc.cpp:187] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 22:57:26.476237 error processing inode for thread/perl-5.8.2/lib/5.8.2/x86_64-linux-thread-multi/auto/Encode/EBCDIC/EBCDIC.so: [zxc.cpp:187] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 22:57:26.479508 error processing inode for thread5005/perl-5.8.2/lib/5.8.2/x86_64-linux-thread/auto/Encode/EBCDIC/EBCDIC.so: [zxc.cpp:187] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 22:57:26.485170 error processing inode for debugthread/perl-5.8.1/lib/5.8.1/x86_64-linux-thread-multi/auto/Encode/EBCDIC/EBCDIC.so: [zxc.cpp:187] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 22:57:26.487434 error processing inode for debugthread/perl-5.8.3/lib/5.8.3/x86_64-linux-thread-multi/auto/Encode/EBCDIC/EBCDIC.so: [zxc.cpp:187] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 22:57:26.489120 error processing inode for debug/perl-5.8.1/lib/5.8.1/x86_64-linux/auto/Encode/EBCDIC/EBCDIC.so: [zxc.cpp:187] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 22:57:26.490806 error processing inode for debug/perl-5.8.2/lib/5.8.2/x86_64-linux/auto/Encode/EBCDIC/EBCDIC.so: [zxc.cpp:187] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 22:57:26.492338 error processing inode for debug/perl-5.8.3/lib/5.8.3/x86_64-linux/auto/Encode/EBCDIC/EBCDIC.so: [zxc.cpp:187] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 22:57:26.496316 error processing inode for default/perl-5.8.1/lib/5.8.1/x86_64-linux/auto/Encode/Symbol/Symbol.so: [zxc.cpp:187] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 22:57:26.504806 error processing inode for thread5005/perl-5.8.2/lib/5.8.2/x86_64-linux-thread/auto/Encode/Symbol/Symbol.so: [zxc.cpp:187] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 22:57:26.507734 error processing inode for default/perl-5.8.1/lib/5.8.1/x86_64-linux/auto/GDBM_File/GDBM_File.so: [zxc.cpp:187] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 22:57:26.509467 error processing inode for default/perl-5.8.1/lib/5.8.1/x86_64-linux/auto/SDBM_File/SDBM_File.so: [zxc.cpp:187] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 22:57:26.511794 error processing inode for thread5005/perl-5.8.1/lib/5.8.1/x86_64-linux-thread/auto/SDBM_File/SDBM_File.so: [zxc.cpp:187] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 22:57:26.512536 error processing inode for thread5005/perl-5.8.2/lib/5.8.2/x86_64-linux-thread/auto/SDBM_File/SDBM_File.so: [zxc.cpp:187] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 22:57:26.513348 error processing inode for default/perl-5.8.0/lib/5.8.0/x86_64-linux/auto/SDBM_File/SDBM_File.so: [zxc.cpp:187] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 22:57:26.515638 error processing inode for thread/perl-5.8.3/lib/5.8.3/x86_64-linux-thread-multi/auto/threads/threads.so: [zxc.cpp:187] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 22:57:26.516502 error processing inode for thread/perl-5.8.0/lib/5.8.0/x86_64-linux-thread-multi/auto/threads/threads.so: [zxc.cpp:187] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 22:57:26.517911 error processing inode for thread5005/perl-5.8.2/lib/5.8.2/x86_64-linux-thread/auto/Thread/Thread.so: [zxc.cpp:187] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 22:57:26.519365 error processing inode for thread5005/perl-5.8.0/lib/5.8.0/x86_64-linux-thread/auto/Thread/Thread.so: [zxc.cpp:187] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 22:57:26.520439 error processing inode for thread5005/perl-5.8.0/lib/5.8.0/x86_64-linux-thread/auto/Digest/MD5/MD5.so: [zxc.cpp:187] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 22:57:26.523549 error processing inode for debugthread/perl-5.8.3/lib/5.8.3/x86_64-linux-thread-multi/auto/threads/threads.so: [zxc.cpp:187] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)

...and tons of error after that. This is likely the same issue as the one from the unit tests.

@hellobertrand
Copy link
Copy Markdown
Author

Thanks for the detailed reports @mhx: all three issues are now fixed:

Bug 1 & 3: Thread-safety / heap corruption in compressor: The shared zxc_cctx* was being mutated concurrently across worker threads. Refactored to a stateless, per-call context pattern (same approach as the brotli backend): context is created and destroyed within each compress() call. This eliminates both the data race and the heap overflow from undersized internal buffers.

Bug 2: ZXC_ERROR_OVERFLOW in decompressor: zxc_decompress_block requires a power-of-two dst_capacity. The previous code was passing uncompressed_size directly, which isn't always a power of two (e.g. last block). Fixed by aligning via std::bit_ceil(). When the aligned size exceeds the framework's frozen buffer capacity, a temporary local buffer is used for decompression, then copied back. This only happens for the final (partial) block, so no performance impact, I hope.

Tests: Added zxc:level=3 locally in dwarfs_test.cpp. All 112 compression + regression tests pass (including all block sizes 12/20/27 × all fragment order modes):

[==========] 112 tests from 2 test suites ran. (1531 ms total)
[  PASSED  ] 112 tests.

@mhx
Copy link
Copy Markdown
Owner

mhx commented Apr 19, 2026

Tried with all the latest commits; mkdwarfs runs fine now. However, I'm still seeing decompression issues:

./dwarfsck -i /tmp/perl-install-zxc.dwarfs --checksum md5 >/dev/null                           
E 11:15:46.876790 error processing inode for debugthread/perl-5.8.0/lib/5.8.0/x86_64-linux-thread-multi/auto/Encode/CN/CN.so: [zxc.cpp:183] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 11:15:47.081787 error processing inode for thread5005/perl-5.8.0/lib/5.8.0/x86_64-linux-thread/auto/GDBM_File/GDBM_File.so: [zxc.cpp:149] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 11:15:47.081794 error processing inode for debugthread/perl-5.8.1/lib/5.8.1/x86_64-linux-thread-multi/auto/Fcntl/Fcntl.so: [zxc.cpp:183] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 11:15:47.081868 error processing inode for debugthread/perl-5.8.3/lib/5.8.3/x86_64-linux-thread-multi/auto/Fcntl/Fcntl.so: [zxc.cpp:149] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 11:15:47.082004 error processing inode for debugthread/perl-5.8.2/lib/5.8.2/x86_64-linux-thread-multi/auto/Fcntl/Fcntl.so: [zxc.cpp:149] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 11:15:47.082114 error processing inode for debugthread/perl-5.8.0/lib/5.8.0/x86_64-linux-thread-multi/auto/POSIX/POSIX.so: [zxc.cpp:149] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 11:15:47.096805 error processing inode for thread/perl-5.8.0/lib/5.8.0/x86_64-linux-thread-multi/auto/Unicode/Normalize/Normalize.so: [zxc.cpp:183] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 11:15:47.111648 error processing inode for debugthread/perl-5.8.1/bin/a2p5.8.1: [zxc.cpp:183] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 11:15:47.123539 error processing inode for default/perl-5.8.1/bin/perl5.8.1: [zxc.cpp:183] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)
E 11:15:47.132462 error processing inode for thread5005/perl-5.8.2/bin/perl5.8.2: [zxc.cpp:183] ZXC: decompression failed (ZXC_ERROR_OVERFLOW)

The more blocks there are, the more errors I'm seeing (the above is with -S16; with -S12 I'm getting almost 1000 errors).

@hellobertrand
Copy link
Copy Markdown
Author

Notes on libzxc gaps found while integrating

Two things on the libzxc side would let this PR be cleaner. Both are additive and I'll open a companion PR upstream.

1. Missing zxc_decompress_block_bound()

The decoder's fast path needs a tail padding beyond uncompressed_size. Passing dst_capacity == uncompressed_size disables the fast path and, on literal-heavy tails, returns ZXC_ERROR_OVERFLOW on valid input : this is what was causing the dwarfsck errors (more blocks => more failures). The tail is internal and shouldn't be something integrators have to reverse-engineer. Expose a public helper so callers can size the destination correctly.

2. Missing zxc_decompress_block_safe()

Even with _bound, integrators whose destination buffer comes from an external allocator can't oversize it. In dwarfs, the framework hands back a buffer frozen at exactly uncompressed_size via create_mutable_fixed_reserve(). So this PR decompresses into a private scratch (oversized by 2112 B) and memcpys into the framework target.

A zxc_decompress_block_safe() that accepts dst_capacity == uncompressed_size would let us drop the scratch and the memcpy.

Migration path

This PR is self-contained. Once libzxc ships the two APIs, the follow-up is a few lines: replace 2112 with zxc_decompress_block_bound(), swap in zxc_decompress_block_safe(), remove tmp_ and the memcpy. A TODO marks the spot.

@solbjorn
Copy link
Copy Markdown
Contributor

solbjorn commented Apr 20, 2026

The code size of the (compressed) statically linked binaries should not increase significantly

I switched my DwFS submodule to this PR and added zxc to the project just to test*. +50 Kb to the exe (this includes changes from this PR + zxc itself), everything is linked statically with ClangLTO (from DwarFS, common, compressor, and reader libraries are linked, I started using DwFS to store game assets). That's a very small increase I'd say.

BTW once zxc is here, maybe it would be worth to reconsider the default DwFS compression presets and put zxc there somewhere (I think most people just use the default presets).

* to test how it builds, links and weights, haven't tried compressing assets with zxc yet (as last time I checked this thread there still were issues)

@hellobertrand
Copy link
Copy Markdown
Author

@mhx

Focused test scope (all green):

  • ctest -R compression --output-on-failure 100% passed
  • ctest -R zxc --output-on-failure -V 100% passed
  • ctest -R "block_decompressor|decompress" --output-on-failure 100% passed

Heads-up: decompression goes through an internal scratch buffer plus a memcpy of uncompressed_size bytes per block into the framework's target. See the TODO comment in src/compression/zxc.cpp. This is required because zxc_decompress_block() performs speculative wild-copy writes and needs tail padding beyond uncompressed_size, while the framework hands us a buffer frozen at exactly uncompressed_size via create_mutable_fixed_reserve(), so we cannot decompress in-place.

I haven't benchmarked yet, but I expect the extra allocation + memcpy per block to show up on decompression-heavy workloads. Compression is unaffected.

The clean fix is a bounds-checked zxc_decompress_block_safe() variant upstream that tolerates dst_capacity == uncompressed_size. Once that lands in libzxc, the scratch + memcpy can be removed and the decoder will write straight into the framework target.

@mhx
Copy link
Copy Markdown
Owner

mhx commented Apr 20, 2026

The code size of the (compressed) statically linked binaries should not increase significantly

I switched my DwFS submodule to this PR and added zxc to the project just to test*. +50 Kb to the exe (this includes changes from this PR + zxc itself), everything is linked statically with ClangLTO (from DwarFS, common, compressor, and reader libraries are linked, I started using DwFS to store game assets). That's a very small increase I'd say.

That's pretty much what I saw: #362 (comment)

BTW once zxc is here, maybe it would be worth to reconsider the default DwFS compression presets and put zxc there somewhere (I think most people just use the default presets).

And because most people just use the default presets, zxc is not going to become a default before it has proven to be suitable for archival.

@mhx
Copy link
Copy Markdown
Owner

mhx commented Apr 20, 2026

The clean fix is a bounds-checked zxc_decompress_block_safe() variant upstream that tolerates dst_capacity == uncompressed_size. Once that lands in libzxc, the scratch + memcpy can be removed and the decoder will write straight into the framework target.

I'm not planning to push out a new DwarFS release in the near future, so I think we can wait until libzxc has made the new calls available and then require that new version rather than working around the current behaviour.

@solbjorn
Copy link
Copy Markdown
Contributor

The clean fix is a bounds-checked zxc_decompress_block_safe() variant upstream that tolerates dst_capacity == uncompressed_size. Once that lands in libzxc, the scratch + memcpy can be removed and the decoder will write straight into the framework target.

I'm not planning to push out a new DwarFS release in the near future, so I think we can wait until libzxc has made the new calls available and then require that new version rather than working around the current behaviour.

Yep, I agree that would be a better option.

@mhx
Copy link
Copy Markdown
Owner

mhx commented Apr 20, 2026

BTW once zxc is here, maybe it would be worth to reconsider the default DwFS compression presets and put zxc there somewhere (I think most people just use the default presets).

And because most people just use the default presets, zxc is not going to become a default before it has proven to be suitable for archival.

The people who want to use zxc should definitely be able to do so (knowing the potential risk involved in trying a new compression algorithm that hasn't been widely used), but the casual user who doesn't really care shouldn't have to take that extra risk.

That doesn't mean zxc cannot become a default to replace e.g. lz4 at some point, but it's definitely too early for that.

Add zxc as a new compression backend (type ID 8), using the block-level
API (zxc_compress_block / zxc_decompress_block) for minimal framing
overhead. Uncompressed size is stored as a little-endian uint32 prefix.

Features:
- Compression level configurable via -C zxc:level=N (runtime range
  from zxc_min_level()..zxc_max_level())
- Internal block size configurable via -C zxc:block_size=N
  (4KB..2MB, default 256KB)
- Reusable compression/decompression contexts (zxc_create_cctx/dctx)
- Runtime library version reporting via zxc_version_string()
- Defensive bounds check on decompression input

Build integration:
- Optional via TRY_ENABLE_ZXC (ON by default)
- Detected via pkg-config (libzxc >= 0.10.0)
- Available through vcpkg (zxc >= 0.10.0)
…ion buffer

- Use varint encoding for the uncompressed size prefix instead of a fixed uint32, saving space on smaller blocks.
- Remove the configurable internal block size in favor of a dynamic value based on input data size.
- Implement a temporary scratch buffer for decompression to safely accommodate zxc's speculative wild-copy writes, which require tail padding beyond the exact uncompressed size.
- Move compression context creation to the compress call to simplify state management.
Adds zxc compression levels 1 and 3 to the list of compression options used for testing when libzxc support is enabled.
@solbjorn
Copy link
Copy Markdown
Contributor

@hellobertrand, the last commit doesn't build -- there's no zxc_estimate_cctx_size(), seems like you forgot to push some code to the corresponding zxc branch.

@hellobertrand
Copy link
Copy Markdown
Author

@hellobertrand, the last commit doesn't build -- there's no zxc_estimate_cctx_size(), seems like you forgot to push some code to the corresponding zxc branch.

@solbjorn My bad! Forgot to push the local changes. Fixed.

@hellobertrand hellobertrand force-pushed the zxc-compressor branch 2 times, most recently from 6ad613d to 3b8561e Compare April 25, 2026 08:41
Comment thread CMakeLists.txt Outdated
pkg_check_modules(LIBBROTLIENC IMPORTED_TARGET libbrotlienc>=${LIBBROTLI_REQUIRED_VERSION})
endif()
if(TRY_ENABLE_ZXC)
pkg_check_modules(LIBZXC IMPORTED_TARGET libzxc>=0.10.0)
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

bump to 0.10.1 when published

Comment thread vcpkg.json Outdated
{"name": "zxc", "version>=": "0.10.0"}
],
"overrides": [
{"name": "zxc", "version": "0.10.0"}
Copy link
Copy Markdown
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

bump to 0.10.1 when published

@solbjorn
Copy link
Copy Markdown
Contributor

Minor: when I ran clang-format locally before creating my PR (my local work tree also contains changes from this PR), I noticed that it made a couple changes in src/compression_registry.h. While the code it reformatted is not related directly to ZXC (but this PR adds a couple lines to it), maybe it's a good idea to reformat the file within this PR?

What it did is:

diff --git a/src/compression_registry.h b/src/compression_registry.h
index 8858b4c05102..d79ade3f2869 100644
--- a/src/compression_registry.h
+++ b/src/compression_registry.h
@@ -40,9 +40,9 @@
 #include <range/v3/view/map.hpp>

 #include <dwarfs/config.h>
-#include <dwarfs/library_dependencies.h>
 #include <dwarfs/detail/compression_registry.h>
 #include <dwarfs/fstypes.h>
+#include <dwarfs/library_dependencies.h>

 namespace dwarfs::detail {

@@ -75,12 +75,11 @@ void compression_registry<FactoryT, InfoT>::for_each_algorithm(
 template <typename FactoryT, typename InfoT>
 void compression_registry<FactoryT, InfoT>::add_library_dependencies(
     library_dependencies& deps) const {
-  this->for_each_algorithm(
-      [&](compression_type, InfoT const& info) {
-        for (auto const& lib : info.library_dependencies()) {
-          deps.add_library(lib);
-        }
-      });
+  this->for_each_algorithm([&](compression_type, InfoT const& info) {
+    for (auto const& lib : info.library_dependencies()) {
+      deps.add_library(lib);
+    }
+  });
 }

 template <typename FactoryT, typename InfoT>

@mhx
Copy link
Copy Markdown
Owner

mhx commented Apr 25, 2026

Minor: when I ran clang-format locally before creating my PR (my local work tree also contains changes from this PR), I noticed that it made a couple changes in src/compression_registry.h. While the code it reformatted is not related directly to ZXC (but this PR adds a couple lines to it), maybe it's a good idea to reformat the file within this PR?

clang-format quite regularly changes formatting with major version increments. It's usually minor, but it's worth checking that you're using a very recent version of clang-format (I'm on v22).

@solbjorn
Copy link
Copy Markdown
Contributor

it's worth checking that you're using a very recent version of clang-format (I'm on v22).

I have 21 in WSL and 22 on Windows, rechecked, both give me the same diff I pasted above.

Anyway, not related directly to ZXC, just a suggestion (when I create a PR, I usually run clang-format on every file I touched, so I noticed this one).

@mhx
Copy link
Copy Markdown
Owner

mhx commented Apr 25, 2026

it's worth checking that you're using a very recent version of clang-format (I'm on v22).

I have 21 in WSL and 22 on Windows, rechecked, both give me the same diff I pasted above.

Anyway, not related directly to ZXC, just a suggestion (when I create a PR, I usually run clang-format on every file I touched, so I noticed this one).

Oh, my bad! The pattern I've been using for the format target in CMakeLists.txt didn't include header files below src (as initially there weren't any).

Define LIBZXC_REQUIRED_VERSION alongside other library versions and use it in the pkg_check_modules call for consistency.
Previously, the compression context (cctx) memory estimation did not consider the active compression level. This change ensures the `zxc_estimate_cctx_size` call includes the level for a more accurate memory usage prediction.
@solbjorn
Copy link
Copy Markdown
Contributor

solbjorn commented May 8, 2026

Needs updating since recent commits changed the zxc_estimate_cctx_size() signature.

@hellobertrand
Copy link
Copy Markdown
Author

Needs updating since recent commits changed the zxc_estimate_cctx_size() signature.

fixed

@solbjorn
Copy link
Copy Markdown
Contributor

New ZXC version is out, the API is there -- shouldn't this be converted from WIP to a proper PR and considered for merging?

@sonarqubecloud
Copy link
Copy Markdown

@hellobertrand
Copy link
Copy Markdown
Author

@solbjorn Yes, agreed. zxc 0.11.0 is now published on vcpkg, so the build constraint resolves cleanly. The patch has been validated end-to-end:

  • All compression tests pass (ctest -R 'zxc|compressor' -> 36/36).
  • Round-trip on silesia + kernel datasets confirmed integrity.
  • The new level 6 is supported and gives the best ratio.

Marking as ready for review.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants