From 218303d6ed25005a393125e534fab67b9a847160 Mon Sep 17 00:00:00 2001 From: "Andreas.Eversberg" Date: Tue, 12 Oct 2010 08:48:08 +0000 Subject: [PATCH] [layer23] Bugfix: Loosing CCCH signal must cause unselection of cell. --- src/host/layer23/src/mobile/gsm322.c | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/host/layer23/src/mobile/gsm322.c b/src/host/layer23/src/mobile/gsm322.c index 807c6624c..deed6a6fa 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) {