diff options
author | Holger Freyther <zecke@selfish.org> | 2009-02-06 18:08:18 +0000 |
---|---|---|
committer | Holger Freyther <zecke@selfish.org> | 2009-02-06 18:08:18 +0000 |
commit | 3d949240fe9a81643bef5a854e52f58e7b33bf04 (patch) | |
tree | e52d23efcd60355cb504bcae14850970e59ab15f /src/paging.c | |
parent | 31338a16a5524bda9cc9c79f792400e33105041e (diff) |
[paging] Use paging_request_remove to update last_request and free memory
Update the last_request when stopping the paging operation and also
free the associated memory of the request.
Diffstat (limited to 'src/paging.c')
-rw-r--r-- | src/paging.c | 25 |
1 files changed, 16 insertions, 9 deletions
diff --git a/src/paging.c b/src/paging.c index 40fe7893b..7f2b0e5b5 100644 --- a/src/paging.c +++ b/src/paging.c @@ -67,12 +67,17 @@ static unsigned int calculate_group(struct gsm_bts *bts, struct gsm_subscriber * /* * Kill one paging request update the internal list... */ -static void page_remove_request(struct paging_bts *paging_bts) { - struct paging_request *to_be_deleted = paging_bts->last_request; - paging_bts->last_request = - (struct paging_request *)paging_bts->last_request->entry.next; - if (&to_be_deleted->entry == &paging_bts->pending_requests) - paging_bts->last_request = NULL; +static void page_remove_request(struct paging_bts *paging_bts, + struct paging_request *to_be_deleted) +{ + /* Update the last_request if that is necessary */ + if (to_be_deleted == paging_bts->last_request) { + paging_bts->last_request = + (struct paging_request *)paging_bts->last_request->entry.next; + if (&to_be_deleted->entry == &paging_bts->pending_requests) + paging_bts->last_request = NULL; + } + llist_del(&to_be_deleted->entry); free(to_be_deleted); } @@ -107,7 +112,7 @@ static void page_handle_pending_requests(void *data) { request->chan_type); if (request->requests > MAX_PAGING_REQUEST) { - page_remove_request(paging_bts); + page_remove_request(paging_bts, request); } else { /* move to the next item */ paging_bts->last_request = @@ -190,7 +195,9 @@ void page_request_stop(struct gsm_bts *bts, struct gsm_subscriber *subscr) llist_for_each_entry_safe(req, req2, &bts_entry->pending_requests, entry) { - if (req->subscr == subscr) - llist_del(&req->entry); + if (req->subscr == subscr) { + page_remove_request(bts_entry, req); + break; + } } } |