runshell: fix some mess left in a race
authorJoey Hess <joeyh@joeyh.name>
Mon, 5 Oct 2020 17:42:43 +0000 (13:42 -0400)
committerJoey Hess <joeyh@joeyh.name>
Mon, 5 Oct 2020 17:42:43 +0000 (13:42 -0400)
This seems to be the best way to deal with the race; if the first and
second runshell are running very close together, the first will generate
the locale directory, and a second test -d would still leave a race
window.

standalone/linux/skel/runshell

index c730153deb0d77096a1201093e0e43d99cc767eb..90f262ca65a0775b6bc4fc28511898e7533d8f8a 100755 (executable)
@@ -189,6 +189,9 @@ if [ -z "${LOCPATH+set}" ] && [ -z "$GIT_ANNEX_PACKAGE_INSTALL" ]; then
                                                # use LANG=C to avoid it reading the system locale archive.
                                                I18NPATH="$base/i18n" LANG=C localedef -i "${localeenv%%.*}" -c -f UTF-8 "$LOCPATH/$localeenv.new.$$" &&
                                                mv "$LOCPATH/$localeenv.new.$$" "$LOCPATH/$localeenv"
+                                               # In a race, LOCPATH may get created by another process,
+                                               # in which cache the mv above would put it here.
+                                               rm -rf "$LOCPATH/$localeenv/$localeenv.new.$$"
                                        ) >/dev/null 2>/dev/null || true
                                fi
                        fi