Package: runit-services
Version: 0.10.0

With the line:
      [ -d "/etc/sv/$name" ] && continue
the run script for dbus.dep-fixer attempts to check for the runit service 
definition of the given service, so that it can be (re)started using init.d, 
only if the runit definition does *not* exist, but a sysv init script in 
/etc/rc2.d does exist.

This check is flawed because /etc/sv does not contain the whole set of services 
known to runit. The runit-services package itself places services in 
/usr/share/runit/sv/ and this directory must also be checked to ensure correct 
behavior.

As it is now, it's possible that a service is started by runit directly, but 
also started again as an init.d script triggered by dbus.dep-fixer because a 
check of /etc/sv will not find that service (it is instead defined in 
/usr/share/runit/sv/) This kind of double-start can cause issues and race 
conditions.

The simplest fix is to check both directories, though even this is imperfect.

For a related bug about checking the existence of runit services so that the 
equivalent init.d scripts are/aren't started, see #1022837.

Reply via email to