From cdb747004ba9ffc01c6e427c24124dedd31e016c Mon Sep 17 00:00:00 2001 From: quantenschaum Date: Mon, 19 Feb 2024 21:32:58 +0100 Subject: [PATCH] #324 flush queue if messages get too old - no looping - force an empty queue --- server/handler/feeder.py | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/server/handler/feeder.py b/server/handler/feeder.py index fff80f2ec..4f532f686 100644 --- a/server/handler/feeder.py +++ b/server/handler/feeder.py @@ -24,6 +24,7 @@ # parts from this software (AIS decoding) are taken from the gpsd project # so refer to this BSD licencse also (see ais.py) or omit ais.py ############################################################################### +import time from avnav_worker import * hasSerial=False @@ -216,15 +217,13 @@ def fetchFromHistory(self,sequence,maxEntries=10, #our requested sequence is not in the list any more numErrors=startSequence-sequence startPoint=0 - allowedAge=time.monotonic()-maxAge #maybe better related to return point - while self.history[startPoint].timestamp < allowedAge and startPoint < len(self.history): - numErrors+=1 - startPoint+=1 + min_time=time.monotonic()-maxAge # min required timestamp + if self.history[startPoint].timestamp < min_time: # data is too old + new_start=max(0,len(self.history)-maxEntries) # flush the queue + numErrors+=new_start-startPoint # discard messages + startPoint=new_start # return newest maxEntries only if startPoint < len(self.history): - #something to return - numrt=len(self.history)-startPoint - if numrt > maxEntries: - numrt=maxEntries + numrt=min(len(self.history)-startPoint,maxEntries) seq=startSequence+startPoint+numrt-1 rtlist=self.history[startPoint:startPoint+numrt] break