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)"
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