X-Git-Url: https://git.rohieb.name/openwrt.git/blobdiff_plain/3153b44635dccd3e0aa1b4dc7f9633aa11fa53b5..11f6a780e57e9febfa701f688575dfc79cc1f970:/package/base-files/default/lib/network/config.sh?ds=sidebyside diff --git a/package/base-files/default/lib/network/config.sh b/package/base-files/default/lib/network/config.sh index a66c92bc0..9c91a7cab 100755 --- a/package/base-files/default/lib/network/config.sh +++ b/package/base-files/default/lib/network/config.sh @@ -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