* decrease subscriber refcount when free()ing a paging request
* use a new timer that stops paging requests after some time, rather than
sending them indefinitely
diff --git a/src/paging.c b/src/paging.c
index 55f6d81..5df8ef7 100644
--- a/src/paging.c
+++ b/src/paging.c
@@ -77,6 +77,7 @@
}
llist_del(&to_be_deleted->entry);
+ subscr_put(to_be_deleted->subscr);
free(to_be_deleted);
}
@@ -151,6 +152,17 @@
return 0;
}
+static void paging_T3113_expired(void *data)
+{
+ struct gsm_paging_request *req;
+
+ DEBUGP(DPAG, "T3113 expired for request %p (%s)\n",
+ req, req->subscr->imsi);
+
+ /* FIXME: send a RR signal indicating that paging has failed */
+ paging_remove_request(&req->bts->paging, req);
+}
+
void paging_request(struct gsm_bts *bts, struct gsm_subscriber *subscr, int type) {
struct gsm_bts_paging_state *bts_entry = &bts->paging;
struct gsm_paging_request *req;
@@ -160,6 +172,9 @@
req->subscr = subscr_get(subscr);
req->bts = bts;
req->chan_type = type;
+ req->T3113.cb = paging_T3113_expired;
+ req->T3113.data = req;
+ schedule_timer(&req->T3113, T3113_VALUE);
if (!paging_pending_request(bts_entry, subscr)) {
llist_add_tail(&req->entry, &bts_entry->pending_requests);