gprs: clean context properly

After a context is detached, the context is not properly cleared. In
addition to releasing the context:

- Reset the context settings (IP, DNS, interface, ...).
- Signal the Active flag as false.
This commit is contained in:
Jimmy Gysens 2020-06-25 11:30:08 +02:00 committed by Denis Kenzior
parent ef7e5f016b
commit c83d693097
1 changed files with 16 additions and 8 deletions

View File

@ -1565,6 +1565,19 @@ static bool have_read_settings(struct ofono_gprs *gprs)
return false;
}
static void pri_context_signal_active(struct pri_context *ctx)
{
DBusConnection *conn;
dbus_bool_t value;
value = ctx->active;
conn = ofono_dbus_get_connection();
ofono_dbus_signal_property_changed(conn, ctx->path,
OFONO_CONNECTION_CONTEXT_INTERFACE,
"Active", DBUS_TYPE_BOOLEAN, &value);
}
static void detach_active_contexts(struct ofono_gprs *gprs)
{
GSList *l;
@ -1588,7 +1601,9 @@ static void detach_active_contexts(struct ofono_gprs *gprs)
gc->driver->detach_shutdown(gc, ctx->context.cid);
/* Make sure the context is properly cleared */
pri_reset_context_settings(ctx);
release_context(ctx);
pri_context_signal_active(ctx);
}
}
@ -2243,8 +2258,6 @@ static void gprs_deactivate_for_all(const struct ofono_error *error,
{
struct pri_context *ctx = data;
struct ofono_gprs *gprs = ctx->gprs;
DBusConnection *conn;
dbus_bool_t value;
if (error->type != OFONO_ERROR_TYPE_NO_ERROR) {
__ofono_dbus_pending_reply(&gprs->pending,
@ -2254,12 +2267,7 @@ static void gprs_deactivate_for_all(const struct ofono_error *error,
pri_reset_context_settings(ctx);
release_context(ctx);
value = ctx->active;
conn = ofono_dbus_get_connection();
ofono_dbus_signal_property_changed(conn, ctx->path,
OFONO_CONNECTION_CONTEXT_INTERFACE,
"Active", DBUS_TYPE_BOOLEAN, &value);
pri_context_signal_active(ctx);
gprs_deactivate_next(gprs);
}