Bug: https://bugs.gentoo.org/831927 Closes: https://github.com/gentoo/portage/pull/786 Signed-off-by: Mike Gilbert <flop...@gentoo.org> --- bin/estrip | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-)
diff --git a/bin/estrip b/bin/estrip index 599ca2ceb..cdad58c31 100755 --- a/bin/estrip +++ b/bin/estrip @@ -189,6 +189,19 @@ save_elf_sources() { "${x}") } +# Try to create a symlink. +# Return success if it already exists. +__try_symlink() { + local target=$1 + local name=$2 + # Check for an existing link before and after in case we are racing against + # another process. + [[ -L ${name} ]] || + ln -s "${target}" "${name}" || + [[ -L ${name} ]] || + die "failed to create symlink '${name}'" +} + # Usage: save_elf_debug <src> <inode_debug> [splitdebug] save_elf_debug() { ${FEATURES_splitdebug} || return 0 @@ -245,7 +258,7 @@ save_elf_debug() { [[ -g ${src} || -u ${src} ]] && args+=",go-r" chmod ${args} "${dst}" # symlink so we can read the name back. - ln -s "${dst}" "${inode_debug}" || die "failed to create symlink '${inode_debug}'" + __try_symlink "${dst}" "${inode_debug}" # if we don't already have build-id from debugedit, look it up if [[ -z ${buildid} ]] ; then @@ -258,8 +271,8 @@ save_elf_debug() { local src_buildid_rel="../../../../../${src#${ED%/}/}" local dst_buildid_rel="../../${dst#${ED%/}/usr/lib/debug/}" mkdir -p "${buildid_dir}" || die - [[ -L "${buildid_file}".debug ]] || ln -s "${dst_buildid_rel}" "${buildid_file}.debug" || die "failed to create symlink '${buildid_file}.debug'" - [[ -L "${buildid_file}" ]] || ln -s "${src_buildid_rel}" "${buildid_file}" || die "failed to create symlink '${buildid_file}'" + __try_symlink "${dst_buildid_rel}" "${buildid_file}.debug" + __try_symlink "${src_buildid_rel}" "${buildid_file}" fi fi fi -- 2.35.1