use irq sharing on the serial line
[openwrt.git] / package / base-files / default / lib / network / config.sh
index a66c92b..9c91a7c 100755 (executable)
@@ -120,8 +120,13 @@ setup_interface() {
                        env -i ACTION="ifup" INTERFACE="config" DEVICE="$iface" PROTO=static /sbin/hotplug "iface" &
                ;;
                dhcp)
+                       # prevent udhcpc from starting more than once
+                       lock "/var/lock/dhcp-$iface"
                        pid="$(cat "$pidfile" 2>/dev/null)"
-                       [ -n "$pid" -a -d "/proc/$pid" ] && kill -9 "$pid"
+                       [ -d "/proc/$pid" ] && grep udhcpc "/proc/${pid}/cmdline" >/dev/null 2>/dev/null && {
+                               lock -u "/var/lock/dhcp-$iface"
+                               return 0
+                       }
 
                        config_get ipaddr "$config" ipaddr
                        config_get netmask "$config" netmask
@@ -134,6 +139,7 @@ setup_interface() {
                        # don't stay running in background if dhcp is not the main proto on the interface (e.g. when using pptp)
                        [ "$proto1" != "$proto" ] && dhcpopts="-n -q"
                        $DEBUG udhcpc -i "$iface" ${ipaddr:+-r $ipaddr} ${hostname:+-H $hostname} -b -p "$pidfile" ${dhcpopts:- -R &}
+                       lock -u "/var/lock/dhcp-$iface"
                ;;
                *)
                        if ( eval "type setup_interface_$proto" ) >/dev/null 2>/dev/null; then
This page took 0.024518 seconds and 4 git commands to generate.