From d1d615a9443b494d4f54baccc105ef4cdfb2c895 Mon Sep 17 00:00:00 2001 From: Mark Wooding Date: Fri, 15 Apr 2022 17:04:16 +0100 Subject: [PATCH] dvdrip-upload: Replace the signalling protocol with, err, signals. No longer needs lockfiles. --- dvdrip-upload | 83 +++++++++++++++++++++++++++++++---------------------------- 1 file changed, 43 insertions(+), 40 deletions(-) diff --git a/dvdrip-upload b/dvdrip-upload index ce788fd..46289bd 100755 --- a/dvdrip-upload +++ b/dvdrip-upload @@ -27,31 +27,6 @@ esac case $bogus in t) usage >&2; exit 2 ;; esac case $verbose in t) set -x ;; esac -case $kill in - t) echo quit >"$tmp/upload.wakeup"; exit 0 ;; -esac - -case ${DVDRIP_UPLOAD_LOCKEDP+t} in - t) lockedp=t ;; - *) lockedp=nil; DVDRIP_UPLOAD_LOCKEDP=t; export DVDRIP_UPLOAD_LOCKEDP ;; -esac -case $lockedp,$listen in - t,*) ;; - nil,nil) - if [ -p "$tmp/upload.wakeup" ]; then - echo check >"$tmp/upload.wakeup" - exit 0 - else - exec locking "$tmp/upload.lock" "$0" ${opts:+"-$opts"} - fi - exit 2 - ;; - nil,t) - exec locking -f "$tmp/upload.lock" "$0" ${opts:+"-$opts"} - exit 2 - ;; -esac - notify () { colour=$1 message=$2 echo "$(tput bold; tput setaf $colour)$message$(tput sgr0; tput op)" @@ -108,21 +83,49 @@ check () { done } -case $listen in - nil) - check +try_kick_daemon () { + sig=$1 + + if [ -f "$tmp/upload.pid" ]; then + daemon=$(cat "$tmp/upload.pid") + case $daemon in + "" | *[!0-9]*) ;; + *) if kill -$sig $daemon >/dev/null 2>&1; then return 0; fi ;; + esac + fi + return 1 +} + +try_kill () { + victim=$1 + + case $victim in + nil) ;; + *) kill $victim >/dev/null 2>&1 || : ;; + esac +} + +case $kill,$listen in + t,t) + fail "inconsistent options \`-k' and \`-l'" ;; - t) - rm -f "$tmp/upload.newpipe" - mkfifo "$tmp/upload.newpipe" - mv "$tmp/upload.newpipe" "$tmp/upload.wakeup" - while read line <&3; do - case $line in - check) check ;; - quit) info "quitting on user request"; break ;; - *) warn "unknown command \`$line'" ;; - esac - done 3<>"$tmp/upload.wakeup" - rm -f "$tmp/upload.wakeup" "$tmp/upload.lock" + t,nil) + if ! try_kick_daemon TERM; then fail "failed to kill listener"; fi + ;; + nil,t) + if try_kick_daemon 0; then fail "daemon already running (pid $daemon)"; fi + trap 'try_kill $sleepy; rm -f "$tmp/upload.pid"' EXIT + trap 'info "quitting on user request"; exit 0' INT TERM + trap 'try_kill $sleepy' HUP + echo $$ >"$tmp/upload.pid.new" + mv "$tmp/upload.pid.new" "$tmp/upload.pid" + while :; do + sleep 3600& sleepy=$! + check + wait $sleepy || :; sleepy=nil + done + ;; + nil,nil) + if ! try_kick_daemon HUP; then check; fi ;; esac -- 2.11.0