summaryrefslogtreecommitdiffstats
path: root/src/host/layer23/src/mobile/gsm322.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/host/layer23/src/mobile/gsm322.c')
-rw-r--r--src/host/layer23/src/mobile/gsm322.c15
1 files changed, 10 insertions, 5 deletions
diff --git a/src/host/layer23/src/mobile/gsm322.c b/src/host/layer23/src/mobile/gsm322.c
index deed6a6f..e3ddab0b 100644
--- a/src/host/layer23/src/mobile/gsm322.c
+++ b/src/host/layer23/src/mobile/gsm322.c
@@ -2506,15 +2506,16 @@ static void gsm322_cs_loss(void *arg)
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) {
struct msgb *nmsg;
- LOGP(DCS, LOGL_INFO, "Trigger re-selection.\n");
+ LOGP(DCS, LOGL_INFO, "Loss of CCCH, Trigger "
+ "re-selection.\n");
+
+ /* unset selected cell */
+ gsm322_unselect_cell(cs);
nmsg = gsm322_msgb_alloc(GSM322_EVENT_CELL_RESEL);
if (!nmsg)
@@ -2522,7 +2523,11 @@ static void gsm322_cs_loss(void *arg)
gsm322_c_event(ms, nmsg);
msgb_free(nmsg);
} else {
- LOGP(DCS, LOGL_INFO, "Trigger RR abort.\n");
+ LOGP(DCS, LOGL_INFO, "Loss of SACCH, Trigger RR "
+ "abort.\n");
+
+ /* keep cell info for re-selection */
+
gsm48_rr_los(ms);
/* be shure that nothing else is done after here
* because the function call above may cause