summaryrefslogtreecommitdiffstats
path: root/src/host
diff options
context:
space:
mode:
authorAndreas.Eversberg <jolly@eversberg.eu>2010-10-12 08:48:08 +0000
committerAndreas.Eversberg <jolly@eversberg.eu>2010-10-12 08:48:08 +0000
commit218303d6ed25005a393125e534fab67b9a847160 (patch)
treebfe6cf97b4e8deb48aab5e18aab00a00dc0964df /src/host
parent4e9656c819216a70618af16f726a2efc9028e975 (diff)
[layer23] Bugfix: Loosing CCCH signal must cause unselection of cell.
Diffstat (limited to 'src/host')
-rw-r--r--src/host/layer23/src/mobile/gsm322.c16
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) {