* [RFC_v2 0/3] Fix crash when network is lost
@ 2012-07-13 13:44 Guillaume Zajac
2012-07-13 13:44 ` [RFC_v2 1/3] gprs-context: Add new driver entry Guillaume Zajac
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: Guillaume Zajac @ 2012-07-13 13:44 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 497 bytes --]
Change log with previous version:
- Fix naming issue
- Simplify the logic
Guillaume Zajac (3):
gprs-context: Add new driver entry
gprs-context: Add new driver entry definition
gprs: Release context in driver and core when network is lost
drivers/atmodem/gprs-context.c | 11 +++++
include/gprs-context.h | 2 +
src/gprs.c | 84 ++++++++++++++++++++++++++++++----------
3 files changed, 76 insertions(+), 21 deletions(-)
--
1.7.5.4
^ permalink raw reply [flat|nested] 5+ messages in thread
* [RFC_v2 1/3] gprs-context: Add new driver entry
2012-07-13 13:44 [RFC_v2 0/3] Fix crash when network is lost Guillaume Zajac
@ 2012-07-13 13:44 ` Guillaume Zajac
2012-07-13 13:44 ` [RFC_v2 2/3] gprs-context: Add new driver entry definition Guillaume Zajac
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: Guillaume Zajac @ 2012-07-13 13:44 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 609 bytes --]
---
include/gprs-context.h | 2 ++
1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/include/gprs-context.h b/include/gprs-context.h
index a5e7564..27d4b49 100644
--- a/include/gprs-context.h
+++ b/include/gprs-context.h
@@ -71,6 +71,8 @@ struct ofono_gprs_context_driver {
void (*deactivate_primary)(struct ofono_gprs_context *gc,
unsigned int id,
ofono_gprs_context_cb_t cb, void *data);
+ void (*detach_shutdown)(struct ofono_gprs_context *gc,
+ unsigned int id);
};
void ofono_gprs_context_deactivated(struct ofono_gprs_context *gc,
--
1.7.5.4
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [RFC_v2 2/3] gprs-context: Add new driver entry definition
2012-07-13 13:44 [RFC_v2 0/3] Fix crash when network is lost Guillaume Zajac
2012-07-13 13:44 ` [RFC_v2 1/3] gprs-context: Add new driver entry Guillaume Zajac
@ 2012-07-13 13:44 ` Guillaume Zajac
2012-07-13 13:44 ` [RFC_v2 3/3] gprs: Release context in driver and core when network is lost Guillaume Zajac
2012-07-16 1:06 ` [RFC_v2 0/3] Fix crash " Denis Kenzior
3 siblings, 0 replies; 5+ messages in thread
From: Guillaume Zajac @ 2012-07-13 13:44 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 1094 bytes --]
---
drivers/atmodem/gprs-context.c | 11 +++++++++++
1 files changed, 11 insertions(+), 0 deletions(-)
diff --git a/drivers/atmodem/gprs-context.c b/drivers/atmodem/gprs-context.c
index 16893ce..58a829b 100644
--- a/drivers/atmodem/gprs-context.c
+++ b/drivers/atmodem/gprs-context.c
@@ -291,6 +291,16 @@ static void at_gprs_deactivate_primary(struct ofono_gprs_context *gc,
g_at_ppp_shutdown(gcd->ppp);
}
+static void at_gprs_detach_shutdown(struct ofono_gprs_context *gc,
+ unsigned int cid)
+{
+ struct gprs_context_data *gcd = ofono_gprs_context_get_data(gc);
+
+ DBG("cid %u", cid);
+
+ g_at_ppp_shutdown(gcd->ppp);
+}
+
static void cgev_notify(GAtResult *result, gpointer user_data)
{
struct ofono_gprs_context *gc = user_data;
@@ -380,6 +390,7 @@ static struct ofono_gprs_context_driver driver = {
.remove = at_gprs_context_remove,
.activate_primary = at_gprs_activate_primary,
.deactivate_primary = at_gprs_deactivate_primary,
+ .detach_shutdown = at_gprs_detach_shutdown,
};
void at_gprs_context_init(void)
--
1.7.5.4
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [RFC_v2 3/3] gprs: Release context in driver and core when network is lost
2012-07-13 13:44 [RFC_v2 0/3] Fix crash when network is lost Guillaume Zajac
2012-07-13 13:44 ` [RFC_v2 1/3] gprs-context: Add new driver entry Guillaume Zajac
2012-07-13 13:44 ` [RFC_v2 2/3] gprs-context: Add new driver entry definition Guillaume Zajac
@ 2012-07-13 13:44 ` Guillaume Zajac
2012-07-16 1:06 ` [RFC_v2 0/3] Fix crash " Denis Kenzior
3 siblings, 0 replies; 5+ messages in thread
From: Guillaume Zajac @ 2012-07-13 13:44 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 3322 bytes --]
---
src/gprs.c | 84 +++++++++++++++++++++++++++++++++++++++++++++---------------
1 files changed, 63 insertions(+), 21 deletions(-)
diff --git a/src/gprs.c b/src/gprs.c
index a8f584c..0808c56 100644
--- a/src/gprs.c
+++ b/src/gprs.c
@@ -48,6 +48,7 @@
#define GPRS_FLAG_ATTACHING 0x1
#define GPRS_FLAG_RECHECK 0x2
+#define GPRS_FLAG_ATTACHED_UPDATE 0x4
#define SETTINGS_STORE "gprs"
#define SETTINGS_GROUP "Settings"
@@ -1440,6 +1441,45 @@ void ofono_gprs_resume_notify(struct ofono_gprs *gprs)
update_suspended_property(gprs, FALSE);
}
+static gboolean have_active_contexts(struct ofono_gprs *gprs)
+{
+ GSList *l;
+ struct pri_context *ctx;
+
+ for (l = gprs->contexts; l; l = l->next) {
+ ctx = l->data;
+
+ if (ctx->active == TRUE)
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+static void release_active_contexts(struct ofono_gprs *gprs)
+{
+ GSList *l;
+ struct pri_context *ctx;
+
+ for (l = gprs->contexts; l; l = l->next) {
+ struct ofono_gprs_context *gc;
+
+ ctx = l->data;
+
+ if (ctx->active == FALSE)
+ continue;
+
+ /* This context is already being messed with */
+ if (ctx->pending)
+ continue;
+
+ gc = ctx->context_driver;
+
+ if (gc->driver->detach_shutdown != NULL)
+ gc->driver->detach_shutdown(gc, ctx->context.cid);
+ }
+}
+
static void gprs_attached_update(struct ofono_gprs *gprs)
{
DBusConnection *conn = ofono_dbus_get_connection();
@@ -1454,30 +1494,22 @@ static void gprs_attached_update(struct ofono_gprs *gprs)
if (attached == gprs->attached)
return;
- gprs->attached = attached;
-
- if (gprs->attached == FALSE) {
- GSList *l;
- struct pri_context *ctx;
-
- for (l = gprs->contexts; l; l = l->next) {
- ctx = l->data;
-
- if (ctx->active == FALSE)
- continue;
-
- pri_reset_context_settings(ctx);
- release_context(ctx);
-
- value = FALSE;
- ofono_dbus_signal_property_changed(conn, ctx->path,
- OFONO_CONNECTION_CONTEXT_INTERFACE,
- "Active", DBUS_TYPE_BOOLEAN, &value);
- }
-
+ /*
+ * If an active context is found, a PPP session might be still active
+ * at driver level. "Attached" = TRUE property can't be signalled to
+ * the applications registered on GPRS properties.
+ * Active contexts have to be release at driver level.
+ */
+ if (attached == FALSE) {
+ release_active_contexts(gprs);
gprs->bearer = -1;
+ } else if (have_active_contexts(gprs) == TRUE) {
+ gprs->flags |= GPRS_FLAG_ATTACHED_UPDATE;
+ return;
}
+ gprs->attached = attached;
+
path = __ofono_atom_get_path(gprs->atom);
value = attached;
ofono_dbus_signal_property_changed(conn, path,
@@ -2266,6 +2298,16 @@ void ofono_gprs_context_deactivated(struct ofono_gprs_context *gc,
OFONO_CONNECTION_CONTEXT_INTERFACE,
"Active", DBUS_TYPE_BOOLEAN, &value);
}
+
+ /*
+ * If "Attached" property was about to be signalled as TRUE but there
+ * were still active contexts, try again to signal "Attached" property
+ * to registered applications after active contexts have been released.
+ */
+ if (gc->gprs->flags & GPRS_FLAG_ATTACHED_UPDATE) {
+ gc->gprs->flags &= ~GPRS_FLAG_ATTACHED_UPDATE;
+ gprs_attached_update(gc->gprs);
+ }
}
int ofono_gprs_context_driver_register(
--
1.7.5.4
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [RFC_v2 0/3] Fix crash when network is lost
2012-07-13 13:44 [RFC_v2 0/3] Fix crash when network is lost Guillaume Zajac
` (2 preceding siblings ...)
2012-07-13 13:44 ` [RFC_v2 3/3] gprs: Release context in driver and core when network is lost Guillaume Zajac
@ 2012-07-16 1:06 ` Denis Kenzior
3 siblings, 0 replies; 5+ messages in thread
From: Denis Kenzior @ 2012-07-16 1:06 UTC (permalink / raw)
To: ofono
[-- Attachment #1: Type: text/plain, Size: 660 bytes --]
Hi Guillaume,
On 07/13/2012 08:44 AM, Guillaume Zajac wrote:
> Change log with previous version:
> - Fix naming issue
> - Simplify the logic
>
> Guillaume Zajac (3):
> gprs-context: Add new driver entry
> gprs-context: Add new driver entry definition
> gprs: Release context in driver and core when network is lost
>
> drivers/atmodem/gprs-context.c | 11 +++++
> include/gprs-context.h | 2 +
> src/gprs.c | 84 ++++++++++++++++++++++++++++++----------
> 3 files changed, 76 insertions(+), 21 deletions(-)
>
I went ahead and applied all three patches in this series.
Regards,
-Denis
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2012-07-16 1:06 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2012-07-13 13:44 [RFC_v2 0/3] Fix crash when network is lost Guillaume Zajac
2012-07-13 13:44 ` [RFC_v2 1/3] gprs-context: Add new driver entry Guillaume Zajac
2012-07-13 13:44 ` [RFC_v2 2/3] gprs-context: Add new driver entry definition Guillaume Zajac
2012-07-13 13:44 ` [RFC_v2 3/3] gprs: Release context in driver and core when network is lost Guillaume Zajac
2012-07-16 1:06 ` [RFC_v2 0/3] Fix crash " Denis Kenzior
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.