From 1aa0e47104d9529ecf448b81adb9ef6fb0a50c5f Mon Sep 17 00:00:00 2001 From: Neels Hofmeyr Date: Tue, 24 Nov 2015 13:32:23 +0100 Subject: gtphub: add assertion to ensure expiry ordering. Make 100% sure the user adds expiring_items in chronological order by asserting that a newly added expiry is >= the last expiry in the queue. Add llist_last() to facilitate. Sponsored-by: On-Waves ehi --- openbsc/src/gprs/gtphub.c | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'openbsc/src/gprs/gtphub.c') diff --git a/openbsc/src/gprs/gtphub.c b/openbsc/src/gprs/gtphub.c index 0550c7ffe..e339ac69b 100644 --- a/openbsc/src/gprs/gtphub.c +++ b/openbsc/src/gprs/gtphub.c @@ -62,6 +62,10 @@ typedef int (*osmo_fd_cb_t)(struct osmo_fd *fd, unsigned int what); #define llist_first(head, type, entry) \ llist_entry(__llist_first(head), type, entry) +#define __llist_last(head) (((head)->next == (head)) ? NULL : (head)->prev) +#define llist_last(head, type, entry) \ + llist_entry(__llist_last(head), type, entry) + /* TODO move GTP header stuff to openggsn/gtp/ ? See gtp_decaps*() */ enum gtp_rc { @@ -564,6 +568,10 @@ void expiry_add(struct expiry *exq, struct expiring_item *item, time_t now) { item->expiry = now + exq->expiry_in_seconds; + OSMO_ASSERT(llist_empty(&exq->items) + || (item->expiry + >= llist_last(&exq->items, struct expiring_item, entry)->expiry)); + /* Add/move to the tail to always sort by expiry, ascending. */ llist_del(&item->entry); llist_add_tail(&item->entry, &exq->items); -- cgit v1.2.3