mirror of git://git.sysmocom.de/ofono
gprs: lte: set attached after successful activation
Otherwise the attached state gets to be set before the actual LTE automatic context is ready. This triggers a race between connman and ofono: connman sees status attached before the context is active so connman will try to activate another context with same apn and will fail over and over again.
This commit is contained in:
parent
627b5df8a2
commit
c2b489dca8
50
src/gprs.c
50
src/gprs.c
|
@ -959,6 +959,24 @@ static void pri_deactivate_callback(const struct ofono_error *error, void *data)
|
|||
}
|
||||
}
|
||||
|
||||
static void gprs_set_attached_property(struct ofono_gprs *gprs,
|
||||
ofono_bool_t attached)
|
||||
{
|
||||
const char *path;
|
||||
DBusConnection *conn = ofono_dbus_get_connection();
|
||||
dbus_bool_t value = attached;
|
||||
|
||||
if (gprs->attached == attached)
|
||||
return;
|
||||
|
||||
gprs->attached = attached;
|
||||
|
||||
path = __ofono_atom_get_path(gprs->atom);
|
||||
ofono_dbus_signal_property_changed(conn, path,
|
||||
OFONO_CONNECTION_MANAGER_INTERFACE,
|
||||
"Attached", DBUS_TYPE_BOOLEAN, &value);
|
||||
}
|
||||
|
||||
static void pri_read_settings_callback(const struct ofono_error *error,
|
||||
void *data)
|
||||
{
|
||||
|
@ -987,6 +1005,9 @@ static void pri_read_settings_callback(const struct ofono_error *error,
|
|||
}
|
||||
|
||||
value = pri_ctx->active;
|
||||
|
||||
gprs_set_attached_property(pri_ctx->gprs, TRUE);
|
||||
|
||||
ofono_dbus_signal_property_changed(conn, pri_ctx->path,
|
||||
OFONO_CONNECTION_CONTEXT_INTERFACE,
|
||||
"Active", DBUS_TYPE_BOOLEAN, &value);
|
||||
|
@ -1596,24 +1617,6 @@ static void release_active_contexts(struct ofono_gprs *gprs)
|
|||
}
|
||||
}
|
||||
|
||||
static void gprs_set_attached_property(struct ofono_gprs *gprs,
|
||||
ofono_bool_t attached)
|
||||
{
|
||||
const char *path;
|
||||
DBusConnection *conn = ofono_dbus_get_connection();
|
||||
dbus_bool_t value = attached;
|
||||
|
||||
if (gprs->attached == attached)
|
||||
return;
|
||||
|
||||
gprs->attached = attached;
|
||||
|
||||
path = __ofono_atom_get_path(gprs->atom);
|
||||
ofono_dbus_signal_property_changed(conn, path,
|
||||
OFONO_CONNECTION_MANAGER_INTERFACE,
|
||||
"Attached", DBUS_TYPE_BOOLEAN, &value);
|
||||
}
|
||||
|
||||
static void gprs_attached_update(struct ofono_gprs *gprs)
|
||||
{
|
||||
ofono_bool_t attached;
|
||||
|
@ -1717,11 +1720,12 @@ static void gprs_netreg_update(struct ofono_gprs *gprs)
|
|||
DBG("attach: %u, driver_attached: %u", attach, gprs->driver_attached);
|
||||
|
||||
if (ofono_netreg_get_technology(gprs->netreg) ==
|
||||
ACCESS_TECHNOLOGY_EUTRAN) {
|
||||
/* Ignore attach logic for LTE. There is no such concept. */
|
||||
gprs_set_attached_property(gprs, attach);
|
||||
return;
|
||||
}
|
||||
ACCESS_TECHNOLOGY_EUTRAN)
|
||||
/*
|
||||
* For LTE we set attached status only on successful
|
||||
* context activation.
|
||||
*/
|
||||
return;
|
||||
|
||||
if (gprs->driver_attached == attach)
|
||||
return;
|
||||
|
|
Loading…
Reference in New Issue