#!/usr/bin/env bash _render_wasm_lock_source=${BASH_SOURCE[0]} _render_wasm_lock_dir=${_render_wasm_lock_source%/*} if [[ "$_render_wasm_lock_dir" == "$_render_wasm_lock_source" ]]; then _render_wasm_lock_dir="." fi _RENDER_WASM_LOCK_DIR=$(cd -- "$_render_wasm_lock_dir" && pwd) _RENDER_WASM_BUILD_LOCK_HELD=0 release_build_lock() { if [[ "$_RENDER_WASM_BUILD_LOCK_HELD" == "1" ]]; then _RENDER_WASM_BUILD_LOCK_HELD=0 flock --unlock 9 2>/dev/null || true fi exec 9>&- } acquire_build_lock() { if ! command -v flock > /dev/null 2>&1; then echo "ERROR: render-wasm builds require flock from util-linux on Linux" >&2 return 1 fi if [[ "$_RENDER_WASM_BUILD_LOCK_HELD" == "1" ]]; then return 0 fi local lock_file="${RENDER_WASM_LOCK_FILE:-$_RENDER_WASM_LOCK_DIR/.render-wasm-build.lock}" if ! exec 9>> "$lock_file"; then echo "ERROR: cannot open render-wasm build lock: $lock_file" >&2 return 1 fi trap 'release_build_lock' EXIT trap 'release_build_lock; exit 129' HUP trap 'release_build_lock; exit 130' INT trap 'release_build_lock; exit 131' QUIT trap 'release_build_lock; exit 143' TERM if ! flock --exclusive --nonblock 9; then echo "Waiting for another render-wasm build to finish: $lock_file" >&2 if ! flock --exclusive 9; then echo "ERROR: cannot acquire render-wasm build lock: $lock_file" >&2 release_build_lock return 1 fi fi _RENDER_WASM_BUILD_LOCK_HELD=1 }