@@ -27,9 +27,11 @@ local FLAGS = {
27
27
28
28
}
29
29
30
- local trace = function () end or print
30
+ local trace = true
31
31
32
- local FILES , CONTEXT = {}, {}
32
+ trace = trace and print or function () end
33
+
34
+ local CONTEXT = {}
33
35
34
36
function create_curl_context (sockfd )
35
37
local context = {
@@ -58,22 +60,22 @@ function add_download(url, num)
58
60
writefunction = file ;
59
61
}
60
62
61
- FILES [ handle ] = file
63
+ handle . data = file
62
64
63
65
curl_handle :add_handle (handle )
64
66
fprintf (stderr , " Added download %s -> %s\n " , url , filename );
65
67
end
66
68
67
69
function check_multi_info ()
68
70
while true do
69
- local easy , ok , err = curl_handle :info_read ()
71
+ local easy , ok , err = curl_handle :info_read (true )
70
72
if not easy then curl_handle :close () error (err ) end
71
73
if easy == 0 then break end
72
74
73
75
local context = CONTEXT [e ]
74
76
if context then destroy_curl_context (context ) end
75
- local file = FILES [ easy ]
76
- if file then FILES [ easy ] = nil , file :close () end
77
+ local file = assert ( easy . data )
78
+ file :close ()
77
79
local done_url = easy :getinfo_effective_url ()
78
80
easy :close ()
79
81
if ok then
@@ -116,29 +118,26 @@ function start_timeout(timeout_ms)
116
118
timeout :stop ():start (timeout_ms , 0 , on_timeout )
117
119
end
118
120
119
- local handle_socket = function (...)
120
- local ok , err = pcall (handle_socket_impl , ... )
121
- if not ok then uv .defer (function () error (err ) end ) end
122
- end
123
-
124
- function handle_socket_impl (easy , s , action )
125
- -- calls by curl --
121
+ function handle_socket (easy , s , action )
122
+ local ok , err = pcall (function ()
123
+ -- calls by curl --
124
+ trace (" CURL::SOCKET" , easy , s , ACTION_NAMES [action ] or action )
126
125
127
- trace (" CURL::SOCKET" , easy , s , ACTION_NAMES [action ] or action )
126
+ local curl_context = CONTEXT [easy ] or create_curl_context (s )
127
+ CONTEXT [easy ] = curl_context
128
128
129
- local curl_context = CONTEXT [easy ] or create_curl_context (s )
130
- CONTEXT [easy ] = curl_context
129
+ assert (curl_context .sockfd == s )
131
130
132
- assert ( curl_context . sockfd == s )
133
-
134
- if action == curl .POLL_IN then
135
- curl_context .poll_handle :start (uv .READABLE , curl_perform )
136
- elseif action == curl .POLL_OUT then
137
- curl_context . poll_handle : start ( uv . WRITABLE , curl_perform )
138
- elseif action == curl . POLL_REMOVE then
139
- CONTEXT [ easy ] = nil
140
- destroy_curl_context ( curl_context )
141
- end
131
+ if action == curl . POLL_IN then
132
+ curl_context . poll_handle : start ( uv . READABLE , curl_perform )
133
+ elseif action == curl .POLL_OUT then
134
+ curl_context .poll_handle :start (uv .WRITABLE , curl_perform )
135
+ elseif action == curl .POLL_REMOVE then
136
+ CONTEXT [ easy ] = nil
137
+ destroy_curl_context ( curl_context )
138
+ end
139
+ end )
140
+ if not ok then uv . defer ( function () error ( err ) end ) end
142
141
end
143
142
144
143
timeout = uv .timer ()
0 commit comments