udev: Remove modem object when setup procedure fails

This commit is contained in:
Marcel Holtmann 2011-08-11 07:48:47 -07:00
parent 6d9d991a39
commit a38231b949
1 changed files with 11 additions and 11 deletions

View File

@ -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;
}