Using valgrind 3.23 built from source on Linux: $ /usr/local/bin/valgrind --version valgrind-3.23.0 # testing /usr/bin/true without --track-fds=yes $ /usr/local/bin/valgrind --xml=yes --xml-file=xxx --gen-suppressions=all --error-exitcode=111 /usr/bin/true && echo ok || echo fail ok # testing /usr/bin/true with --track-fds=yes $ /usr/local/bin/valgrind --track-fds=yes --xml=yes --xml-file=xxx --gen-suppressions=all --error-exitcode=111 /usr/bin/true && echo ok || echo fail ==21042== (No origin, error cannot be suppressed) ==21042== (No origin, error cannot be suppressed) ==21042== (No origin, error cannot be suppressed) ==21042== (No origin, error cannot be suppressed) ==21042== (No origin, error cannot be suppressed) ==21042== (No origin, error cannot be suppressed) ==21042== (No origin, error cannot be suppressed) ==21042== (No origin, error cannot be suppressed) ==21042== (No origin, error cannot be suppressed) ==21042== (No origin, error cannot be suppressed) fail xxx contains most notably: <error> <unique>0x4</unique> <tid>1</tid> <threadname>true</threadname> <kind>FdNotClosed</kind> <fd>3</fd> <path>.../xxx</path> <what>Open file descriptor 3: ../xxx</what> </error> This relates to the file opened by valgrind itself. So using "--track-fds=yes --xml=yes --xml-file=xxx --error-exitcode=111" results in a non zero error code returned. There is no way I can see to suppress the error using a suppression file. "--gen-suppressions=all" results in "==xxxx== (No origin, error cannot be suppressed)" The new feature added in valgrind 3.23 by https://bugs.kde.org/show_bug.cgi?id=328563 does not work properly when using "--xml=yes --xml-file=filename" and "--error-exitcode=non-zero-error-code".
yes, --track-fds obviously should ignore the --xml-file=xxx file descriptors. Thanks for reporting. Will investigate.
This is probably the same underlying issues as bug #311655
Created attachment 170559 [details] Don't leave fds created with --log-file, --xml-file or --log-socket open Don't leave fds created with --log-file, --xml-file or --log-socket open prepare_sink_fd and prepare_sink_socket will create a new file descriptor for the output sink. finalize_sink_fd then copies the fd to the safe range, so it doesn't conflict with any application fds. If we created the original fd ourselves, it was a VgLogTo_File or VgLogTo_Socket, not VgLogTo_Fd, finalize_sink_fd should close it. Also close socket when connecting fails in VG_(connect_via_socket). Add a testcase for --log-file and --xml-file which prints output to /dev/stderr
commit fbd7596f8342f0b0fbbe088d960da839a8bdb839 Author: Mark Wielaard <mark@klomp.org> Date: Sun Jun 16 21:23:08 2024 +0200 Don't leave fds created with --log-file, --xml-file or --log-socket open prepare_sink_fd and prepare_sink_socket will create a new file descriptor for the output sink. finalize_sink_fd then copies the fd to the safe range, so it doesn't conflict with any application fds. If we created the original fd ourselves, it was a VgLogTo_File or VgLogTo_Socket, not VgLogTo_Fd, finalize_sink_fd should close it. Also close socket when connecting fails in VG_(connect_via_socket). Add a testcase for --log-file and --xml-file which prints output to /dev/stderr https://bugs.kde.org/show_bug.cgi?id=202770 https://bugs.kde.org/show_bug.cgi?id=311655 https://bugs.kde.org/show_bug.cgi?id=488379 Co-authored-by: Alexandra Hájková <ahajkova@redhat.com