diff options
author | Harald Welte <laforge@gnumonks.org> | 2009-02-10 17:35:04 +0000 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2009-02-10 17:35:04 +0000 |
commit | 51cce1e617600c6cf1b6b0dea23fe0e30ddc3417 (patch) | |
tree | 581f106552374ac0daebb199269cd0520b2b3051 /src/paging.c | |
parent | cd06bfbc9d15f277bec42e797e7bed2cb6c6e98f (diff) |
* 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
Diffstat (limited to 'src/paging.c')
-rw-r--r-- | src/paging.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/paging.c b/src/paging.c index 55f6d810f..5df8ef7a4 100644 --- a/src/paging.c +++ b/src/paging.c @@ -77,6 +77,7 @@ static void paging_remove_request(struct gsm_bts_paging_state *paging_bts, } llist_del(&to_be_deleted->entry); + subscr_put(to_be_deleted->subscr); free(to_be_deleted); } @@ -151,6 +152,17 @@ static int paging_pending_request(struct gsm_bts_paging_state *bts, 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 @@ void paging_request(struct gsm_bts *bts, struct gsm_subscriber *subscr, int type 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); |