From 549067e2b4da4a49900e3beabd9a9d409c7fac68 Mon Sep 17 00:00:00 2001
From: Jo-Philipp Wich <jow@openwrt.org>
Date: Tue, 3 May 2011 19:39:13 +0000
Subject: [PATCH] comgt: move 3g hotplug handling to tty subsystem, fixes race
 on coldplug (#9211)

SVN-Revision: 26809
---
 package/comgt/Makefile     |  4 ++--
 package/comgt/files/3g.usb | 13 ++++++++-----
 2 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/package/comgt/Makefile b/package/comgt/Makefile
index 7c120cb50d..49cc08bbf1 100644
--- a/package/comgt/Makefile
+++ b/package/comgt/Makefile
@@ -54,8 +54,8 @@ define Package/comgt/install
 	$(INSTALL_DATA) ./files/3g.button $(1)/etc/hotplug.d/button/05-3g
 	$(INSTALL_DIR) $(1)/etc/hotplug.d/iface
 	$(INSTALL_DATA) ./files/3g.iface $(1)/etc/hotplug.d/iface/05-3g
-	$(INSTALL_DIR) $(1)/etc/hotplug.d/usb
-	$(INSTALL_DATA) ./files/3g.usb $(1)/etc/hotplug.d/usb/30-3g
+	$(INSTALL_DIR) $(1)/etc/hotplug.d/tty
+	$(INSTALL_DATA) ./files/3g.usb $(1)/etc/hotplug.d/tty/30-3g
 	$(INSTALL_DIR) $(1)/etc/gcom
 	$(INSTALL_DATA) ./files/setpin.gcom $(1)/etc/gcom/setpin.gcom
 	$(INSTALL_DATA) ./files/setmode.gcom $(1)/etc/gcom/setmode.gcom
diff --git a/package/comgt/files/3g.usb b/package/comgt/files/3g.usb
index d5a38b8a4c..ea2fba1509 100644
--- a/package/comgt/files/3g.usb
+++ b/package/comgt/files/3g.usb
@@ -22,8 +22,11 @@ find_3g_iface() {
 		config_get dev "$cfg" device
 
 		if [ "${dev##*/}" = "${tty##*/}" ]; then
-			log "Starting interface $cfg for device ${tty##*/}"
-			( sleep 1; /sbin/ifup "$cfg" ) &
+			[ -z "$(ls /var/lock | grep ${dev##*/})" ] && {
+				log "Starting interface $cfg for device ${dev##*/}"
+				sleep 1
+				/sbin/ifup "$cfg"
+			}
 		fi
 	}
 }
@@ -31,13 +34,13 @@ find_3g_iface() {
 
 if [ "$ACTION" = add ]; then
 	case "$DEVICENAME" in
-		*-*:*.*) config_load network;;
+		tty*) config_load network;;
 		*) exit 0;;
 	esac
 
 	local tty
-	for tty in /sys/$DEVPATH/ttyUSB* /sys/$DEVPATH/tty/ttyACM* /sys/$DEVPATH/tty/ttyHS*; do
-		[ -d "$tty" ] || continue
+	for tty in /dev/ttyUSB* /dev/ttyACM* /dev/ttyHS*; do
+		[ -e "$tty" ] || continue
 		config_foreach find_3g_iface interface "$tty"
 	done
 fi
-- 
GitLab