Elia Pinto [off-list ref] writes:
In glibc >= 2.34 MALLOC_CHECK_ and MALLOC_PERTURB_ environment
variables have been replaced by GLIBC_TUNABLES. Also the new
Does it hurt to have these older environment variables? If not,
we would prefer to see redundant but less deeply indented code,
I would imagine.
quoted hunk
+ if type -p getconf >/dev/null 2>&1; then
+ _GLIBC_VERSION="$(getconf GNU_LIBC_VERSION 2>/dev/null | awk '{ print $2 }')"
+ if [ -n "$_GLIBC_VERSION" -a $(expr "$_GLIBC_VERSION" \>= "2.34") ]; then
+ _HAVE_GLIBC_234="yes"
+ fi
+ fi
Style. We prefer "test ..." over "[ ... ]" and more importantly we
don't use "test X -a Y".
Do we absolutely need "test -p getconf" with an extra indentation?
I suspect we don't.
if _GLIBC_VERSION=$(getconf GNU_LIBC_VERSION 2>/dev/null) &&
_GLIBC_VERSION=${_GLIBC_VERSION#"glibc "} &&
test 2.34 \<= "$_GLIBC_VERSION"
then
USE_GLIBC_TUNABLES=YesPlease
fi
perhaps? I am not sure if glibc 2.4 still matters, getconf reports
it as 2.04 or 2.4, for the above comparison to be OK, though.
In any case, HAVE_GLIBC_234 is a horrible variable name to use for
this purpose, as the primary thing the two use sites care about is
not the version but if they should use the GLIBC_TUNABLES mechanism,
so it would be better to name the variable after the feature.
quoted hunk
setup_malloc_check () {
- MALLOC_CHECK_=3 MALLOC_PERTURB_=165
- export MALLOC_CHECK_ MALLOC_PERTURB_
+ if test "x$_HAVE_GLIBC_234" = xyes ; then
+ LD_PRELOAD="libc_malloc_debug.so.0" GLIBC_TUNABLES="glibc.malloc.check=1:glibc.malloc.perturb=165"
+ export LD_PRELOAD GLIBC_TUNABLES
+ else
+ MALLOC_CHECK_=3 MALLOC_PERTURB_=165
+ export MALLOC_CHECK_ MALLOC_PERTURB_
+ fi
Avoid overly long lines when you can easily do so.
MALLOC_CHECK_=3 MALLOC_PERTURB_=165
export MALLOC_CHECK_ MALLOC_PERTURB_
+ case "$USE_GLIBC_TUNABLES" in
+ YesPlease)
+ g=
+ LD_PRELOAD=libc_malloc_debug.so.0
+ for t in \
+ glibc.malloc.check=1 \
+ glibc.malloc.perturb=165 \
+ do
+ g="$g${g:+:}$t"
+ done
+ GLIBC_TUNABLES=$g
+ ;;
+ esac
perhaps?
quoted hunk
}
teardown_malloc_check () {
- unset MALLOC_CHECK_ MALLOC_PERTURB_
+ if test "x$_HAVE_GLIBC_234" = xyes ; then
+ unset LD_PRELOAD GLIBC_TUNABLES
+ else
+ unset MALLOC_CHECK_ MALLOC_PERTURB_
+ fi
Similarly.
}
fi