summaryrefslogtreecommitdiffstats
path: root/plugins
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2011-08-11 07:48:47 -0700
committerMarcel Holtmann <marcel@holtmann.org>2011-08-11 07:48:47 -0700
commita38231b949ef150ff904c71bc4d0659b59044129 (patch)
treefe66385e296005d1b21d2e617b569c7e02140f24 /plugins
parent6d9d991a399ddc73f8cfafc18c5f2d9e40f61134 (diff)
downloadofono-a38231b949ef150ff904c71bc4d0659b59044129.tar.bz2
udev: Remove modem object when setup procedure fails
Diffstat (limited to 'plugins')
-rw-r--r--plugins/udevng.c22
1 files changed, 11 insertions, 11 deletions
diff --git a/plugins/udevng.c b/plugins/udevng.c
index ab0a29a5..3ac52c57 100644
--- a/plugins/udevng.c
+++ b/plugins/udevng.c
@@ -777,24 +777,25 @@ static void check_device(struct udev_device *device)
add_device(syspath, devname, driver, device);
}
-static void create_modem(gpointer key, gpointer value, gpointer user_data)
+static gboolean create_modem(gpointer key, gpointer value, gpointer user_data)
{
struct modem_info *modem = value;
const char *syspath = key;
unsigned int i;
- if (modem->devices == NULL)
- return;
-
if (modem->modem != NULL)
- return;
+ return FALSE;
DBG("%s", syspath);
+
+ if (modem->devices == NULL)
+ return TRUE;
+
DBG("driver=%s", modem->driver);
modem->modem = ofono_modem_create(NULL, modem->driver);
if (modem->modem == NULL)
- return;
+ return TRUE;
for (i = 0; driver_list[i].name; i++) {
if (g_str_equal(driver_list[i].name, modem->driver) == FALSE)
@@ -802,12 +803,11 @@ static void create_modem(gpointer key, gpointer value, gpointer user_data)
if (driver_list[i].setup(modem) == TRUE) {
ofono_modem_register(modem->modem);
- return;
+ return FALSE;
}
}
- ofono_modem_remove(modem->modem);
- modem->modem = NULL;
+ return TRUE;
}
static void enumerate_devices(struct udev *context)
@@ -842,7 +842,7 @@ static void enumerate_devices(struct udev *context)
udev_enumerate_unref(enumerate);
- g_hash_table_foreach(modem_list, create_modem, NULL);
+ g_hash_table_foreach_remove(modem_list, create_modem, NULL);
}
static struct udev *udev_ctx;
@@ -856,7 +856,7 @@ static gboolean check_modem_list(gpointer user_data)
DBG("");
- g_hash_table_foreach(modem_list, create_modem, NULL);
+ g_hash_table_foreach_remove(modem_list, create_modem, NULL);
return FALSE;
}