diff options
author | Andreas.Eversberg <jolly@eversberg.eu> | 2010-10-12 08:48:08 +0000 |
---|---|---|
committer | Andreas.Eversberg <jolly@eversberg.eu> | 2010-10-12 08:48:08 +0000 |
commit | 218303d6ed25005a393125e534fab67b9a847160 (patch) | |
tree | bfe6cf97b4e8deb48aab5e18aab00a00dc0964df /src | |
parent | 4e9656c819216a70618af16f726a2efc9028e975 (diff) |
[layer23] Bugfix: Loosing CCCH signal must cause unselection of cell.
Diffstat (limited to 'src')
-rw-r--r-- | src/host/layer23/src/mobile/gsm322.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/src/host/layer23/src/mobile/gsm322.c b/src/host/layer23/src/mobile/gsm322.c index 807c6624..deed6a6f 100644 --- a/src/host/layer23/src/mobile/gsm322.c +++ b/src/host/layer23/src/mobile/gsm322.c @@ -1966,11 +1966,21 @@ static int gsm322_cs_store(struct osmocom_ms *ms) struct gsm322_ba_list *gsm322_cs_sysinfo_sacch(struct osmocom_ms *ms) { struct gsm322_cellsel *cs = &ms->cellsel; - struct gsm48_sysinfo *s = cs->si; + struct gsm48_sysinfo *s; struct gsm322_ba_list *ba = NULL; int i; uint8_t freq[128]; + if (!cs) { + LOGP(DCS, LOGL_INFO, "No BA, because no cell selected\n"); + return ba; + } + s = cs->si; + if (!s) { + LOGP(DCS, LOGL_INFO, "No BA, because no sysinfo\n"); + return ba; + } + /* collect system information received during dedicated mode */ if (s->si5 && (!s->nb_ext_ind_si5 @@ -2495,6 +2505,10 @@ static void gsm322_cs_loss(void *arg) struct gsm48_rrlayer *rr = &ms->rrlayer; LOGP(DCS, LOGL_INFO, "Loss of CCCH.\n"); + + /* unset selected cell */ + gsm322_unselect_cell(cs); + if (cs->state == GSM322_C3_CAMPED_NORMALLY || cs->state == GSM322_C7_CAMPED_ANY_CELL) { if (rr->state == GSM48_RR_ST_IDLE) { |