[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.
diff --git a/src/paging.c b/src/paging.c
index 40fe789..7f2b0e5 100644
--- a/src/paging.c
+++ b/src/paging.c
@@ -67,12 +67,17 @@
/*
* 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 @@
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 @@
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;
+ }
}
}