OPENBUS-3006 busservices não para após shutdown

A condição de self.sweeper ~= true não era satisfeita para que o código
do shutdown chamasse o unschedule do sweeper. Uma situação exemplo era
que logo após iniciar o busservices, a self.sweeper era marcada como
true mas poderia demorar por algum escalonamento antes de self.sweeper
assumir o valor da cothread corrente e dormir pelo próximo ciclo de
renovação.

Essa correção faz com que a self.sweeper assuma o quanto antes o valor da
cothread corrente e só então durma pelo primeiro ciclo de renovação.
Assim se ela estiver dormindo enquanto o shutdown é invocado, ela será
removida da fila de prontos. Caso ela já tenha acordado, o shutdown vai
marcá-la como false para parar o laço da renovação de leasing.
parent f2a3f193
......@@ -313,11 +313,16 @@ function AccessControl:__init(data)
end
-- timer de limpeza de credenciais no renovadas e desafios no respondidos
self.sweeper = true -- indicate sweeper shall run
schedule(newthread(function()
while self.sweeper do
local now = time()
local nextDeadline = now + self.leaseTime + self.expirationGap
self.sweeper = running()
waituntil(nextDeadline)
self.sweeper = true
for id, login in self.activeLogins:iLogins() do
local deadline = login.deadline
if deadline > now then
......@@ -343,13 +348,8 @@ function AccessControl:__init(data)
process:cancel()
end
end
self.sweeper = running()
waituntil(nextDeadline)
self.sweeper = true
end
end), "delay", self.leaseTime+self.expirationGap)
self.sweeper = true -- indicate sweeper shall run
end))
end
function AccessControl:shutdown()
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment