Avoid file creation/deletion races in emsdk_env.sh by using a temporary file(#307)

Fixes https://github.com/emscripten-core/emscripten/issues/9090.
This commit is contained in:
Zoltan Varga
2019-07-26 19:50:10 -04:00
committed by Alon Zakai
parent aa2812b8ba
commit e2110d8816
2 changed files with 11 additions and 6 deletions

10
emsdk
View File

@@ -2603,13 +2603,17 @@ def main():
return 0 return 0
elif cmd == 'construct_env': elif cmd == 'construct_env':
silentremove(EMSDK_SET_ENV) # Clean up old temp file up front, in case of failure later before we get to write out the new one. if len(sys.argv) == 2:
outfile = EMSDK_SET_ENV
silentremove(EMSDK_SET_ENV) # Clean up old temp file up front, in case of failure later before we get to write out the new one.
else:
outfile = sys.argv[2]
tools_to_activate = currently_active_tools() tools_to_activate = currently_active_tools()
tools_to_activate = process_tool_list(tools_to_activate, log_errors=True) tools_to_activate = process_tool_list(tools_to_activate, log_errors=True)
env_string = construct_env(tools_to_activate, len(sys.argv) >= 3 and 'perm' in sys.argv[2]) env_string = construct_env(tools_to_activate, len(sys.argv) >= 3 and 'perm' in sys.argv[2])
open(EMSDK_SET_ENV, 'w').write(env_string) open(outfile, 'w').write(env_string)
if LINUX or OSX: if LINUX or OSX:
os.chmod(EMSDK_SET_ENV, 0o755) os.chmod(outfile, 0o755)
return 0 return 0
elif cmd == 'update': elif cmd == 'update':
update_emsdk() update_emsdk()

View File

@@ -14,7 +14,6 @@
# ./emsdk_env.sh # ./emsdk_env.sh
# #
# which won't have any effect. # which won't have any effect.
SRC="$BASH_SOURCE" SRC="$BASH_SOURCE"
if [ "$SRC" = "" ]; then if [ "$SRC" = "" ]; then
SRC="$0" SRC="$0"
@@ -23,7 +22,9 @@ CURDIR="$(pwd)"
cd "$(dirname "$SRC")" cd "$(dirname "$SRC")"
unset SRC unset SRC
./emsdk construct_env "$@" tmpfile=`mktemp` || exit 1
. ./emsdk_set_env.sh ./emsdk construct_env "$@" $tmpfile
. $tmpfile
rm -f $tmpfile
cd "$CURDIR" cd "$CURDIR"