Mercurial > gnulib
view check-copyright @ 37246:5cfb3a67238d
regex: avoid glibc deadlock during configure
glibc has a known bug where certain corruptions of the heap can
cause malloc to default to printing a debug message that includes
a backtrace, but the act of getting the backtrace uses dlopen
which in turn calls into malloc, causing a recursive lock ending
in deadlock. Thus, when configure is probing for a known glibc
heap corruption bug, the overall configure would hang.
The solution suggested by glibc developers is to force malloc
to quit printing debug messages, which avoids recursive malloc.
* m4/regex.m4 (gl_REGEX): Avoid recursive malloc deadlock when
glibc bug 15078 in turn triggers bug 16159.
Reported by Michal Privoznik.
Signed-off-by: Eric Blake <eblake@redhat.com>
author | Eric Blake <eblake@redhat.com> |
---|---|
date | Tue, 03 Dec 2013 10:34:13 -0700 |
parents | c741bc27922a |
children | 344018b6e5d7 |
line wrap: on
line source
#!/bin/sh # # Copyright (C) 2011-2013 Free Software Foundation, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # error=0 for module in `./gnulib-tool --list`; do module_license=`./gnulib-tool --extract-license $module` if test "$module_license" = 'GPLed build tool'; then module_license='GPL' fi for file in `./gnulib-tool --extract-filelist $module | grep '^\(lib\|build-aux\)/'`; do if grep 'GNU General Public' $file > /dev/null; then if grep 'version 3 or later' $file > /dev/null \ || grep 'either version 3' $file > /dev/null; then file_license='GPL' else if grep 'version 2 or later' $file > /dev/null \ || grep 'either version 2' $file > /dev/null; then file_license='GPLv2+' else file_license='GPL??' fi fi else if grep 'Lesser General' $file > /dev/null; then if grep 'version 3 or later' $file > /dev/null \ || grep 'either version 3' $file > /dev/null; then file_license='LGPL' else if grep 'version 2 or later' $file > /dev/null \ || grep 'version 2 of the License, or' $file > /dev/null \ || grep 'version 2\.1 of the License, or' $file > /dev/null; then file_license='LGPLv2+' else file_license='LGPL??' fi fi else file_license='??' fi fi if test "$file_license" != "$module_license"; then if test $error = 0; then echo "Module License File License File name" echo "============== ============== =====================================" fi printf '%-14s %-14s %s\n' "$module_license" "$file_license" "$file" error=1 fi done done exit $error