~mdw
/
disorder-toys
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
disorder-notify.in, disorder-ondemand.in: Make sure `$buffer' is defined.
[disorder-toys]
/
disorder-ondemand.in
diff --git
a/disorder-ondemand.in
b/disorder-ondemand.in
index
86b9249
..
a517e7b
100755
(executable)
--- a/
disorder-ondemand.in
+++ b/
disorder-ondemand.in
@@
-27,19
+27,23
@@
sub connection () {
}
my $PAUSETIME = 300;
}
my $PAUSETIME = 300;
+my $CRASHTIME = 10;
+my $RESTARTTIME = 0;
my $PID = undef;
my $STATE = "off"; # `off', `on', `killed'
my $WANT = "off"; # `off', `on', `pause'
my $PID = undef;
my $STATE = "off"; # `off', `on', `killed'
my $WANT = "off"; # `off', `on', `pause'
-my $
STOPTIME = undef; # if $WANT eq "pause"
+my $
WAKETIME = undef;
my $NOW = time;
$SIG{CHLD} = sub {
my $NOW = time;
$SIG{CHLD} = sub {
+ $NOW = time;
KID: for (;;) {
my $kid = waitpid -1, WNOHANG;
last if $kid <= 0;
if ($kid == $PID) {
mumble "player exited (st = $?)";
$PID = undef; $STATE = "off";
KID: for (;;) {
my $kid = waitpid -1, WNOHANG;
last if $kid <= 0;
if ($kid == $PID) {
mumble "player exited (st = $?)";
$PID = undef; $STATE = "off";
+ if ($WANT eq "on" && $RESTARTTIME > $NOW) { $WAKETIME = $RESTARTTIME; }
}
}
};
}
}
};
@@
-49,26
+53,32
@@
$SIG{TERM} = $SIG{INT} = sub {
exit 0;
};
exit 0;
};
-sub start () { $WANT = "on"; $STOPTIME = undef; }
+sub start () {
+ if ($WANT ne "on") {
+ $WANT = "on";
+ $WAKETIME = $NOW < $RESTARTTIME ? $RESTARTTIME : undef;
+ }
+}
sub pause () {
sub pause () {
- if ($WANT eq "on") { $WANT = "pause"; $
STOP
TIME = $NOW + $PAUSETIME; }
+ if ($WANT eq "on") { $WANT = "pause"; $
WAKE
TIME = $NOW + $PAUSETIME; }
}
sub fix_state () {
##mumble "state = $STATE ($PID)";
}
sub fix_state () {
##mumble "state = $STATE ($PID)";
- ##mumble "want = $WANT ($
STOP
TIME <=> $NOW)";
+ ##mumble "want = $WANT ($
WAKE
TIME <=> $NOW)";
- if ($WANT eq "pause" && $NOW >= $
STOP
TIME) {
- $WANT = "off"; $
STOP
TIME = undef;
+ if ($WANT eq "pause" && $NOW >= $
WAKE
TIME) {
+ $WANT = "off"; $
WAKE
TIME = undef;
mumble "pause time up: stopping" if $STATE eq "on";
}
mumble "pause time up: stopping" if $STATE eq "on";
}
- if ($WANT eq "on" && $STATE eq "off") {
+ if ($WANT eq "on" && $STATE eq "off" &&
+ (!defined($WAKETIME) || $NOW >= $WAKETIME)) {
my $kid = fork();
if (!$kid) { exec @ARGV; }
my $kid = fork();
if (!$kid) { exec @ARGV; }
- $STATE = "on"; $PID = $kid;
+ $STATE = "on"; $PID = $kid;
$RESTARTTIME = $NOW + $CRASHTIME;
mumble "player wanted but not running: started pid $kid";
} elsif ($WANT eq "off" && $STATE eq "on") {
kill "TERM", $PID;
mumble "player wanted but not running: started pid $kid";
} elsif ($WANT eq "off" && $STATE eq "on") {
kill "TERM", $PID;
@@
-99,7
+109,7
@@
sub watch_status () {
SEL: {
eval {
$nfd = select my $rdout = $rdin, undef, undef,
SEL: {
eval {
$nfd = select my $rdout = $rdin, undef, undef,
- defined($
STOPTIME) ? $STOP
TIME - $NOW : 60;
+ defined($
WAKETIME) ? $WAKE
TIME - $NOW : 60;
};
if ($@ && $@->errno == EINTR) { next SEL; }
elsif ($@) { mumble "error from select: " . $@->errno; last WATCH; }
};
if ($@ && $@->errno == EINTR) { next SEL; }
elsif ($@) { mumble "error from select: " . $@->errno; last WATCH; }
@@
-120,7
+130,7
@@
sub watch_status () {
}
@lines = split /\n/, $buffer, -1;
}
@lines = split /\n/, $buffer, -1;
- $buffer = pop
@lines
;
+ $buffer = pop
(@lines) // ""
;
}
for my $line (@lines) {
}
for my $line (@lines) {