summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
8637691)
Wait at least 10 s after we tried to start it. This prevents spinning
if the player is just hopelessly crashy (or misconfigured).
+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 $NOW = time;
$SIG{CHLD} = sub {
my $NOW = time;
$SIG{CHLD} = sub {
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; }
-sub start () { $WANT = "on"; $STOPTIME = undef; }
+sub start () {
+ if ($WANT ne "on") {
+ $WANT = "on";
+ $WAKETIME = $NOW < $RESTARTTIME ? $RESTARTTIME : undef;
+ }
+}
sub pause () {
if ($WANT eq "on") { $WANT = "pause"; $WAKETIME = $NOW + $PAUSETIME; }
sub pause () {
if ($WANT eq "on") { $WANT = "pause"; $WAKETIME = $NOW + $PAUSETIME; }
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;