All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 5/8] Remove post-sim atoms after SIM is extracted.
@ 2010-04-09  6:49 Andrzej Zaborowski
  2010-04-15 21:45 ` Denis Kenzior
  0 siblings, 1 reply; 2+ messages in thread
From: Andrzej Zaborowski @ 2010-04-09  6:49 UTC (permalink / raw)
  To: ofono

[-- Attachment #1: Type: text/plain, Size: 2044 bytes --]

---
 src/modem.c |   40 ++++++++++++++++++++++++++++++++++++++++
 1 files changed, 40 insertions(+), 0 deletions(-)

diff --git a/src/modem.c b/src/modem.c
index 7cdd9c4..45c2bc4 100644
--- a/src/modem.c
+++ b/src/modem.c
@@ -53,6 +53,7 @@ enum ofono_property_type {
 struct ofono_modem {
 	char			*path;
 	GSList			*atoms;
+	GSList			*pre_sim_atoms;
 	struct ofono_watchlist	*atom_watches;
 	GSList         		*interface_list;
 	unsigned int		call_ids;
@@ -301,6 +302,7 @@ void __ofono_atom_free(struct ofono_atom *atom)
 	struct ofono_modem *modem = atom->modem;
 
 	modem->atoms = g_slist_remove(modem->atoms, atom);
+	modem->pre_sim_atoms = g_slist_remove(modem->pre_sim_atoms, atom);
 
 	__ofono_atom_unregister(atom);
 
@@ -330,7 +332,35 @@ static void remove_all_atoms(struct ofono_modem *modem)
 	}
 
 	g_slist_free(modem->atoms);
+	g_slist_free(modem->pre_sim_atoms);
 	modem->atoms = NULL;
+	modem->pre_sim_atoms = NULL;
+}
+
+static void remove_post_sim_atoms(struct ofono_modem *modem)
+{
+	GSList *l;
+	struct ofono_atom *atom;
+
+	if (modem == NULL)
+		return;
+
+	for (l = modem->atoms; l; l = l->next) {
+		atom = l->data;
+
+		if (g_slist_find(modem->pre_sim_atoms, atom))
+			continue;
+
+		__ofono_atom_unregister(atom);
+
+		if (atom->destruct)
+			atom->destruct(atom);
+
+		g_free(atom);
+	}
+
+	g_slist_free(modem->atoms);
+	modem->atoms = g_slist_copy(modem->pre_sim_atoms);
 }
 
 static DBusMessage *modem_get_properties(DBusConnection *conn,
@@ -1122,9 +1152,19 @@ static void modem_sim_ready(void *user, enum ofono_sim_state new_state)
 {
 	struct ofono_modem *modem = user;
 
+	if (new_state == OFONO_SIM_STATE_NOT_PRESENT) {
+		if (modem->pre_sim_atoms)
+			remove_post_sim_atoms(modem);
+
+		return;
+	}
+
 	if (new_state != OFONO_SIM_STATE_READY)
 		return;
 
+	if (modem->pre_sim_atoms == NULL)
+		modem->pre_sim_atoms = g_slist_copy(modem->atoms);
+
 	if (modem->driver->post_sim)
 		modem->driver->post_sim(modem);
 
-- 
1.6.1


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH 5/8] Remove post-sim atoms after SIM is extracted.
  2010-04-09  6:49 [PATCH 5/8] Remove post-sim atoms after SIM is extracted Andrzej Zaborowski
@ 2010-04-15 21:45 ` Denis Kenzior
  0 siblings, 0 replies; 2+ messages in thread
From: Denis Kenzior @ 2010-04-15 21:45 UTC (permalink / raw)
  To: ofono

[-- Attachment #1: Type: text/plain, Size: 318 bytes --]

Hi Andrew,

> ---
>  src/modem.c |   40 ++++++++++++++++++++++++++++++++++++++++
>  1 files changed, 40 insertions(+), 0 deletions(-)
> 

This patch has been applied.  However, I did change how we handle the lists of 
atoms afterward.  Can you double check that my logic is still correct?

Regards,
-Denis

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2010-04-15 21:45 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-04-09  6:49 [PATCH 5/8] Remove post-sim atoms after SIM is extracted Andrzej Zaborowski
2010-04-15 21:45 ` 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.