A problematic bug in simple-init can be resolved by eliminating one variable. Specifically, change:-
$wait=60*60*24;
while($active&& $running) {
(undef,$wait)=select(undef,undef,undef,$wait);
}
to:-
while($active&& $running) {
select(undef,undef,undef,60*60*24);
}
or suchlike. This change eliminates the case where the variable is zero and a busy wait on select() ensues.
Minor bugs remain. Regardless, simple-init is now suitable for deployment on systems which do not require suspend.
(Score: 2) by Knowledge Troll on Friday August 19 2016, @01:45AM
For downward compatibility, the code was intended to run on Perl4.
Whoa uhm ok.
It is preferable to keep dependencies down - especially in an init system.
Time::HiRes is in Core so it is already everywhere perl 5 is. Perl 4 I dunno. It even looks like strict depends on Time::HiRes so I would assume it has already even been loaded. But then Perl 4. *shrug*
And you should still find an algorithm for sleeping and ensuring the right sleep duration happened then either faulting or gracefully recovering from it.
(Score: 2) by cafebabe on Friday August 19 2016, @11:02AM
To get stuff to run on Perl4, Perl5 and Perl6, avoid array slices, :: and /e regular expressions with anything apart from data which is seven bit clean.
The underlying implementation of select() is more problematic. Different kernels may or may not set struct timeval to different levels of granularity. For my purposes, this was nice-to-have but providing a constant with each invocation is sufficient. In the general case, it may be necessary to check elapsed time with a separate system call. This may lead to further erroneous assumptions about time [infiniteundo.com].
1702845791×2