On Thursday 22 April 2010 10:05, Jeroen De Wachter wrote:
> Denys Vlasenko wrote:
> > On Wed, Apr 21, 2010 at 11:16 AM,  <[email protected]> wrote:
> >   
> >> From: Jeroen De Wachter <[email protected]>
> >>
> >> when ifdown gets called on a configuration that uses DHCP, it
> >> kills the udhcpc client by killing the process with the id in
> >> the udhcpc pid file (/var/run/udhcpc.%iface%.pid)
> >>
> >> However, when avahi-autoipd is in play, that pid file does not
> >> exist (due to a modified /usr/share/udhcpc/default.script that
> >> launches the avahi autoipd stuff) and killing the process
> >> fails.
> >>
> >> Due to the way iface_down is written:
> >>
> >> static int iface_down(struct interface_defn_t *iface)
> >> {
> >>    if (!iface->method->down(iface,check)) return -1;
> >>    set_environ(iface, "stop");
> >>    if (!execute_all(iface, "down")) return 0;
> >>    if (!iface->method->down(iface, doit)) return 0; // <-- returns 
> >> prematurely
> >>    if (!execute_all(iface, "post-down")) return 0;
> >>    return 1;
> >> }
> >>
> >> the post-down scripts are no longer executed, even though
> >> nothing has actually gone wrong...
> >>     
> >
> > I do not want to add more special cases to ifupdown.
> > There is a potentially infinite number of them.
> > Use something better than ifupdown.
> >   
> 
> How is this a special case?
> "If the pid file does not exists, don't try to read it...", is basically 
> my change

How about this then?

        result = execute(
                "test -f /var/run/udhcpc.%iface%.pid && "
                "kill `cat /var/run/udhcpc.%iface%.pid` 2>/dev/null",
                ifd, exec);

-- 
vda
_______________________________________________
busybox mailing list
[email protected]
http://lists.busybox.net/mailman/listinfo/busybox

Reply via email to