| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- #!/bin/bash
- # Run memcheck.
- # This script can be run on the host, or in the docker
- chmod +x valgrind
- mkdir -p build
- cd build
- [[ -z "${CACHEB}" ]] && export CACHEB=../cache
- [[ ! -e "${CACHEB}" ]] && mkdir -p ${CACHEB}
- [[ -z "${uid}" ]] && export uid=`id -u`
- [[ -z "${gid}" ]] && export gid=`id -g`
- trap "chown -R $uid:$gid ." EXIT
- export CTEST_CONFIGURATION_TYPE=RelWithDebInfo
- export CTEST_CMAKE_GENERATOR=Ninja
- export XTRA_FLAGS="CMAKE_C_COMPILER=/usr/bin/clang-16;CMAKE_CXX_COMPILER=/usr/bin/clang++-16"
- export NO_TESTS=1
- time ctest -VV -S ../misc/ctest/memcheck.cmake
- src/searchd --mockstack | tail -n +6 > stack.txt
- source stack.txt
- #export MEMORYCHECK_COMMAND_OPTIONS='--tool=memcheck --leak-check=full --track-origins=yes --time-stamp=yes'
- export MANTICORE_THREADS_EX='2/1+2/1'
- export NO_TESTS=0
- rm -f Testing/Temporary/MemoryChecker.*.log
- time ctest -V -S ../misc/ctest/memcheck.cmake
- find Testing/Temporary/MemoryChecker.*.log -size 0 -delete
- # Analysis of memory leak reports
- echo "Analyzing memory leak reports..."
- LEAK_FOUND=0
- LEAK_PATTERNS=("definitely " "invalid " "uninitialised ")
- # Function to check for memory leaks in a file
- check_leaks() {
- local file=$1
- local test_num=$(basename "$file" | sed -E 's/MemoryChecker\.([0-9]+)\.log/\1/')
-
- for pattern in "${LEAK_PATTERNS[@]}"; do
- if grep -i "$pattern" "$file" > /dev/null; then
- echo "ERROR: $pattern DETECTED in test_$test_num"
- cat "$file"
- LEAK_FOUND=1
- fi
- done
- }
- # Process all memory checker log files
- for log_file in Testing/Temporary/MemoryChecker.*.log; do
- if [ -f "$log_file" ]; then
- check_leaks "$log_file"
- fi
- done
- if [ $LEAK_FOUND -eq 1 ]; then
- echo "Memory leaks were detected. Check the logs above for details."
- exit 1
- else
- echo "No memory leaks detected."
- exit 0
- fi
|