aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSylvain Munaut <tnt@246tNt.com>2009-12-19 12:38:10 +0100
committerHarald Welte <laforge@gnumonks.org>2010-01-07 10:37:40 +0100
commitef24dff2a22c907f08a24b19773dde5ce20ba5d6 (patch)
tree82ef2b092b47ae2d5db6b198fd34ff881a9d9e63
parent65542c7f597c5c94b16904108056d3c99de1a8cc (diff)
[signal] Differentiate paging success from expiration in SS_PAGING
This is useful information to know and actually fixes a segfault in rllp.c where lchan is accessed even tough it could be NULL in case of failure. Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
-rw-r--r--openbsc/include/openbsc/signal.h3
-rw-r--r--openbsc/src/gsm_04_08_utils.c2
-rw-r--r--openbsc/src/paging.c2
-rw-r--r--openbsc/src/rrlp.c8
4 files changed, 7 insertions, 8 deletions
diff --git a/openbsc/include/openbsc/signal.h b/openbsc/include/openbsc/signal.h
index 23551f743..07b4e393d 100644
--- a/openbsc/include/openbsc/signal.h
+++ b/openbsc/include/openbsc/signal.h
@@ -45,7 +45,8 @@ enum signal_subsystems {
/* SS_PAGING signals */
enum signal_paging {
- S_PAGING_COMPLETED,
+ S_PAGING_SUCCEEDED,
+ S_PAGING_EXPIRED,
};
/* SS_SMS signals */
diff --git a/openbsc/src/gsm_04_08_utils.c b/openbsc/src/gsm_04_08_utils.c
index a18427788..d5785f971 100644
--- a/openbsc/src/gsm_04_08_utils.c
+++ b/openbsc/src/gsm_04_08_utils.c
@@ -490,7 +490,7 @@ int gsm48_handle_paging_resp(struct msgb *msg, struct gsm_subscriber *subscr)
bts->network->stats.paging.completed++;
- dispatch_signal(SS_PAGING, S_PAGING_COMPLETED, &sig_data);
+ dispatch_signal(SS_PAGING, S_PAGING_SUCCEEDED, &sig_data);
/* Stop paging on the bts we received the paging response */
paging_request_stop(msg->trx->bts, subscr, msg->lchan);
diff --git a/openbsc/src/paging.c b/openbsc/src/paging.c
index b5dc2d052..91de70241 100644
--- a/openbsc/src/paging.c
+++ b/openbsc/src/paging.c
@@ -214,7 +214,7 @@ static void paging_T3113_expired(void *data)
counter_inc(req->bts->network->stats.paging.expired);
- dispatch_signal(SS_PAGING, S_PAGING_COMPLETED, &sig_data);
+ dispatch_signal(SS_PAGING, S_PAGING_EXPIRED, &sig_data);
if (cbfn)
cbfn(GSM_HOOK_RR_PAGING, GSM_PAGING_EXPIRED, NULL, NULL,
cbfn_param);
diff --git a/openbsc/src/rrlp.c b/openbsc/src/rrlp.c
index d4665d570..35044518c 100644
--- a/openbsc/src/rrlp.c
+++ b/openbsc/src/rrlp.c
@@ -89,14 +89,12 @@ static int paging_sig_cb(unsigned int subsys, unsigned int signal,
struct paging_signal_data *psig_data = signal_data;
switch (signal) {
- case S_PAGING_COMPLETED:
- /* paging might have "completed' unsucessfully,
- * in this case we don't have a lchan */
- if (!psig_data->lchan)
- break;
+ case S_PAGING_SUCCEEDED:
/* A subscriber has attached. */
send_rrlp_req(psig_data->lchan);
break;
+ case S_PAGING_EXPIRED:
+ break;
}
return 0;
}