From 66e08077bee03c33b13064b892171bf6e1c320e3 Mon Sep 17 00:00:00 2001 From: Luke Shumaker Date: Mon, 26 Oct 2015 00:40:58 -0400 Subject: tidy --- network-online | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) (limited to 'network-online') diff --git a/network-online b/network-online index 5bb51d8..484567b 100755 --- a/network-online +++ b/network-online @@ -4,10 +4,24 @@ # terms of the Do What The Fuck You Want To Public License, Version 2, # as published by Sam Hocevar. See the COPYING file for more details. +# Usage: network-online [start|stop] NETWORK_NAME mode="$1" lock=/run/network-online/lock fifo=/run/network-online/"$2" PS4="$mode: " + +# Use a named pipe (fifo) as an inter-process synchronization +# mechanism; a call to block_{a,b} blocks its counterpart is run. +block_a() { + cat "$fifo" >/dev/null +} +block_b() { + echo foo >> "$fifo" +} + +# Because of restrictions put in place by systemd, the ExecStart +# process can't run `systemctl stop network-online.target`, but the +# ExecStop process can. case "$mode" in start) trap 'rm -f -- "$fifo"' EXIT @@ -16,17 +30,18 @@ case "$mode" in exec 8>"$lock" || exit $? flock -s 8 || exit $? systemctl start network-online.target || exit $? - mkfifo "$fifo" || exit $? - cat "$fifo" + + block_a # wait for 'stop' to be called exec 8>&- - echo stopped >> "$fifo" + block_a # signal to 'stop' that we've unlocked ;; stop) set -x exec 8>"$lock" || exit $? - echo stopping >> "$fifo" || exit $? - cat "$fifo" || exit $? + flock -s 8 || exit $? + block_b # signal 'start' to stop + block_b # wait for 'start' to unlock if flock -x -n 8; then systemctl stop network-online.target rm -rf /run/network-online -- cgit v1.2.3