summaryrefslogtreecommitdiffstats
path: root/plugins/udev.c
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2011-07-25 04:10:14 +0200
committerMarcel Holtmann <marcel@holtmann.org>2011-07-25 04:10:14 +0200
commit878ded6621a7b8d4385aaf2c4217bcacbe5a3635 (patch)
tree5138cec436157d378e71f15d5fdd276f518ee807 /plugins/udev.c
parentc6ee139f67d6c6e404ac3675fd535e1b9a1c7ec4 (diff)
downloadofono-878ded6621a7b8d4385aaf2c4217bcacbe5a3635.tar.bz2
udev: Fix race condition with Novatel modem detection
Diffstat (limited to 'plugins/udev.c')
-rw-r--r--plugins/udev.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/plugins/udev.c b/plugins/udev.c
index 54b86a9d..90d0aad8 100644
--- a/plugins/udev.c
+++ b/plugins/udev.c
@@ -399,8 +399,9 @@ static void add_novatel(struct ofono_modem *modem,
DBG("modem %p", modem);
registered = ofono_modem_get_integer(modem, "Registered");
- if (registered != 0)
- return;
+
+ if (registered > 1)
+ return;
intfnum = get_property(udev_device, "ID_USB_INTERFACE_NUM");
@@ -409,13 +410,17 @@ static void add_novatel(struct ofono_modem *modem,
if (g_strcmp0(intfnum, "00") == 0) {
devnode = udev_device_get_devnode(udev_device);
ofono_modem_set_string(modem, "PrimaryDevice", devnode);
+
+ ofono_modem_set_integer(modem, "Registered", ++registered);
} else if (g_strcmp0(intfnum, "01") == 0) {
devnode = udev_device_get_devnode(udev_device);
ofono_modem_set_string(modem, "SecondaryDevice", devnode);
- ofono_modem_set_integer(modem, "Registered", 1);
- ofono_modem_register(modem);
+ ofono_modem_set_integer(modem, "Registered", ++registered);
}
+
+ if (registered > 1)
+ ofono_modem_register(modem);
}
static void add_nokia(struct ofono_modem *modem,