pespin has uploaded this change for review.

View Change

paging: Recalculate work timer if waiting for retrans

If the queue is only holding requests in retransmition state, when we
add a new one, we have to re-calculate the work timer to a lower value
instead of letting it wait for the first retransmit to be ready.

Change-Id: Ibd4f8921c92f7481f0b9943041c141640ab812c8
---
M src/osmo-bsc/paging.c
1 file changed, 22 insertions(+), 1 deletion(-)

git pull ssh://gerrit.osmocom.org:29418/osmo-bsc refs/changes/74/27974/1
diff --git a/src/osmo-bsc/paging.c b/src/osmo-bsc/paging.c
index fcb038b..1430c22 100644
--- a/src/osmo-bsc/paging.c
+++ b/src/osmo-bsc/paging.c
@@ -432,7 +432,28 @@

t3113_timeout_s = calculate_timer_3113(req, reqs_before_same_pgroup);
osmo_timer_schedule(&req->T3113, t3113_timeout_s, 0);
- paging_schedule_if_needed(bts_entry);
+
+ /* Trigger scheduler if needed: */
+ if (!osmo_timer_pending(&bts_entry->work_timer)) {
+ paging_handle_pending_requests(bts_entry);
+ } else if (last_initial_req == NULL) {
+ /* Worker timer is armed -> there was already one req before
+ * last_initial_req is NULL -> There were no initial requests in
+ * the list, aka the timer is waiting for retransmition,
+ * which is a longer period.
+ * Let's recaculate the time to adapt it to initial_period: */
+ struct timespec now, elapsed, tdiff;
+ osmo_clock_gettime(CLOCK_MONOTONIC, &now);
+ /* This is what used to be the first req (retrans state) in the queue: */
+ req = llist_entry(req->entry.next, struct gsm_paging_request, entry);
+ timespecsub(&now, &req->last_attempt_ts, &elapsed);
+ if (timespeccmp(&elapsed, &initial_period, <)) {
+ timespecsub(&initial_period, &elapsed, &tdiff);
+ } else {
+ tdiff = (struct timespec){.tv_sec = 0, .tv_nsec = 0 };
+ }
+ osmo_timer_schedule(&bts_entry->work_timer, tdiff.tv_sec, tdiff.tv_nsec / 1000);
+ } /* else: worker is already ongoing submitting initial requests, nothing do be done */

return 0;
}

To view, visit change 27974. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: osmo-bsc
Gerrit-Branch: master
Gerrit-Change-Id: Ibd4f8921c92f7481f0b9943041c141640ab812c8
Gerrit-Change-Number: 27974
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <pespin@sysmocom.de>
Gerrit-MessageType: newchange