Software /
code /
prosody
Annotate
net/cqueues.lua @ 11864:fceebfb28d86
mod_http_file_share: Clean up incomplete uploads
If the request fails in the middle then the file~ could be left behind
because no code was invoked to delete it then. This gets rid of it when
the request is removed. It may still be left in case of an unclean
shutdown.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sat, 23 Oct 2021 01:53:07 +0200 |
parent | 10999:37b884d675f7 |
child | 12974:ba409c67353b |
rev | line source |
---|---|
6514
d425fc41e59f
net.cqueues: Add module that allows use of cqueues while still using net.server as main loop
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
1 -- Prosody IM |
d425fc41e59f
net.cqueues: Add module that allows use of cqueues while still using net.server as main loop
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
2 -- Copyright (C) 2014 Daurnimator |
d425fc41e59f
net.cqueues: Add module that allows use of cqueues while still using net.server as main loop
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
3 -- |
d425fc41e59f
net.cqueues: Add module that allows use of cqueues while still using net.server as main loop
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
4 -- This project is MIT/X11 licensed. Please see the |
d425fc41e59f
net.cqueues: Add module that allows use of cqueues while still using net.server as main loop
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
5 -- COPYING file in the source package for more information. |
d425fc41e59f
net.cqueues: Add module that allows use of cqueues while still using net.server as main loop
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
6 -- |
d425fc41e59f
net.cqueues: Add module that allows use of cqueues while still using net.server as main loop
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
7 -- This module allows you to use cqueues with a net.server mainloop |
d425fc41e59f
net.cqueues: Add module that allows use of cqueues while still using net.server as main loop
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
8 -- |
d425fc41e59f
net.cqueues: Add module that allows use of cqueues while still using net.server as main loop
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
9 |
d425fc41e59f
net.cqueues: Add module that allows use of cqueues while still using net.server as main loop
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
10 local server = require "net.server"; |
d425fc41e59f
net.cqueues: Add module that allows use of cqueues while still using net.server as main loop
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
11 local cqueues = require "cqueues"; |
10999
37b884d675f7
net.cqueues: Fix resuming after timeouts
Kim Alvefur <zash@zash.se>
parents:
10996
diff
changeset
|
12 local timer = require "util.timer"; |
6538
f1eb66288f60
net.cqueues: Fix incorrect version check
daurnimator <quae@daurnimator.com>
parents:
6537
diff
changeset
|
13 assert(cqueues.VERSION >= 20150113, "cqueues newer than 20150113 required") |
6514
d425fc41e59f
net.cqueues: Add module that allows use of cqueues while still using net.server as main loop
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
14 |
d425fc41e59f
net.cqueues: Add module that allows use of cqueues while still using net.server as main loop
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
15 -- Create a single top level cqueue |
d425fc41e59f
net.cqueues: Add module that allows use of cqueues while still using net.server as main loop
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
16 local cq; |
d425fc41e59f
net.cqueues: Add module that allows use of cqueues while still using net.server as main loop
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
17 |
d425fc41e59f
net.cqueues: Add module that allows use of cqueues while still using net.server as main loop
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
18 if server.cq then -- server provides cqueues object |
d425fc41e59f
net.cqueues: Add module that allows use of cqueues while still using net.server as main loop
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
19 cq = server.cq; |
10996
d742095046f9
net.cqueues: Switch to server.watchfd for main loop integration
Kim Alvefur <zash@zash.se>
parents:
6538
diff
changeset
|
20 elseif server.watchfd then |
6514
d425fc41e59f
net.cqueues: Add module that allows use of cqueues while still using net.server as main loop
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
21 cq = cqueues.new(); |
10999
37b884d675f7
net.cqueues: Fix resuming after timeouts
Kim Alvefur <zash@zash.se>
parents:
10996
diff
changeset
|
22 local timeout = timer.add_task(cq:timeout() or 0, function () |
37b884d675f7
net.cqueues: Fix resuming after timeouts
Kim Alvefur <zash@zash.se>
parents:
10996
diff
changeset
|
23 -- FIXME It should be enough to reschedule this timeout instead of replacing it, but this does not work. See https://issues.prosody.im/1572 |
37b884d675f7
net.cqueues: Fix resuming after timeouts
Kim Alvefur <zash@zash.se>
parents:
10996
diff
changeset
|
24 assert(cq:loop(0)); |
37b884d675f7
net.cqueues: Fix resuming after timeouts
Kim Alvefur <zash@zash.se>
parents:
10996
diff
changeset
|
25 return cq:timeout(); |
37b884d675f7
net.cqueues: Fix resuming after timeouts
Kim Alvefur <zash@zash.se>
parents:
10996
diff
changeset
|
26 end); |
10996
d742095046f9
net.cqueues: Switch to server.watchfd for main loop integration
Kim Alvefur <zash@zash.se>
parents:
6538
diff
changeset
|
27 server.watchfd(cq:pollfd(), function () |
6514
d425fc41e59f
net.cqueues: Add module that allows use of cqueues while still using net.server as main loop
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
28 assert(cq:loop(0)); |
10999
37b884d675f7
net.cqueues: Fix resuming after timeouts
Kim Alvefur <zash@zash.se>
parents:
10996
diff
changeset
|
29 local t = cq:timeout(); |
37b884d675f7
net.cqueues: Fix resuming after timeouts
Kim Alvefur <zash@zash.se>
parents:
10996
diff
changeset
|
30 if t then |
37b884d675f7
net.cqueues: Fix resuming after timeouts
Kim Alvefur <zash@zash.se>
parents:
10996
diff
changeset
|
31 timer.stop(timeout); |
37b884d675f7
net.cqueues: Fix resuming after timeouts
Kim Alvefur <zash@zash.se>
parents:
10996
diff
changeset
|
32 timeout = timer.add_task(cq:timeout(), function () |
37b884d675f7
net.cqueues: Fix resuming after timeouts
Kim Alvefur <zash@zash.se>
parents:
10996
diff
changeset
|
33 assert(cq:loop(0)); |
37b884d675f7
net.cqueues: Fix resuming after timeouts
Kim Alvefur <zash@zash.se>
parents:
10996
diff
changeset
|
34 return cq:timeout(); |
37b884d675f7
net.cqueues: Fix resuming after timeouts
Kim Alvefur <zash@zash.se>
parents:
10996
diff
changeset
|
35 end); |
37b884d675f7
net.cqueues: Fix resuming after timeouts
Kim Alvefur <zash@zash.se>
parents:
10996
diff
changeset
|
36 end |
6514
d425fc41e59f
net.cqueues: Add module that allows use of cqueues while still using net.server as main loop
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
37 end); |
d425fc41e59f
net.cqueues: Add module that allows use of cqueues while still using net.server as main loop
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
38 else |
d425fc41e59f
net.cqueues: Add module that allows use of cqueues while still using net.server as main loop
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
39 error "NYI" |
d425fc41e59f
net.cqueues: Add module that allows use of cqueues while still using net.server as main loop
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
40 end |
d425fc41e59f
net.cqueues: Add module that allows use of cqueues while still using net.server as main loop
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
41 |
d425fc41e59f
net.cqueues: Add module that allows use of cqueues while still using net.server as main loop
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
42 return { |
d425fc41e59f
net.cqueues: Add module that allows use of cqueues while still using net.server as main loop
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
43 cq = cq; |
d425fc41e59f
net.cqueues: Add module that allows use of cqueues while still using net.server as main loop
daurnimator <quae@daurnimator.com>
parents:
diff
changeset
|
44 } |