Skip to content

Commit 060ff2f

Browse files
committed
refresh memcheck script
With --mockstack it doesn't need manual 'massaging' anymore
1 parent fe9473d commit 060ff2f

File tree

6 files changed

+87
-11
lines changed

6 files changed

+87
-11
lines changed

Diff for: cmake/GetVCPKG.cmake

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,11 @@ prepend_prefix ( ${_VCACHE} )
3636
unset ( vcpkg_params )
3737
if (CMAKE_CROSSCOMPILING)
3838
set ( vcpkg_params "--triplet=${_VCARCH}-${_TARGET}" )
39+
set ( ENV{VCPKG_OVERLAY_TRIPLETS} "${MANTICORE_SOURCE_DIR}/dist/build_dockers/cross/triplets" )
3940
endif()
4041

4142
set ( ENV{MANTICORE_SOURCE_DIR} "${MANTICORE_SOURCE_DIR}" )
4243
set ( ENV{VCPKG_DEFAULT_BINARY_CACHE} "${CACHEB}/vcpkg" )
43-
set ( ENV{VCPKG_OVERLAY_TRIPLETS} "${MANTICORE_SOURCE_DIR}/dist/build_dockers/cross/triplets" )
4444

4545
if (NOT EXISTS ENV{VCPKG_DEFAULT_BINARY_CACHE})
4646
file ( MAKE_DIRECTORY "$ENV{VCPKG_DEFAULT_BINARY_CACHE}" )

Diff for: memcheck.sh

+63
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
#!/bin/bash
2+
# Run memcheck.
3+
# This script can be run on the host, or in the docker
4+
5+
chmod +x valgrind
6+
mkdir -p build
7+
cd build
8+
9+
[[ -z "${CACHEB}" ]] && export CACHEB=../cache
10+
[[ ! -e "${CACHEB}" ]] && mkdir -p ${CACHEB}
11+
[[ -z "${uid}" ]] && export uid=`id -u`
12+
[[ -z "${gid}" ]] && export gid=`id -g`
13+
trap "chown -R $uid:$gid ." EXIT
14+
15+
export CTEST_CONFIGURATION_TYPE=RelWithDebInfo
16+
export CTEST_CMAKE_GENERATOR=Ninja
17+
export XTRA_FLAGS="CMAKE_C_COMPILER=/usr/bin/clang-16;CMAKE_CXX_COMPILER=/usr/bin/clang++-16"
18+
19+
export NO_TESTS=1
20+
time ctest -VV -S ../misc/ctest/memcheck.cmake
21+
src/searchd --mockstack | tail -n +6 > stack.txt
22+
23+
source stack.txt
24+
#export MEMORYCHECK_COMMAND_OPTIONS='--tool=memcheck --leak-check=full --track-origins=yes --time-stamp=yes'
25+
export MANTICORE_THREADS_EX='2/1+2/1'
26+
export NO_TESTS=0
27+
rm -f Testing/Temporary/MemoryChecker.*.log
28+
time ctest -V -S ../misc/ctest/memcheck.cmake
29+
find Testing/Temporary/MemoryChecker.*.log -size 0 -delete
30+
31+
# Analysis of memory leak reports
32+
echo "Analyzing memory leak reports..."
33+
LEAK_FOUND=0
34+
LEAK_PATTERNS=(definitely invalid uninitialized)
35+
36+
# Function to check for memory leaks in a file
37+
check_leaks() {
38+
local file=$1
39+
local test_num=$(basename "$file" | sed -E 's/MemoryChecker\.([0-9]+)\.log/\1/')
40+
41+
for pattern in "${LEAK_PATTERNS[@]}"; do
42+
if grep -i "$pattern" "$file" > /dev/null; then
43+
echo "$pattern DETECTED in test_$test_num"
44+
cat "$file"
45+
LEAK_FOUND=1
46+
fi
47+
done
48+
}
49+
50+
# Process all memory checker log files
51+
for log_file in Testing/Temporary/MemoryChecker.*.log; do
52+
if [ -f "$log_file" ]; then
53+
check_leaks "$log_file"
54+
fi
55+
done
56+
57+
if [ $LEAK_FOUND -eq 1 ]; then
58+
echo "Memory leaks were detected. Check the logs above for details."
59+
exit 1
60+
else
61+
echo "No memory leaks detected."
62+
exit 0
63+
fi

Diff for: misc/ctest/memcheck.cmake

+9-9
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ set ( LIBS_BUNDLE "$ENV{LIBS_BUNDLE}" )
88
set ( CTEST_REGEX "$ENV{CTEST_REGEX}" )
99
set ( SEARCHD_CLI_EXTRA "$ENV{SEARCHD_CLI_EXTRA}" )
1010
set ( XTRA_FLAGS "$ENV{XTRA_FLAGS}" )
11+
set ( NO_TESTS "$ENV{NO_TESTS}" )
12+
set ( UNITY_BUILD "$ENV{UNITY_BUILD}" )
1113
set_property ( GLOBAL PROPERTY Label P$ENV{CI_PIPELINE_ID} J$ENV{CI_JOB_ID} )
1214

1315
if (NOT CTEST_CMAKE_GENERATOR)
@@ -25,7 +27,10 @@ endif ()
2527
# just reference line for manual configuration
2628
# cmake -GNinja -DCMAKE_BUILD_TYPE=RelWithDebInfo -DWITH_ODBC=1 -DWITH_RE2=1 -DWITH_STEMMER=1 -DWITH_POSTGRESQL=0 -DWITH_EXPAT=1 -DWITH_SSL=1 -DTEST_SPECIAL_EXTERNAL=1 -DDISABLE_MEMROUTINES=1 -DCMAKE_C_COMPILER=/usr/bin/clang-12 -DCMAKE_CXX_COMPILER=/usr/bin/clang++-12 ..
2729
# common test options
28-
set ( CONFIG_OPTIONS "WITH_ODBC=1;WITH_RE2=1;WITH_STEMMER=1;WITH_POSTGRESQL=0;WITH_EXPAT=1;WITH_SSL=1;TEST_SPECIAL_EXTERNAL=1;DISABLE_MEMROUTINES=1" )
30+
set ( CONFIG_OPTIONS "WITH_ODBC=1;WITH_RE2=1;WITH_STEMMER=1;WITH_POSTGRESQL=0;WITH_EXPAT=1;WITH_SSL=1;TEST_SPECIAL_EXTERNAL=1;DISABLE_MEMROUTINES=1;DISABLE_PERFETTO=1" )
31+
if (UNITY_BUILD)
32+
LIST ( APPEND CONFIG_OPTIONS "CMAKE_UNITY_BUILD=${UNITY_BUILD}" )
33+
endif ()
2934
set ( CTEST_BINARY_DIRECTORY "${CTEST_SOURCE_DIRECTORY}/build" )
3035

3136
if ( LIBS_BUNDLE )
@@ -68,15 +73,12 @@ set ( CTEST_CUSTOM_WARNING_EXCEPTION ".*flexsphinx.*" )
6873

6974
# Do the test suite
7075
ctest_start ( "Continuous" )
71-
ctest_update ()
7276
ctest_configure ()
7377
ctest_build ()
7478

75-
if ( CTEST_REGEX )
76-
# ctest_test ( RETURN_VALUE retcode INCLUDE "${CTEST_REGEX}" REPEAT UNTIL_PASS:${RETRIES})
77-
else()
78-
# ctest_test ( RETURN_VALUE retcode REPEAT UNTIL_PASS:${RETRIES})
79-
endif()
79+
if (NO_TESTS)
80+
return ()
81+
endif ()
8082

8183
if ( WITH_MEMCHECK AND CTEST_MEMORYCHECK_COMMAND )
8284
set (ENV{vlg} "${CTEST_MEMORYCHECK_COMMAND}")
@@ -93,8 +95,6 @@ if ( WITH_MEMCHECK AND CTEST_MEMORYCHECK_COMMAND )
9395
endif ()
9496
endif ( WITH_MEMCHECK AND CTEST_MEMORYCHECK_COMMAND )
9597

96-
ctest_submit ()
97-
9898
if ( retcode )
9999
MESSAGE ( STATUS "tests failed with ${retcode} code, but we don't fail as it is memcheck pass" )
100100
endif ()

Diff for: smokeci.sh

-1
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ trap "chown -R $uid:$gid /build/dev/$BUILD_DIR" EXIT
4141
cd /build/dev
4242
rm -rf $BUILD_DIR
4343
ctest -VV -S misc/ctest/gltest.cmake
44-
chmod -R a+rw $BUILD_DIR
4544
cd $BUILD_DIR
4645
chmod -R a+rw $CACHEB
4746
tar -cf build.tar api/libsphinxclient/testcli src/indexer src/indextool src/searchd src/gtests/gmanticoretest

Diff for: src/perfetto/CMakeLists.txt

+5
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
cmake_minimum_required ( VERSION 3.20 )
22

3+
if (DISABLE_PERFETTO)
4+
message (STATUS "Google perfetto library was explicitly disabled.")
5+
return()
6+
endif()
7+
38
# Provide valid perfetto library
49
if (EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/perfetto.cc" AND NOT CMAKE_SYSTEM_NAME STREQUAL FreeBSD)
510
# Define a static library for Perfetto.

Diff for: test/valgrind.supp

+9
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,15 @@
9999
fun:_ZN4cctz10TimeZoneIf4LoadERKNSt7__*
100100
}
101101

102+
{
103+
cctz::time_zone::Impl::LoadTimeZone
104+
Memcheck:Leak
105+
match-leak-kinds: reachable
106+
fun:_Znwm
107+
...
108+
fun:_ZN4cctz9time_zone4Impl12LoadTimeZoneERKNSt7__*
109+
}
110+
102111
#main
103112
{
104113
ConcatWarnings in ServiceMain

0 commit comments

Comments
 (0)