Package: release.debian.org Severity: normal [ Short version ] I prematurely uploaded ccache/4.8-1 to unstable to fix bug #1033191. I would like to get a more targeted fix into testing instead of that one. Would it be appropriate to use testing-proposed-updates for this, as suggested on the freeze policy page?
[ Long version ] Ccache versions 4.7–4.7.4 by default enable a feature called the inode cache which shares information between processes via a memory mapped file, synchronized by pthread mutexes. Yesterday, a user reported that he is seeing ccache processes hanging on futex calls (related to the inode cache feature) on GitLab runners with Debian bookworm as well as other distributions using ccache 4.7.4. The inode cache synchronization mechanism was rewritten in ccache 4.8 to use spin locks, thus taking pthread mutexes out of the equation, so after reviewing the freeze policy page briefly I uploaded ccache/4.8-1 to improve the situation since ccache is a non-key package with good autopkgtests. Except I was wrong: ccache is apparently considered a key package, which I did not know. Also, in retrospect, I was too stressed and should definitely have made a more targeted fix. The user then submitted Debian bug #1033191 with severity serious. I agree that it would be unfortunate to ship ccache 4.7.4 in bookworm. Unless fixed, builds using ccache 4.7.4 (maybe in specific container environments such as GitLab runners with buggy kernels, maybe in other scenarios) risk getting stuck. For reference, I'm attaching the targeted fix I would like to make. -- Joel
diff -Nru ccache-4.7.4/LICENSE.adoc ccache-4.7.5/LICENSE.adoc --- ccache-4.7.4/LICENSE.adoc 2022-11-21 19:53:32.000000000 +0100 +++ ccache-4.7.5/LICENSE.adoc 2023-03-20 20:47:12.000000000 +0100 @@ -35,7 +35,7 @@ ---- Copyright (C) 2002-2007 Andrew Tridgell -Copyright (C) 2009-2022 Joel Rosdahl and other contributors +Copyright (C) 2009-2023 Joel Rosdahl and other contributors ---- diff -Nru ccache-4.7.4/cmake/CcacheVersion.cmake ccache-4.7.5/cmake/CcacheVersion.cmake --- ccache-4.7.4/cmake/CcacheVersion.cmake 2022-11-21 19:53:32.000000000 +0100 +++ ccache-4.7.5/cmake/CcacheVersion.cmake 2023-03-20 20:47:12.000000000 +0100 @@ -22,7 +22,7 @@ # CCACHE_VERSION_ORIGIN is set to "archive" in scenario 1 and "git" in scenario # 3. -set(version_info "1527040bc2a278b9d3d51badb732ecf5841d8bb5 HEAD, tag: v4.7.4, origin/master, origin/HEAD, master") +set(version_info "9b1033f3ae534e5aad02c10f663b589b8f28c026 HEAD, tag: v4.7.5, origin/HEAD, origin/4.7-maint, 4.7-maint") set(CCACHE_VERSION "unknown") if(version_info MATCHES "^([0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f][0-9a-f])[0-9a-f]* (.*)") diff -Nru ccache-4.7.4/debian/changelog ccache-4.7.5/debian/changelog --- ccache-4.7.4/debian/changelog 2022-11-21 20:40:46.000000000 +0100 +++ ccache-4.7.5/debian/changelog 2023-03-20 21:59:44.000000000 +0100 @@ -1,3 +1,10 @@ +ccache (4.7.5-1) unstable; urgency=medium + + * New upstream release 4.7.5, whose only change compared with 4.7.4 is + to disable the inode cache by default (closes: #1033191) + + -- Joel Rosdahl <j...@debian.org> Mon, 20 Mar 2023 21:59:44 +0100 + ccache (4.7.4-1) unstable; urgency=medium * New upstream release 4.7.4 diff -Nru ccache-4.7.4/doc/MANUAL.adoc ccache-4.7.5/doc/MANUAL.adoc --- ccache-4.7.4/doc/MANUAL.adoc 2022-11-21 19:53:32.000000000 +0100 +++ ccache-4.7.5/doc/MANUAL.adoc 2023-03-20 20:47:12.000000000 +0100 @@ -756,7 +756,7 @@ If true, ccache will cache source file hashes based on device, inode and timestamps. This reduces the time spent on hashing include files since the - result can be resused between compilations. The default is true. The feature + result can be resused between compilations. The default is false. The feature requires <<config_temporary_dir,*temporary_dir*>> to be located on a local filesystem of a supported type. + diff -Nru ccache-4.7.4/doc/NEWS.adoc ccache-4.7.5/doc/NEWS.adoc --- ccache-4.7.4/doc/NEWS.adoc 2022-11-21 19:53:32.000000000 +0100 +++ ccache-4.7.5/doc/NEWS.adoc 2023-03-20 20:47:12.000000000 +0100 @@ -1,5 +1,16 @@ = Ccache news +== Ccache 4.7.5 + +Release date: 2023-03-20 + +=== Bug fixes + +- Disabled the inode cache by default again since there have reports of ccache + processes hanging on futex calls related to the inode cache. + + [small]#_[contributed by Joel Rosdahl]_# + + == Ccache 4.7.4 Release date: 2022-11-21 diff -Nru ccache-4.7.4/src/Config.hpp ccache-4.7.5/src/Config.hpp --- ccache-4.7.4/src/Config.hpp 2022-11-21 19:53:32.000000000 +0100 +++ ccache-4.7.5/src/Config.hpp 2023-03-20 20:47:12.000000000 +0100 @@ -1,4 +1,4 @@ -// Copyright (C) 2019-2022 Joel Rosdahl and other contributors +// Copyright (C) 2019-2023 Joel Rosdahl and other contributors // // See doc/AUTHORS.adoc for a complete list of contributors. // @@ -181,7 +181,7 @@ bool m_hash_dir = true; std::string m_ignore_headers_in_manifest; std::string m_ignore_options; - bool m_inode_cache = true; + bool m_inode_cache = false; bool m_keep_comments_cpp = false; double m_limit_multiple = 0.8; std::string m_log_file; diff -Nru ccache-4.7.4/src/core/mainoptions.cpp ccache-4.7.5/src/core/mainoptions.cpp --- ccache-4.7.4/src/core/mainoptions.cpp 2022-11-21 19:53:32.000000000 +0100 +++ ccache-4.7.5/src/core/mainoptions.cpp 2023-03-20 20:47:12.000000000 +0100 @@ -1,4 +1,4 @@ -// Copyright (C) 2021-2022 Joel Rosdahl and other contributors +// Copyright (C) 2021-2023 Joel Rosdahl and other contributors // // See doc/AUTHORS.adoc for a complete list of contributors. // @@ -70,7 +70,7 @@ Features: {2} Copyright (C) 2002-2007 Andrew Tridgell -Copyright (C) 2009-2022 Joel Rosdahl and other contributors +Copyright (C) 2009-2023 Joel Rosdahl and other contributors See <https://ccache.dev/credits.html> for a complete list of contributors. diff -Nru ccache-4.7.4/test/suites/inode_cache.bash ccache-4.7.5/test/suites/inode_cache.bash --- ccache-4.7.4/test/suites/inode_cache.bash 2022-11-21 19:53:32.000000000 +0100 +++ ccache-4.7.5/test/suites/inode_cache.bash 2023-03-20 20:47:12.000000000 +0100 @@ -1,4 +1,6 @@ SUITE_inode_cache_PROBE() { + export CCACHE_INODECACHE=1 + if $HOST_OS_WINDOWS; then echo "inode cache not available on Windows" return @@ -16,6 +18,7 @@ } SUITE_inode_cache_SETUP() { + export CCACHE_INODECACHE=1 export CCACHE_DEBUG=1 unset CCACHE_NODIRECT export CCACHE_TEMPDIR="${CCACHE_DIR}/tmp" # isolate inode cache file