Software /
code /
prosody
Annotate
util/watchdog.lua @ 12828:f33887f925e1
net.server_epoll: Remove delay on last main loop iteration when quitting
Main difference is that timers are not checked unconditionally before
each poll, only when running out of previous poll results (hidden by
util.poll). This removes a final poll at shutdown that usually delays
the 'not quitting' condition check by one second.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Fri, 06 Jan 2023 04:38:39 +0100 |
parent | 12547:e79c64b2dfed |
child | 12975:d10957394a3c |
rev | line source |
---|---|
4401
0ed617f58404
util.watchdog: Watchdog timer library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
1 local timer = require "util.timer"; |
0ed617f58404
util.watchdog: Watchdog timer library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
2 local setmetatable = setmetatable; |
0ed617f58404
util.watchdog: Watchdog timer library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
3 |
6777
5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents:
4891
diff
changeset
|
4 local _ENV = nil; |
8555
4f0f5b49bb03
vairious: Add annotation when an empty environment is set [luacheck]
Kim Alvefur <zash@zash.se>
parents:
6777
diff
changeset
|
5 -- luacheck: std none |
4401
0ed617f58404
util.watchdog: Watchdog timer library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
6 |
0ed617f58404
util.watchdog: Watchdog timer library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
7 local watchdog_methods = {}; |
0ed617f58404
util.watchdog: Watchdog timer library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
8 local watchdog_mt = { __index = watchdog_methods }; |
0ed617f58404
util.watchdog: Watchdog timer library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
9 |
6777
5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents:
4891
diff
changeset
|
10 local function new(timeout, callback) |
12545
5059a639f61e
util.watchdog: Update to use "new" util.timer API
Matthew Wild <mwild1@gmail.com>
parents:
8555
diff
changeset
|
11 local watchdog = setmetatable({ |
5059a639f61e
util.watchdog: Update to use "new" util.timer API
Matthew Wild <mwild1@gmail.com>
parents:
8555
diff
changeset
|
12 timeout = timeout; |
5059a639f61e
util.watchdog: Update to use "new" util.timer API
Matthew Wild <mwild1@gmail.com>
parents:
8555
diff
changeset
|
13 callback = callback; |
5059a639f61e
util.watchdog: Update to use "new" util.timer API
Matthew Wild <mwild1@gmail.com>
parents:
8555
diff
changeset
|
14 timer_id = nil; |
5059a639f61e
util.watchdog: Update to use "new" util.timer API
Matthew Wild <mwild1@gmail.com>
parents:
8555
diff
changeset
|
15 }, watchdog_mt); |
5059a639f61e
util.watchdog: Update to use "new" util.timer API
Matthew Wild <mwild1@gmail.com>
parents:
8555
diff
changeset
|
16 |
12546
e78b35574aae
util.watchdog: Allow :reset() to restart a cancelled watchdog
Matthew Wild <mwild1@gmail.com>
parents:
12545
diff
changeset
|
17 watchdog:reset(); -- Kick things off |
12545
5059a639f61e
util.watchdog: Update to use "new" util.timer API
Matthew Wild <mwild1@gmail.com>
parents:
8555
diff
changeset
|
18 |
4401
0ed617f58404
util.watchdog: Watchdog timer library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
19 return watchdog; |
0ed617f58404
util.watchdog: Watchdog timer library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
20 end |
0ed617f58404
util.watchdog: Watchdog timer library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
21 |
12547
e79c64b2dfed
util.watchdog: Allow passing a new timeout to :reset()
Matthew Wild <mwild1@gmail.com>
parents:
12546
diff
changeset
|
22 function watchdog_methods:reset(new_timeout) |
e79c64b2dfed
util.watchdog: Allow passing a new timeout to :reset()
Matthew Wild <mwild1@gmail.com>
parents:
12546
diff
changeset
|
23 if new_timeout then |
e79c64b2dfed
util.watchdog: Allow passing a new timeout to :reset()
Matthew Wild <mwild1@gmail.com>
parents:
12546
diff
changeset
|
24 self.timeout = new_timeout; |
e79c64b2dfed
util.watchdog: Allow passing a new timeout to :reset()
Matthew Wild <mwild1@gmail.com>
parents:
12546
diff
changeset
|
25 end |
12545
5059a639f61e
util.watchdog: Update to use "new" util.timer API
Matthew Wild <mwild1@gmail.com>
parents:
8555
diff
changeset
|
26 if self.timer_id then |
12546
e78b35574aae
util.watchdog: Allow :reset() to restart a cancelled watchdog
Matthew Wild <mwild1@gmail.com>
parents:
12545
diff
changeset
|
27 timer.reschedule(self.timer_id, self.timeout+1); |
e78b35574aae
util.watchdog: Allow :reset() to restart a cancelled watchdog
Matthew Wild <mwild1@gmail.com>
parents:
12545
diff
changeset
|
28 else |
e78b35574aae
util.watchdog: Allow :reset() to restart a cancelled watchdog
Matthew Wild <mwild1@gmail.com>
parents:
12545
diff
changeset
|
29 self.timer_id = timer.add_task(self.timeout+1, function () |
e78b35574aae
util.watchdog: Allow :reset() to restart a cancelled watchdog
Matthew Wild <mwild1@gmail.com>
parents:
12545
diff
changeset
|
30 return self:callback(); |
e78b35574aae
util.watchdog: Allow :reset() to restart a cancelled watchdog
Matthew Wild <mwild1@gmail.com>
parents:
12545
diff
changeset
|
31 end); |
12545
5059a639f61e
util.watchdog: Update to use "new" util.timer API
Matthew Wild <mwild1@gmail.com>
parents:
8555
diff
changeset
|
32 end |
4401
0ed617f58404
util.watchdog: Watchdog timer library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
33 end |
0ed617f58404
util.watchdog: Watchdog timer library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
34 |
0ed617f58404
util.watchdog: Watchdog timer library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
35 function watchdog_methods:cancel() |
12545
5059a639f61e
util.watchdog: Update to use "new" util.timer API
Matthew Wild <mwild1@gmail.com>
parents:
8555
diff
changeset
|
36 if self.timer_id then |
5059a639f61e
util.watchdog: Update to use "new" util.timer API
Matthew Wild <mwild1@gmail.com>
parents:
8555
diff
changeset
|
37 timer.stop(self.timer_id); |
5059a639f61e
util.watchdog: Update to use "new" util.timer API
Matthew Wild <mwild1@gmail.com>
parents:
8555
diff
changeset
|
38 self.timer_id = nil; |
5059a639f61e
util.watchdog: Update to use "new" util.timer API
Matthew Wild <mwild1@gmail.com>
parents:
8555
diff
changeset
|
39 end |
4401
0ed617f58404
util.watchdog: Watchdog timer library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
40 end |
0ed617f58404
util.watchdog: Watchdog timer library
Matthew Wild <mwild1@gmail.com>
parents:
diff
changeset
|
41 |
6777
5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents:
4891
diff
changeset
|
42 return { |
5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents:
4891
diff
changeset
|
43 new = new; |
5de6b93d0190
util.*: Remove use of module() function, make all module functions local and return them in a table at the end
Kim Alvefur <zash@zash.se>
parents:
4891
diff
changeset
|
44 }; |