All of lore.kernel.org
 help / color / mirror / Atom feed
* [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.