summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorAndrzej Zaborowski <andrew.zaborowski@intel.com>2009-08-01 14:17:43 +0200
committerDenis Kenzior <denkenz@gmail.com>2009-08-03 12:43:32 -0500
commitfbec2de66009afe7ab8a49d1b26deacf98dad381 (patch)
tree4028cd3db510e6119e0757a4444bcf7618669c8c /src
parenta11bce5467d80e5a90785e6e362442ed4be516a6 (diff)
downloadofono-fbec2de66009afe7ab8a49d1b26deacf98dad381.tar.bz2
Make sure SIM read callbacks die cleanly.
Diffstat (limited to 'src')
-rw-r--r--src/network.c12
-rw-r--r--src/sim.c4
2 files changed, 11 insertions, 5 deletions
diff --git a/src/network.c b/src/network.c
index 8135fd21..33a1f65a 100644
--- a/src/network.c
+++ b/src/network.c
@@ -1202,8 +1202,12 @@ static void sim_opl_read_cb(struct ofono_modem *modem, int ok,
int total;
GSList *l;
- if (!ok)
+ if (!ok) {
+ if (record > 0)
+ goto optimize;
+
return;
+ }
if (structure != OFONO_SIM_FILE_STRUCTURE_FIXED)
return;
@@ -1218,6 +1222,7 @@ static void sim_opl_read_cb(struct ofono_modem *modem, int ok,
if (record != total)
return;
+optimize:
sim_eons_optimize(netreg->eons);
for (l = netreg->operator_list; l; l = l->next) {
@@ -1241,7 +1246,7 @@ static void sim_pnn_read_cb(struct ofono_modem *modem, int ok,
int total;
if (!ok)
- return;
+ goto check;
if (structure != OFONO_SIM_FILE_STRUCTURE_FIXED)
return;
@@ -1256,11 +1261,12 @@ static void sim_pnn_read_cb(struct ofono_modem *modem, int ok,
sim_eons_add_pnn_record(netreg->eons, record, data, record_length);
+check:
/* If PNN is not present then OPL is not useful, don't
* retrieve it. If OPL is not there then PNN[1] will
* still be used for the HPLMN and/or EHPLMN, if PNN
* is present. */
- if (record == total && !sim_eons_pnn_is_empty(netreg->eons))
+ if ((record == total || !ok) && !sim_eons_pnn_is_empty(netreg->eons))
ofono_sim_read(modem, SIM_EFOPL_FILEID, sim_opl_read_cb, NULL);
}
diff --git a/src/sim.c b/src/sim.c
index 3903ee4d..93f230d8 100644
--- a/src/sim.c
+++ b/src/sim.c
@@ -182,7 +182,7 @@ static void sim_msisdn_read_cb(struct ofono_modem *modem, int ok,
struct ofono_phone_number *ph;
if (!ok)
- return;
+ goto check;
if (structure != OFONO_SIM_FILE_STRUCTURE_FIXED)
return;
@@ -202,7 +202,7 @@ static void sim_msisdn_read_cb(struct ofono_modem *modem, int ok,
sim->own_numbers = g_slist_prepend(sim->own_numbers, ph);
check:
- if (record == total && sim->own_numbers) {
+ if ((record == total || !ok) && sim->own_numbers) {
char **own_numbers;
DBusConnection *conn = ofono_dbus_get_connection();