4
4
#include " uv.h"
5
5
6
6
#include " rust_internal.h"
7
+ #include " rust_scheduler.h"
7
8
#include " rust_upcall.h"
8
9
9
10
#ifdef __GNUC__
@@ -49,7 +50,7 @@ struct socket_data : public task_owned<socket_data> {
49
50
struct req_connect : public uv_connect_t , public task_owned <req_connect> {};
50
51
struct req_write : public uv_write_t , public task_owned <req_write> {};
51
52
52
- extern " C" CDECL void aio_close_socket (rust_task *task , socket_data *);
53
+ extern " C" CDECL void aio_close_socket (void * , socket_data *);
53
54
54
55
static uv_idle_s idle_handler;
55
56
@@ -58,27 +59,31 @@ static void idle_callback(uv_idle_t* handle, int status) {
58
59
task->yield ();
59
60
}
60
61
61
- extern " C" CDECL void aio_init (rust_task *task) {
62
+ extern " C" CDECL void aio_init (void *) {
63
+ rust_task *task = rust_scheduler::get_task ();
62
64
LOG_UPCALL_ENTRY (task);
63
65
iotask = task;
64
66
uv_idle_init (uv_default_loop (), &idle_handler);
65
67
uv_idle_start (&idle_handler, idle_callback);
66
68
}
67
69
68
- extern " C" CDECL void aio_run (rust_task *task) {
70
+ extern " C" CDECL void aio_run (void *) {
71
+ rust_task *task = rust_scheduler::get_task ();
69
72
LOG_UPCALL_ENTRY (task);
70
73
idle_handler.data = task;
71
74
uv_run (uv_default_loop ());
72
75
}
73
76
74
77
void nop_close (uv_handle_t * handle) {}
75
78
76
- extern " C" CDECL void aio_stop (rust_task *task) {
79
+ extern " C" CDECL void aio_stop (void *) {
80
+ rust_task *task = rust_scheduler::get_task ();
77
81
LOG_UPCALL_ENTRY (task);
78
82
uv_close ((uv_handle_t *)&idle_handler, nop_close);
79
83
}
80
84
81
- static socket_data *make_socket (rust_task *task, rust_chan *chan) {
85
+ static socket_data *make_socket (void *, rust_chan *chan) {
86
+ rust_task *task = rust_scheduler::get_task ();
82
87
socket_data *data = new (task, " make_socket" ) socket_data;
83
88
if (!data ||
84
89
uv_tcp_init (uv_default_loop (), &data->socket )) {
@@ -155,8 +160,9 @@ static void new_connection(uv_stream_t *socket, int status) {
155
160
server->chan ->send (&client);
156
161
}
157
162
158
- extern " C" CDECL socket_data *aio_serve (rust_task *task, const char *ip,
159
- int port, chan_handle *_chan) {
163
+ extern " C" CDECL socket_data *aio_serve (void *, const char *ip, int port,
164
+ chan_handle *_chan) {
165
+ rust_task *task = rust_scheduler::get_task ();
160
166
LOG_UPCALL_ENTRY (task);
161
167
rust_chan *chan = task->get_chan_by_handle (_chan);
162
168
if (!chan) return NULL ;
@@ -201,13 +207,15 @@ static void free_socket(uv_handle_t *handle) {
201
207
delete data;
202
208
}
203
209
204
- extern " C" CDECL void aio_close_socket (rust_task *task, socket_data *client) {
210
+ extern " C" CDECL void aio_close_socket (void *, socket_data *client) {
211
+ rust_task *task = rust_scheduler::get_task ();
205
212
LOG_UPCALL_ENTRY (task);
206
213
uv_close ((uv_handle_t *)&client->socket , free_socket);
207
214
}
208
215
209
- extern " C" CDECL void aio_close_server (rust_task *task , socket_data *server,
216
+ extern " C" CDECL void aio_close_server (void * , socket_data *server,
210
217
chan_handle *_chan) {
218
+ rust_task *task = rust_scheduler::get_task ();
211
219
LOG_UPCALL_ENTRY (task);
212
220
rust_chan *chan = task->get_chan_by_handle (_chan);
213
221
if (!chan) return ;
@@ -221,8 +229,8 @@ extern "C" CDECL void aio_close_server(rust_task *task, socket_data *server,
221
229
chan->deref ();
222
230
}
223
231
224
- extern " C" CDECL bool aio_is_null_client (rust_task *task,
225
- socket_data *server) {
232
+ extern " C" CDECL bool aio_is_null_client (void *, socket_data *server) {
233
+ rust_task *task = rust_scheduler::get_task ();
226
234
LOG_UPCALL_ENTRY (task);
227
235
return server == NULL ;
228
236
}
@@ -234,8 +242,9 @@ static void connection_complete(uv_connect_t *req, int status) {
234
242
free (req);
235
243
}
236
244
237
- extern " C" CDECL void aio_connect (rust_task *task, const char *host,
238
- int port, chan_handle *_chan) {
245
+ extern " C" CDECL void aio_connect (void *, const char *host, int port,
246
+ chan_handle *_chan) {
247
+ rust_task *task = rust_scheduler::get_task ();
239
248
LOG_UPCALL_ENTRY (task);
240
249
rust_chan *chan = task->get_chan_by_handle (_chan);
241
250
uv_connect_t *req = NULL ;
@@ -272,9 +281,9 @@ static void write_complete(uv_write_t *req, int status) {
272
281
free (req);
273
282
}
274
283
275
- extern " C" CDECL void aio_writedata (rust_task *task , socket_data *data,
276
- char *buf, size_t size,
277
- chan_handle *_chan) {
284
+ extern " C" CDECL void aio_writedata (void * , socket_data *data, char *buf ,
285
+ size_t size, chan_handle *_chan) {
286
+ rust_task *task = rust_scheduler::get_task ();
278
287
LOG_UPCALL_ENTRY (task);
279
288
rust_chan *chan = task->get_chan_by_handle (_chan);
280
289
uv_write_t *req;
@@ -305,8 +314,9 @@ extern "C" CDECL void aio_writedata(rust_task *task, socket_data *data,
305
314
task->fail ();
306
315
}
307
316
308
- extern " C" CDECL void aio_read (rust_task *task , socket_data *data,
317
+ extern " C" CDECL void aio_read (void * , socket_data *data,
309
318
chan_handle *_chan) {
319
+ rust_task *task = rust_scheduler::get_task ();
310
320
LOG_UPCALL_ENTRY (task);
311
321
rust_chan *reader = task->get_chan_by_handle (_chan);
312
322
if (!reader) return ;
0 commit comments