mirror of
https://github.com/Unidata/netcdf-c.git
synced 2024-12-27 08:49:16 +08:00
751300ec59
This is a follow up to PR https://github.com/Unidata/netcdf-c/pull/1173 Sorry that it is so big, but leak suppression can be complex. This PR fixes all remaining memory leaks -- as determined by -fsanitize=address, and with the exceptions noted below. Unfortunately. there remains a significant leak that I cannot solve. It involves vlens, and it is unclear if the leak is occurring in the netcdf-c library or the HDF5 library. I have added a check_PROGRAM to the ncdump directory to show the problem. The program is called tst_vlen_demo.c To exercise it, build the netcdf library with -fsanitize=address enabled. Then go into ncdump and do a "make clean check". This should build tst_vlen_demo without actually executing it. Then do the command "./tst_vlen_demo" to see the output of the memory checker. Note the the lost malloc is deep in the HDF5 library (in H5Tvlen.c). I am temporarily working around this error in the following way. 1. I modified several test scripts to not execute known vlen tests that fail as described above. 2. Added an environment variable called NC_VLEN_NOTEST. If set, then those specific tests are suppressed. This should mean that the --disable-utilities option to ./configure should not need to be set to get a memory leak clean build. This should allow for detection of any new leaks. Note: I used an environment variable rather than a ./configure option to control the vlen tests. This is because it is temporary (I hope) and because it is a bit tricky for shell scripts to access ./configure options. Finally, as before, this only been tested with netcdf-4 and hdf5 support.
148 lines
2.9 KiB
Bash
Executable File
148 lines
2.9 KiB
Bash
Executable File
#!/bin/sh
|
|
|
|
if test "x$srcdir" = x ; then srcdir=`pwd`; fi
|
|
. ../test_common.sh
|
|
|
|
# To add a new test,
|
|
# 1. put the .cdl file in the 'cdl' directory
|
|
# 2. put the result of running ncgen then ncdump
|
|
# into the directory 'expected' as .dmp
|
|
# 3. Modify the file tst_ncgen_shared.sh to add
|
|
# the test to the end of the TESTS4 variable
|
|
# or CLASSIC variable.
|
|
# 4. Add the new files into cdl/Makfile.am
|
|
# and expected/Makefile.am
|
|
|
|
set -e
|
|
RESULTSDIR="./results_$$"
|
|
#SHOWXFAILS=1
|
|
|
|
# Locate the cdl and expected directory
|
|
cdl="${srcdir}/cdl"
|
|
expected="${srcdir}/expected"
|
|
|
|
case "x${KFLAG}" in
|
|
x1) CLASSIC=1; MODE=3;;
|
|
x2) CLASSIC=1; MODE=3;;
|
|
x3) CLASSIC=0; MODE=4;;
|
|
x4) CLASSIC=1; MODE=3;;
|
|
*) echo "illegal KFLAG" ; exit 1;;
|
|
esac
|
|
|
|
# Define the set of tests that can be
|
|
# processed with either the -k nc3 or -k nc4 or -k nc7 flag
|
|
|
|
# The netcdf-3 tests are divided into two parts
|
|
# These test can be run when --enable-netcdf-4 is false
|
|
CLASSIC3="\
|
|
nc_enddef \
|
|
ref_tst_unicode \
|
|
ref_tst_utf8 \
|
|
simple_xy \
|
|
small \
|
|
nc_sync \
|
|
ref_tst_small \
|
|
small2 \
|
|
tst_ncml
|
|
n3time \
|
|
ref_tst_chardata \
|
|
ref_tst_nul3 \
|
|
ref_tst_long_charconst \
|
|
tst_chararray \
|
|
unlimtest1 \
|
|
ref_keyword"
|
|
|
|
NONCLASSIC3="\
|
|
test0 \
|
|
sfc_pres_temp \
|
|
fills \
|
|
c0 \
|
|
example_good \
|
|
pres_temp_4D \
|
|
ref_nctst \
|
|
ref_nctst_64bit_offset \
|
|
ref_ctest1_nc4 \
|
|
ref_ctest1_nc4c \
|
|
ref_nctst_netcdf4 \
|
|
ref_nctst_netcdf4_classic \
|
|
ref_tst_unlim2 \
|
|
ref_tst_names \
|
|
"
|
|
|
|
if test "${CLASSIC}" = "1" ; then
|
|
TESTS3="${CLASSIC3}"
|
|
else
|
|
TESTS3="${CLASSIC3} ${NONCLASSIC3}"
|
|
fi
|
|
|
|
# Define the set of tests that must be
|
|
# processed with the -k nc4 flag
|
|
|
|
TESTS4="\
|
|
ref_dimscope \
|
|
ref_typescope \
|
|
ref_tst_string_data \
|
|
ref_tst_comp \
|
|
ref_tst_comp2 \
|
|
ref_tst_comp3 \
|
|
ref_tst_group_data \
|
|
ref_tst_opaque_data \
|
|
ref_tst_solar_1 \
|
|
ref_tst_solar_2 \
|
|
ref_tst_enum_data \
|
|
ref_tst_special_atts \
|
|
ref_tst_nans \
|
|
ref_solar \
|
|
unlimtest2 \
|
|
ref_niltest \
|
|
ref_tst_h_scalar \
|
|
ref_tst_nul4 \
|
|
"
|
|
|
|
if test "x$NC_VLEN_NOTEST" = x ; then
|
|
TESTS4="$TESTS4 ref_tst_vlen_data ref_tst_vlen_data2"
|
|
fi
|
|
|
|
SPECIALTESTS3="ref_tst_special_atts3"
|
|
|
|
SPECIALTESTS="${SPECIALTESTS3} ref_tst_special_atts"
|
|
|
|
XFAILTESTS=""
|
|
# Fails because ncdump does not output multiple unlim char types correctly
|
|
XFAILTESTS="ref_tst_unlim2 $XFAILTESTS"
|
|
# Fails because ?
|
|
XFAILTESTS="ref_const_test $XFAILTESTS"
|
|
# Fails because ?
|
|
XFAILTESTS="ref_tst_chardata $XFAILTESTS"
|
|
# Fails because ncdump is crashing
|
|
#XFAILTESTS="ref_tst_econst $XFAILTESTS"
|
|
|
|
# Following are generally not run
|
|
# Because of the size of their output
|
|
BIGTESTS3="\
|
|
bigf1 \
|
|
bigf2 \
|
|
bigr1 \
|
|
bigr2"
|
|
|
|
# Following deliberately produces a very large
|
|
# file: too large for netcdf to handle
|
|
# Currently not used because of space and time
|
|
# constraints
|
|
XFAILBIG="bigf3"
|
|
|
|
BIGTESTS4="ref_tst_solar_1"
|
|
|
|
# This test is both big and slow
|
|
# File was too large to reasonably include
|
|
# so I removed it
|
|
#BIGBIG3="gfs1"
|
|
|
|
BIGTESTS="${BIGTESTS3} ${BIGTESTS4} ${BIGBIG3}"
|
|
|
|
failcount=0
|
|
passcount=0
|
|
xfailcount=0
|
|
|
|
rm -fr $RESULTSDIR
|