Commit 95bb3cb8 authored by Anel Husakovic's avatar Anel Husakovic

MDEV-16676 Using malloc-lib=jemalloc in MariaDB 10.2 causes non-critical error...

MDEV-16676 Using malloc-lib=jemalloc in MariaDB 10.2 causes non-critical error about missing mysql_config on startup

- This commit is based on patch 84fe9720a4d2483ff67b6a and suggestion of
Jean Weisbuch to use `ldconfig -p`
- Format of ldconfig output:
"libjemalloc.so.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libjemalloc.so.1"

```
$ ./scripts/mysqld_safe
201013 13:36:50 mysqld_safe Adding '/usr/lib/x86_64-linux-gnu/libjemalloc.so.1' to LD_PRELOAD for mysqld
201013 13:36:50 mysqld_safe Logging to '/home/anel/builds/data-10.5/mysqld_safe_anel.err'.
201013 13:36:50 mysqld_safe Starting mysqld daemon with databases from /home/anel/builds/data-10.5
```
Reviewed by: Daniel Black, Faustin Lammler
parent db02c458
......@@ -456,25 +456,10 @@ mysqld_ld_preload_text() {
echo "$text"
}
mysql_config=
get_mysql_config() {
if [ -z "$mysql_config" ]; then
mysql_config=`echo "$0" | sed 's,/[^/][^/]*$,/mysql_config,'`
if [ ! -x "$mysql_config" ]; then
log_error "Can not run mysql_config $@ from '$mysql_config'"
exit 1
fi
fi
"$mysql_config" "$@"
}
# set_malloc_lib LIB
# - If LIB is empty, do nothing and return
# - If LIB starts with 'tcmalloc' or 'jemalloc', look for the shared library in
# /usr/lib, /usr/lib64 and then pkglibdir.
# - If LIB starts with 'tcmalloc' or 'jemalloc', look for the shared library
# using `ldconfig`.
# tcmalloc is part of the Google perftools project.
# - If LIB is an absolute path, assume it is a malloc shared library
#
......@@ -482,28 +467,28 @@ get_mysql_config() {
# running mysqld. See ld.so for details.
set_malloc_lib() {
malloc_lib="$1"
if expr "$malloc_lib" : "\(tcmalloc\|jemalloc\)" > /dev/null ; then
pkglibdir=`get_mysql_config --variable=pkglibdir`
where=''
# This list is kept intentionally simple. Simply set --malloc-lib
# to a full path if another location is desired.
for libdir in /usr/lib /usr/lib64 "$pkglibdir" "$pkglibdir/mysql"; do
tmp=`echo "$libdir/lib$malloc_lib.so".[0-9]`
where="$where $libdir"
# log_notice "DEBUG: Checking for malloc lib '$tmp'"
[ -r "$tmp" ] || continue
malloc_lib="$tmp"
where=''
break
done
if ! my_which ldconfig > /dev/null 2>&1
then
log_error "ldconfig command not found, required for ldconfig -p"
exit 1
fi
# format from ldconfig:
# "libjemalloc.so.1 (libc6,x86-64) => /usr/lib/x86_64-linux-gnu/libjemalloc.so.1"
libmalloc_path="$(ldconfig -p | sed -n "/lib${malloc_lib}/p" | cut -d '>' -f2)"
if [ -n "$where" ]; then
log_error "no shared library for lib$malloc_lib.so.[0-9] found in$where"
if [ -z "$libmalloc_path" ]; then
log_error "no shared library for lib$malloc_lib.so.[0-9] found."
exit 1
fi
fi
for f in $libmalloc_path; do
if [ -f "$f" ]; then
malloc_lib=$f # get the first path if many
break
fi
done
fi
# Allow --malloc-lib='' to override other settings
[ -z "$malloc_lib" ] && return
......@@ -520,7 +505,6 @@ set_malloc_lib() {
exit 1
;;
esac
add_mysqld_ld_preload "$malloc_lib"
}
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment