aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc/src/paging.c
diff options
context:
space:
mode:
Diffstat (limited to 'openbsc/src/paging.c')
-rw-r--r--openbsc/src/paging.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/openbsc/src/paging.c b/openbsc/src/paging.c
index 802024a5b..f7ee81d24 100644
--- a/openbsc/src/paging.c
+++ b/openbsc/src/paging.c
@@ -213,7 +213,7 @@ static void paging_T3113_expired(void *data)
paging_remove_request(&req->bts->paging, req);
}
-static void _paging_request(struct gsm_bts *bts, struct gsm_subscriber *subscr,
+static int _paging_request(struct gsm_bts *bts, struct gsm_subscriber *subscr,
int type, gsm_cbfn *cbfn, void *data)
{
struct gsm_bts_paging_state *bts_entry = &bts->paging;
@@ -221,7 +221,7 @@ static void _paging_request(struct gsm_bts *bts, struct gsm_subscriber *subscr,
if (paging_pending_request(bts_entry, subscr)) {
DEBUGP(DPAG, "Paging request already pending\n");
- return;
+ return -EEXIST;
}
DEBUGP(DPAG, "Start paging of subscriber %llu on bts %d.\n",
@@ -239,12 +239,15 @@ static void _paging_request(struct gsm_bts *bts, struct gsm_subscriber *subscr,
if (!bsc_timer_pending(&bts_entry->work_timer))
bsc_schedule_timer(&bts_entry->work_timer, 1, 0);
+
+ return 0;
}
-void paging_request(struct gsm_network *network, struct gsm_subscriber *subscr,
- int type, gsm_cbfn *cbfn, void *data)
+int paging_request(struct gsm_network *network, struct gsm_subscriber *subscr,
+ int type, gsm_cbfn *cbfn, void *data)
{
struct gsm_bts *bts = NULL;
+ int rc;
/* start paging subscriber on all BTS within Location Area */
do {
@@ -252,9 +255,13 @@ void paging_request(struct gsm_network *network, struct gsm_subscriber *subscr,
if (!bts)
break;
- /* Trigger paging */
- _paging_request(bts, subscr, type, cbfn, data);
+ /* Trigger paging, pass any error to caller */
+ rc = _paging_request(bts, subscr, type, cbfn, data);
+ if (rc < 0)
+ return rc;
} while (1);
+
+ return 0;
}