fix: close demo lifecycle races
This commit is contained in:
+19
-3
@@ -8,6 +8,7 @@ ANVIL_DEV_WORDS=(test test test test test test test test test test test junk)
|
||||
CLEANING=0
|
||||
ANVIL_PID='' ANVIL_START='' ANVIL_PGID=''
|
||||
VITE_PID='' VITE_START='' VITE_PGID=''
|
||||
ANVIL_VALIDATED=0 VITE_VALIDATED=0
|
||||
|
||||
cleanup() {
|
||||
local status=$? cleanup_status=0
|
||||
@@ -15,12 +16,14 @@ cleanup() {
|
||||
CLEANING=1
|
||||
trap - INT TERM EXIT
|
||||
if [[ -n "$VITE_PID" && -n "$VITE_START" && -n "$VITE_PGID" ]]; then
|
||||
demo_stop_launch "$ROOT" vite "$VITE_PID" "$VITE_START" "$VITE_PGID" || cleanup_status=1
|
||||
if ((VITE_VALIDATED == 1)); then demo_stop_launch "$ROOT" vite "$VITE_PID" "$VITE_START" "$VITE_PGID" || cleanup_status=1
|
||||
else demo_stop_raw_launch "$ROOT" vite "$VITE_PID" "$VITE_START" "$VITE_PGID" || cleanup_status=1; fi
|
||||
else
|
||||
demo_stop_recorded "$ROOT" vite || cleanup_status=1
|
||||
fi
|
||||
if [[ -n "$ANVIL_PID" && -n "$ANVIL_START" && -n "$ANVIL_PGID" ]]; then
|
||||
demo_stop_launch "$ROOT" anvil "$ANVIL_PID" "$ANVIL_START" "$ANVIL_PGID" || cleanup_status=1
|
||||
if ((ANVIL_VALIDATED == 1)); then demo_stop_launch "$ROOT" anvil "$ANVIL_PID" "$ANVIL_START" "$ANVIL_PGID" || cleanup_status=1
|
||||
else demo_stop_raw_launch "$ROOT" anvil "$ANVIL_PID" "$ANVIL_START" "$ANVIL_PGID" || cleanup_status=1; fi
|
||||
else
|
||||
demo_stop_recorded "$ROOT" anvil || cleanup_status=1
|
||||
fi
|
||||
@@ -34,10 +37,23 @@ trap cleanup EXIT
|
||||
capture_and_publish() {
|
||||
local kind=$1 pid=$2 start pgid
|
||||
for _ in {1..50}; do
|
||||
if demo_capture_process "$ROOT" "$kind" "$pid" start pgid; then
|
||||
if demo_capture_raw_launch "$pid" start pgid; then
|
||||
if [[ "$kind" == anvil ]]; then ANVIL_START=$start; ANVIL_PGID=$pgid
|
||||
else VITE_START=$start; VITE_PGID=$pgid; fi
|
||||
break
|
||||
fi
|
||||
demo_pid_is_running "$pid" || break
|
||||
sleep 0.02
|
||||
done
|
||||
[[ -n ${start:-} && -n ${pgid:-} ]] || {
|
||||
printf 'Could not capture raw ownership for launched %s PID %s; no signal will be guessed.\n' "$kind" "$pid" >&2
|
||||
return 1
|
||||
}
|
||||
for _ in {1..50}; do
|
||||
if demo_identity_matches "$ROOT" "$kind" "$pid" "$start" "$pgid"; then
|
||||
demo_publish_process "$ROOT" "$kind" "$pid" "$start" "$pgid"
|
||||
if [[ "$kind" == anvil ]]; then ANVIL_VALIDATED=1
|
||||
else VITE_VALIDATED=1; fi
|
||||
return
|
||||
fi
|
||||
demo_pid_is_running "$pid" || break
|
||||
|
||||
Reference in New Issue
Block a user