asyncengine 0.0.1.testing1 → 0.0.2.alpha1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README.markdown +3 -0
- data/Rakefile +38 -0
- data/asyncengine.gemspec +8 -4
- data/ext/asyncengine/ae_call_from_other_thread.c +106 -0
- data/ext/asyncengine/ae_call_from_other_thread.h +12 -0
- data/ext/asyncengine/ae_handle_common.c +193 -48
- data/ext/asyncengine/ae_handle_common.h +40 -13
- data/ext/asyncengine/ae_ip_utils.c +246 -0
- data/ext/asyncengine/ae_ip_utils.h +25 -0
- data/ext/asyncengine/ae_next_tick.c +81 -21
- data/ext/asyncengine/ae_next_tick.h +4 -2
- data/ext/asyncengine/ae_resolver.c +156 -0
- data/ext/asyncengine/ae_resolver.h +10 -0
- data/ext/asyncengine/ae_tcp.c +908 -0
- data/ext/asyncengine/ae_tcp.h +20 -0
- data/ext/asyncengine/ae_timer.c +355 -81
- data/ext/asyncengine/ae_timer.h +11 -4
- data/ext/asyncengine/ae_udp.c +579 -13
- data/ext/asyncengine/ae_udp.h +15 -2
- data/ext/asyncengine/ae_utils.c +192 -0
- data/ext/asyncengine/ae_utils.h +16 -0
- data/ext/asyncengine/asyncengine_ruby.c +469 -26
- data/ext/asyncengine/asyncengine_ruby.h +49 -11
- data/ext/asyncengine/debug.h +68 -0
- data/ext/asyncengine/extconf.rb +26 -2
- data/ext/asyncengine/ip_parser.c +5954 -0
- data/ext/asyncengine/ip_parser.h +16 -0
- data/ext/asyncengine/libuv/AUTHORS +16 -0
- data/ext/asyncengine/libuv/common.gypi +4 -4
- data/ext/asyncengine/libuv/config-mingw.mk +6 -6
- data/ext/asyncengine/libuv/config-unix.mk +13 -13
- data/ext/asyncengine/libuv/gyp_uv +5 -1
- data/ext/asyncengine/libuv/ibc_tests/exec_test.sh +8 -0
- data/ext/asyncengine/libuv/ibc_tests/uv_shutdown_write_issue.c +171 -0
- data/ext/asyncengine/libuv/ibc_tests/uv_tcp_close_while_connecting.c +102 -0
- data/ext/asyncengine/libuv/include/uv-private/ngx-queue.h +3 -1
- data/ext/asyncengine/libuv/include/uv-private/uv-unix.h +103 -50
- data/ext/asyncengine/libuv/include/uv-private/uv-win.h +76 -24
- data/ext/asyncengine/libuv/include/uv.h +353 -88
- data/ext/asyncengine/libuv/src/ares/ares__close_sockets.o +0 -0
- data/ext/asyncengine/libuv/src/ares/ares__get_hostent.o +0 -0
- data/ext/asyncengine/libuv/src/ares/ares__read_line.o +0 -0
- data/ext/asyncengine/libuv/src/ares/ares__timeval.o +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_cancel.o +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_data.o +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_destroy.o +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_expand_name.o +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_expand_string.o +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_fds.o +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_free_hostent.o +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_free_string.o +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_gethostbyaddr.o +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_gethostbyname.o +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_getnameinfo.o +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_getopt.o +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_getsock.o +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_init.o +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_library_init.o +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_llist.o +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_mkquery.o +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_nowarn.o +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_options.o +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_parse_a_reply.o +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_parse_aaaa_reply.o +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_parse_mx_reply.o +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_parse_ns_reply.o +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_parse_ptr_reply.o +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_parse_srv_reply.o +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_parse_txt_reply.o +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_process.o +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_query.o +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_search.o +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_send.o +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_strcasecmp.o +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_strdup.o +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_strerror.o +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_timeout.o +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_version.o +0 -0
- data/ext/asyncengine/libuv/src/ares/ares_writev.o +0 -0
- data/ext/asyncengine/libuv/src/ares/bitncmp.o +0 -0
- data/ext/asyncengine/libuv/src/ares/inet_net_pton.o +0 -0
- data/ext/asyncengine/libuv/src/ares/inet_ntop.o +0 -0
- data/ext/asyncengine/libuv/src/cares.c +225 -0
- data/ext/asyncengine/libuv/src/cares.o +0 -0
- data/ext/asyncengine/libuv/src/fs-poll.c +237 -0
- data/ext/asyncengine/libuv/src/fs-poll.o +0 -0
- data/ext/asyncengine/libuv/src/unix/async.c +78 -17
- data/ext/asyncengine/libuv/src/unix/async.o +0 -0
- data/ext/asyncengine/libuv/src/unix/core.c +305 -213
- data/ext/asyncengine/libuv/src/unix/core.o +0 -0
- data/ext/asyncengine/libuv/src/unix/cygwin.c +1 -1
- data/ext/asyncengine/libuv/src/unix/darwin.c +2 -1
- data/ext/asyncengine/libuv/src/unix/dl.c +36 -44
- data/ext/asyncengine/libuv/src/unix/dl.o +0 -0
- data/ext/asyncengine/libuv/src/unix/eio/eio.o +0 -0
- data/ext/asyncengine/libuv/src/unix/error.c +6 -0
- data/ext/asyncengine/libuv/src/unix/error.o +0 -0
- data/ext/asyncengine/libuv/src/unix/ev/ev.c +8 -4
- data/ext/asyncengine/libuv/src/unix/ev/ev.o +0 -0
- data/ext/asyncengine/libuv/src/unix/freebsd.c +1 -1
- data/ext/asyncengine/libuv/src/unix/fs.c +25 -33
- data/ext/asyncengine/libuv/src/unix/fs.o +0 -0
- data/ext/asyncengine/libuv/src/unix/internal.h +50 -31
- data/ext/asyncengine/libuv/src/unix/kqueue.c +2 -7
- data/ext/asyncengine/libuv/src/unix/linux/core.o +0 -0
- data/ext/asyncengine/libuv/src/unix/linux/inotify.c +12 -14
- data/ext/asyncengine/libuv/src/unix/linux/inotify.o +0 -0
- data/ext/asyncengine/libuv/src/unix/linux/{core.c → linux-core.c} +1 -1
- data/ext/asyncengine/libuv/src/unix/linux/linux-core.o +0 -0
- data/ext/asyncengine/libuv/src/unix/linux/syscalls.c +147 -1
- data/ext/asyncengine/libuv/src/unix/linux/syscalls.h +39 -2
- data/ext/asyncengine/libuv/src/unix/linux/syscalls.o +0 -0
- data/ext/asyncengine/libuv/src/unix/loop-watcher.c +63 -0
- data/ext/asyncengine/libuv/src/unix/loop-watcher.o +0 -0
- data/ext/asyncengine/libuv/src/unix/loop.c +29 -6
- data/ext/asyncengine/libuv/src/unix/loop.o +0 -0
- data/ext/asyncengine/libuv/src/unix/netbsd.c +1 -1
- data/ext/asyncengine/libuv/src/unix/openbsd.c +1 -1
- data/ext/asyncengine/libuv/src/unix/pipe.c +31 -36
- data/ext/asyncengine/libuv/src/unix/pipe.o +0 -0
- data/ext/asyncengine/libuv/src/unix/poll.c +116 -0
- data/ext/asyncengine/libuv/src/unix/poll.o +0 -0
- data/ext/asyncengine/libuv/src/unix/process.c +193 -115
- data/ext/asyncengine/libuv/src/unix/process.o +0 -0
- data/ext/asyncengine/libuv/src/unix/stream.c +146 -153
- data/ext/asyncengine/libuv/src/unix/stream.o +0 -0
- data/ext/asyncengine/libuv/src/unix/sunos.c +45 -36
- data/ext/asyncengine/libuv/src/unix/tcp.c +6 -5
- data/ext/asyncengine/libuv/src/unix/tcp.o +0 -0
- data/ext/asyncengine/libuv/src/unix/thread.c +82 -25
- data/ext/asyncengine/libuv/src/unix/thread.o +0 -0
- data/ext/asyncengine/libuv/src/unix/timer.c +69 -58
- data/ext/asyncengine/libuv/src/unix/timer.o +0 -0
- data/ext/asyncengine/libuv/src/unix/tty.c +3 -3
- data/ext/asyncengine/libuv/src/unix/tty.o +0 -0
- data/ext/asyncengine/libuv/src/unix/udp.c +57 -66
- data/ext/asyncengine/libuv/src/unix/udp.o +0 -0
- data/ext/asyncengine/libuv/src/unix/uv-eio.c +33 -50
- data/ext/asyncengine/libuv/src/unix/uv-eio.o +0 -0
- data/ext/asyncengine/libuv/src/uv-common.c +68 -38
- data/ext/asyncengine/libuv/src/uv-common.h +104 -20
- data/ext/asyncengine/libuv/src/uv-common.o +0 -0
- data/ext/asyncengine/libuv/src/win/async.c +20 -17
- data/ext/asyncengine/libuv/src/win/core.c +44 -31
- data/ext/asyncengine/libuv/src/win/dl.c +40 -36
- data/ext/asyncengine/libuv/src/win/error.c +21 -1
- data/ext/asyncengine/libuv/src/win/fs-event.c +19 -21
- data/ext/asyncengine/libuv/src/win/fs.c +541 -189
- data/ext/asyncengine/libuv/src/win/getaddrinfo.c +56 -63
- data/ext/asyncengine/libuv/src/win/handle-inl.h +145 -0
- data/ext/asyncengine/libuv/src/win/handle.c +26 -101
- data/ext/asyncengine/libuv/src/win/internal.h +92 -107
- data/ext/asyncengine/libuv/src/win/loop-watcher.c +6 -14
- data/ext/asyncengine/libuv/src/win/pipe.c +78 -64
- data/ext/asyncengine/libuv/src/win/poll.c +618 -0
- data/ext/asyncengine/libuv/src/win/process-stdio.c +479 -0
- data/ext/asyncengine/libuv/src/win/process.c +147 -274
- data/ext/asyncengine/libuv/src/win/req-inl.h +225 -0
- data/ext/asyncengine/libuv/src/win/req.c +0 -149
- data/ext/asyncengine/libuv/src/{unix/check.c → win/stream-inl.h} +31 -42
- data/ext/asyncengine/libuv/src/win/stream.c +9 -43
- data/ext/asyncengine/libuv/src/win/tcp.c +200 -82
- data/ext/asyncengine/libuv/src/win/thread.c +42 -2
- data/ext/asyncengine/libuv/src/win/threadpool.c +3 -2
- data/ext/asyncengine/libuv/src/win/timer.c +13 -63
- data/ext/asyncengine/libuv/src/win/tty.c +26 -20
- data/ext/asyncengine/libuv/src/win/udp.c +26 -17
- data/ext/asyncengine/libuv/src/win/util.c +312 -167
- data/ext/asyncengine/libuv/src/win/winapi.c +16 -1
- data/ext/asyncengine/libuv/src/win/winapi.h +33 -9
- data/ext/asyncengine/libuv/src/win/winsock.c +88 -1
- data/ext/asyncengine/libuv/src/win/winsock.h +36 -3
- data/ext/asyncengine/libuv/test/benchmark-ares.c +16 -17
- data/ext/asyncengine/libuv/test/benchmark-fs-stat.c +164 -0
- data/ext/asyncengine/libuv/test/benchmark-list.h +9 -0
- data/ext/asyncengine/libuv/{src/unix/prepare.c → test/benchmark-loop-count.c} +42 -33
- data/ext/asyncengine/libuv/test/benchmark-million-timers.c +65 -0
- data/ext/asyncengine/libuv/test/benchmark-pound.c +1 -1
- data/ext/asyncengine/libuv/test/benchmark-sizes.c +2 -0
- data/ext/asyncengine/libuv/test/benchmark-spawn.c +7 -1
- data/ext/asyncengine/libuv/test/benchmark-udp-packet-storm.c +1 -1
- data/ext/asyncengine/libuv/test/echo-server.c +8 -0
- data/ext/asyncengine/libuv/test/run-tests.c +30 -0
- data/ext/asyncengine/libuv/test/runner-unix.c +6 -26
- data/ext/asyncengine/libuv/test/runner-win.c +5 -63
- data/ext/asyncengine/libuv/test/runner.c +10 -1
- data/ext/asyncengine/libuv/test/task.h +0 -8
- data/ext/asyncengine/libuv/test/test-async.c +43 -141
- data/ext/asyncengine/libuv/test/test-callback-order.c +76 -0
- data/ext/asyncengine/libuv/test/test-counters-init.c +2 -3
- data/ext/asyncengine/libuv/test/test-dlerror.c +17 -8
- data/ext/asyncengine/libuv/test/test-fs-event.c +31 -39
- data/ext/asyncengine/libuv/test/test-fs-poll.c +146 -0
- data/ext/asyncengine/libuv/test/test-fs.c +114 -2
- data/ext/asyncengine/libuv/test/test-gethostbyname.c +8 -8
- data/ext/asyncengine/libuv/test/test-hrtime.c +18 -15
- data/ext/asyncengine/libuv/test/test-ipc.c +8 -2
- data/ext/asyncengine/libuv/test/test-list.h +59 -9
- data/ext/asyncengine/libuv/test/test-loop-handles.c +2 -25
- data/ext/asyncengine/libuv/{src/unix/idle.c → test/test-poll-close.c} +37 -39
- data/ext/asyncengine/libuv/test/test-poll.c +573 -0
- data/ext/asyncengine/libuv/test/test-ref.c +79 -63
- data/ext/asyncengine/libuv/test/test-run-once.c +15 -11
- data/ext/asyncengine/libuv/test/test-semaphore.c +111 -0
- data/ext/asyncengine/libuv/test/test-spawn.c +368 -20
- data/ext/asyncengine/libuv/test/test-stdio-over-pipes.c +25 -35
- data/ext/asyncengine/libuv/test/test-tcp-close-while-connecting.c +80 -0
- data/ext/asyncengine/libuv/test/test-tcp-close.c +1 -1
- data/ext/asyncengine/libuv/test/test-tcp-connect-error-after-write.c +95 -0
- data/ext/asyncengine/libuv/test/test-tcp-connect-timeout.c +85 -0
- data/ext/asyncengine/libuv/test/test-tcp-shutdown-after-write.c +131 -0
- data/ext/asyncengine/libuv/test/test-tcp-write-error.c +2 -2
- data/ext/asyncengine/libuv/test/test-tcp-writealot.c +29 -54
- data/ext/asyncengine/libuv/test/test-timer-again.c +1 -1
- data/ext/asyncengine/libuv/test/test-timer.c +23 -1
- data/ext/asyncengine/libuv/test/test-udp-options.c +1 -1
- data/ext/asyncengine/libuv/test/{test-eio-overflow.c → test-walk-handles.c} +31 -44
- data/ext/asyncengine/libuv/uv.gyp +26 -9
- data/ext/asyncengine/rb_utilities.c +54 -0
- data/ext/asyncengine/rb_utilities.h +63 -0
- data/lib/asyncengine.rb +45 -38
- data/lib/asyncengine/asyncengine_ext.so +0 -0
- data/lib/asyncengine/debug.rb +37 -0
- data/lib/asyncengine/handle.rb +9 -0
- data/lib/asyncengine/tcp.rb +28 -0
- data/lib/asyncengine/timer.rb +18 -28
- data/lib/asyncengine/udp.rb +29 -0
- data/lib/asyncengine/utils.rb +32 -0
- data/lib/asyncengine/uv_error.rb +17 -0
- data/lib/asyncengine/version.rb +9 -1
- data/test/ae_test_helper.rb +62 -0
- data/test/test_basic.rb +169 -0
- data/test/test_call_from_other_thread.rb +55 -0
- data/test/test_error.rb +92 -0
- data/test/test_ip_utils.rb +44 -0
- data/test/test_next_tick.rb +37 -0
- data/test/test_resolver.rb +51 -0
- data/test/test_threads.rb +69 -0
- data/test/test_timer.rb +95 -0
- data/test/test_udp.rb +216 -0
- data/test/test_utils.rb +49 -0
- metadata +84 -57
- data/ext/asyncengine/libuv/mkmf.log +0 -24
- data/ext/asyncengine/libuv/src/unix/cares.c +0 -194
- data/ext/asyncengine/libuv/src/unix/cares.o +0 -0
- data/ext/asyncengine/libuv/src/unix/check.o +0 -0
- data/ext/asyncengine/libuv/src/unix/idle.o +0 -0
- data/ext/asyncengine/libuv/src/unix/prepare.o +0 -0
- data/ext/asyncengine/libuv/src/win/cares.c +0 -290
- data/lib/asyncengine/errors.rb +0 -5
- data/lib/asyncengine/next_tick.rb +0 -24
@@ -19,10 +19,12 @@
|
|
19
19
|
* IN THE SOFTWARE.
|
20
20
|
*/
|
21
21
|
|
22
|
+
#include <assert.h>
|
23
|
+
#include <limits.h>
|
24
|
+
|
22
25
|
#include "uv.h"
|
23
|
-
#include "../uv-common.h"
|
24
26
|
#include "internal.h"
|
25
|
-
|
27
|
+
|
26
28
|
|
27
29
|
#define HAVE_SRWLOCK_API() (pTryAcquireSRWLockShared != NULL)
|
28
30
|
|
@@ -206,6 +208,44 @@ void uv_rwlock_wrunlock(uv_rwlock_t* rwlock) {
|
|
206
208
|
}
|
207
209
|
|
208
210
|
|
211
|
+
int uv_sem_init(uv_sem_t* sem, unsigned int value) {
|
212
|
+
*sem = CreateSemaphore(NULL, value, INT_MAX, NULL);
|
213
|
+
return *sem ? 0 : -1;
|
214
|
+
}
|
215
|
+
|
216
|
+
|
217
|
+
void uv_sem_destroy(uv_sem_t* sem) {
|
218
|
+
if (!CloseHandle(*sem))
|
219
|
+
abort();
|
220
|
+
}
|
221
|
+
|
222
|
+
|
223
|
+
void uv_sem_post(uv_sem_t* sem) {
|
224
|
+
if (!ReleaseSemaphore(*sem, 1, NULL))
|
225
|
+
abort();
|
226
|
+
}
|
227
|
+
|
228
|
+
|
229
|
+
void uv_sem_wait(uv_sem_t* sem) {
|
230
|
+
if (WaitForSingleObject(*sem, INFINITE) != WAIT_OBJECT_0)
|
231
|
+
abort();
|
232
|
+
}
|
233
|
+
|
234
|
+
|
235
|
+
int uv_sem_trywait(uv_sem_t* sem) {
|
236
|
+
DWORD r = WaitForSingleObject(*sem, 0);
|
237
|
+
|
238
|
+
if (r == WAIT_OBJECT_0)
|
239
|
+
return 0;
|
240
|
+
|
241
|
+
if (r == WAIT_TIMEOUT)
|
242
|
+
return -1;
|
243
|
+
|
244
|
+
abort();
|
245
|
+
return -1; /* Satisfy the compiler. */
|
246
|
+
}
|
247
|
+
|
248
|
+
|
209
249
|
inline static int uv__rwlock_srwlock_init(uv_rwlock_t* rwlock) {
|
210
250
|
pInitializeSRWLock(&rwlock->srwlock_);
|
211
251
|
return 0;
|
@@ -23,6 +23,7 @@
|
|
23
23
|
|
24
24
|
#include "uv.h"
|
25
25
|
#include "internal.h"
|
26
|
+
#include "req-inl.h"
|
26
27
|
|
27
28
|
|
28
29
|
static void uv_work_req_init(uv_loop_t* loop, uv_work_t* req,
|
@@ -61,13 +62,13 @@ int uv_queue_work(uv_loop_t* loop, uv_work_t* req, uv_work_cb work_cb,
|
|
61
62
|
return -1;
|
62
63
|
}
|
63
64
|
|
64
|
-
|
65
|
+
uv__req_register(loop, req);
|
65
66
|
return 0;
|
66
67
|
}
|
67
68
|
|
68
69
|
|
69
70
|
void uv_process_work_req(uv_loop_t* loop, uv_work_t* req) {
|
70
71
|
assert(req->after_work_cb);
|
72
|
+
uv__req_unregister(loop, req);
|
71
73
|
req->after_work_cb(req);
|
72
|
-
uv_unref(loop);
|
73
74
|
}
|
@@ -25,15 +25,7 @@
|
|
25
25
|
#include "uv.h"
|
26
26
|
#include "internal.h"
|
27
27
|
#include "tree.h"
|
28
|
-
|
29
|
-
#undef NANOSEC
|
30
|
-
#define NANOSEC 1000000000
|
31
|
-
|
32
|
-
|
33
|
-
/* The resolution of the high-resolution clock. */
|
34
|
-
static int64_t uv_ticks_per_msec_ = 0;
|
35
|
-
static uint64_t uv_hrtime_frequency_ = 0;
|
36
|
-
static uv_once_t uv_hrtime_init_guard_ = UV_ONCE_INIT;
|
28
|
+
#include "handle-inl.h"
|
37
29
|
|
38
30
|
|
39
31
|
void uv_update_time(uv_loop_t* loop) {
|
@@ -58,43 +50,6 @@ int64_t uv_now(uv_loop_t* loop) {
|
|
58
50
|
}
|
59
51
|
|
60
52
|
|
61
|
-
static void uv_hrtime_init(void) {
|
62
|
-
LARGE_INTEGER frequency;
|
63
|
-
|
64
|
-
if (!QueryPerformanceFrequency(&frequency)) {
|
65
|
-
uv_hrtime_frequency_ = 0;
|
66
|
-
return;
|
67
|
-
}
|
68
|
-
|
69
|
-
uv_hrtime_frequency_ = frequency.QuadPart;
|
70
|
-
}
|
71
|
-
|
72
|
-
|
73
|
-
uint64_t uv_hrtime(void) {
|
74
|
-
LARGE_INTEGER counter;
|
75
|
-
|
76
|
-
uv_once(&uv_hrtime_init_guard_, uv_hrtime_init);
|
77
|
-
|
78
|
-
/* If the performance frequency is zero, there's no support. */
|
79
|
-
if (!uv_hrtime_frequency_) {
|
80
|
-
/* uv__set_sys_error(loop, ERROR_NOT_SUPPORTED); */
|
81
|
-
return 0;
|
82
|
-
}
|
83
|
-
|
84
|
-
if (!QueryPerformanceCounter(&counter)) {
|
85
|
-
/* uv__set_sys_error(loop, GetLastError()); */
|
86
|
-
return 0;
|
87
|
-
}
|
88
|
-
|
89
|
-
/* Because we have no guarantee about the order of magnitude of the */
|
90
|
-
/* performance counter frequency, and there may not be much headroom to */
|
91
|
-
/* multiply by NANOSEC without overflowing, we use 128-bit math instead. */
|
92
|
-
return ((uint64_t) counter.LowPart * NANOSEC / uv_hrtime_frequency_) +
|
93
|
-
(((uint64_t) counter.HighPart * NANOSEC / uv_hrtime_frequency_)
|
94
|
-
<< 32);
|
95
|
-
}
|
96
|
-
|
97
|
-
|
98
53
|
static int uv_timer_compare(uv_timer_t* a, uv_timer_t* b) {
|
99
54
|
if (a->due < b->due)
|
100
55
|
return -1;
|
@@ -112,16 +67,11 @@ RB_GENERATE_STATIC(uv_timer_tree_s, uv_timer_s, tree_entry, uv_timer_compare);
|
|
112
67
|
|
113
68
|
|
114
69
|
int uv_timer_init(uv_loop_t* loop, uv_timer_t* handle) {
|
115
|
-
loop
|
116
|
-
loop->counters.timer_init++;
|
117
|
-
|
118
|
-
handle->type = UV_TIMER;
|
119
|
-
handle->loop = loop;
|
120
|
-
handle->flags = 0;
|
70
|
+
uv__handle_init(loop, (uv_handle_t*) handle, UV_TIMER);
|
121
71
|
handle->timer_cb = NULL;
|
122
72
|
handle->repeat = 0;
|
123
73
|
|
124
|
-
|
74
|
+
loop->counters.timer_init++;
|
125
75
|
|
126
76
|
return 0;
|
127
77
|
}
|
@@ -130,13 +80,8 @@ int uv_timer_init(uv_loop_t* loop, uv_timer_t* handle) {
|
|
130
80
|
void uv_timer_endgame(uv_loop_t* loop, uv_timer_t* handle) {
|
131
81
|
if (handle->flags & UV_HANDLE_CLOSING) {
|
132
82
|
assert(!(handle->flags & UV_HANDLE_CLOSED));
|
133
|
-
handle
|
134
|
-
|
135
|
-
if (handle->close_cb) {
|
136
|
-
handle->close_cb((uv_handle_t*)handle);
|
137
|
-
}
|
138
|
-
|
139
|
-
uv_unref(loop);
|
83
|
+
uv__handle_stop(handle);
|
84
|
+
uv__handle_close(handle);
|
140
85
|
}
|
141
86
|
}
|
142
87
|
|
@@ -144,6 +89,7 @@ void uv_timer_endgame(uv_loop_t* loop, uv_timer_t* handle) {
|
|
144
89
|
int uv_timer_start(uv_timer_t* handle, uv_timer_cb timer_cb, int64_t timeout,
|
145
90
|
int64_t repeat) {
|
146
91
|
uv_loop_t* loop = handle->loop;
|
92
|
+
uv_timer_t* old;
|
147
93
|
|
148
94
|
if (handle->flags & UV_HANDLE_ACTIVE) {
|
149
95
|
RB_REMOVE(uv_timer_tree_s, &loop->timers, handle);
|
@@ -153,10 +99,10 @@ int uv_timer_start(uv_timer_t* handle, uv_timer_cb timer_cb, int64_t timeout,
|
|
153
99
|
handle->due = loop->time + timeout;
|
154
100
|
handle->repeat = repeat;
|
155
101
|
handle->flags |= UV_HANDLE_ACTIVE;
|
102
|
+
uv__handle_start(handle);
|
156
103
|
|
157
|
-
|
158
|
-
|
159
|
-
}
|
104
|
+
old = RB_INSERT(uv_timer_tree_s, &loop->timers, handle);
|
105
|
+
assert(old == NULL);
|
160
106
|
|
161
107
|
return 0;
|
162
108
|
}
|
@@ -171,6 +117,7 @@ int uv_timer_stop(uv_timer_t* handle) {
|
|
171
117
|
RB_REMOVE(uv_timer_tree_s, &loop->timers, handle);
|
172
118
|
|
173
119
|
handle->flags &= ~UV_HANDLE_ACTIVE;
|
120
|
+
uv__handle_stop(handle);
|
174
121
|
|
175
122
|
return 0;
|
176
123
|
}
|
@@ -188,6 +135,7 @@ int uv_timer_again(uv_timer_t* handle) {
|
|
188
135
|
if (handle->flags & UV_HANDLE_ACTIVE) {
|
189
136
|
RB_REMOVE(uv_timer_tree_s, &loop->timers, handle);
|
190
137
|
handle->flags &= ~UV_HANDLE_ACTIVE;
|
138
|
+
uv__handle_stop(handle);
|
191
139
|
}
|
192
140
|
|
193
141
|
if (handle->repeat) {
|
@@ -198,6 +146,7 @@ int uv_timer_again(uv_timer_t* handle) {
|
|
198
146
|
}
|
199
147
|
|
200
148
|
handle->flags |= UV_HANDLE_ACTIVE;
|
149
|
+
uv__handle_start(handle);
|
201
150
|
}
|
202
151
|
|
203
152
|
return 0;
|
@@ -269,6 +218,7 @@ void uv_process_timers(uv_loop_t* loop) {
|
|
269
218
|
} else {
|
270
219
|
/* If non-repeating, mark the timer as inactive. */
|
271
220
|
timer->flags &= ~UV_HANDLE_ACTIVE;
|
221
|
+
uv__handle_stop(timer);
|
272
222
|
}
|
273
223
|
|
274
224
|
timer->timer_cb((uv_timer_t*) timer, 0);
|
@@ -25,8 +25,10 @@
|
|
25
25
|
#include <stdint.h>
|
26
26
|
|
27
27
|
#include "uv.h"
|
28
|
-
#include "../uv-common.h"
|
29
28
|
#include "internal.h"
|
29
|
+
#include "handle-inl.h"
|
30
|
+
#include "stream-inl.h"
|
31
|
+
#include "req-inl.h"
|
30
32
|
|
31
33
|
|
32
34
|
#define UNICODE_REPLACEMENT_CHARACTER (0xfffd)
|
@@ -110,10 +112,9 @@ int uv_tty_init(uv_loop_t* loop, uv_tty_t* tty, uv_file fd, int readable) {
|
|
110
112
|
LeaveCriticalSection(&uv_tty_output_lock);
|
111
113
|
}
|
112
114
|
|
113
|
-
uv_stream_init(loop, (uv_stream_t*) tty);
|
115
|
+
uv_stream_init(loop, (uv_stream_t*) tty, UV_TTY);
|
114
116
|
uv_connection_init((uv_stream_t*) tty);
|
115
117
|
|
116
|
-
tty->type = UV_TTY;
|
117
118
|
tty->handle = win_handle;
|
118
119
|
tty->read_line_handle = NULL;
|
119
120
|
tty->read_line_buffer = uv_null_buf_;
|
@@ -462,8 +463,9 @@ void uv_process_tty_read_raw_req(uv_loop_t* loop, uv_tty_t* handle,
|
|
462
463
|
|
463
464
|
/* Fetch the number of events */
|
464
465
|
if (!GetNumberOfConsoleInputEvents(handle->handle, &records_left)) {
|
465
|
-
handle->flags &= ~UV_HANDLE_READING;
|
466
466
|
uv__set_sys_error(loop, GetLastError());
|
467
|
+
handle->flags &= ~UV_HANDLE_READING;
|
468
|
+
DECREASE_ACTIVE_COUNT(loop, handle);
|
467
469
|
handle->read_cb((uv_stream_t*)handle, -1, uv_null_buf_);
|
468
470
|
goto out;
|
469
471
|
}
|
@@ -483,6 +485,7 @@ void uv_process_tty_read_raw_req(uv_loop_t* loop, uv_tty_t* handle,
|
|
483
485
|
&records_read)) {
|
484
486
|
uv__set_sys_error(loop, GetLastError());
|
485
487
|
handle->flags &= ~UV_HANDLE_READING;
|
488
|
+
DECREASE_ACTIVE_COUNT(loop, handle);
|
486
489
|
handle->read_cb((uv_stream_t*) handle, -1, buf);
|
487
490
|
goto out;
|
488
491
|
}
|
@@ -583,6 +586,7 @@ void uv_process_tty_read_raw_req(uv_loop_t* loop, uv_tty_t* handle,
|
|
583
586
|
if (!char_len) {
|
584
587
|
uv__set_sys_error(loop, GetLastError());
|
585
588
|
handle->flags &= ~UV_HANDLE_READING;
|
589
|
+
DECREASE_ACTIVE_COUNT(loop, handle);
|
586
590
|
handle->read_cb((uv_stream_t*) handle, -1, buf);
|
587
591
|
goto out;
|
588
592
|
}
|
@@ -688,9 +692,10 @@ void uv_process_tty_read_line_req(uv_loop_t* loop, uv_tty_t* handle,
|
|
688
692
|
if (!REQ_SUCCESS(req)) {
|
689
693
|
/* Read was not successful */
|
690
694
|
if ((handle->flags & UV_HANDLE_READING) &&
|
691
|
-
|
695
|
+
handle->read_line_handle != NULL) {
|
692
696
|
/* Real error */
|
693
697
|
handle->flags &= ~UV_HANDLE_READING;
|
698
|
+
DECREASE_ACTIVE_COUNT(loop, handle);
|
694
699
|
uv__set_sys_error(loop, GET_REQ_ERROR(req));
|
695
700
|
handle->read_cb((uv_stream_t*) handle, -1, buf);
|
696
701
|
} else {
|
@@ -738,6 +743,7 @@ int uv_tty_read_start(uv_tty_t* handle, uv_alloc_cb alloc_cb,
|
|
738
743
|
uv_loop_t* loop = handle->loop;
|
739
744
|
|
740
745
|
handle->flags |= UV_HANDLE_READING;
|
746
|
+
INCREASE_ACTIVE_COUNT(loop, handle);
|
741
747
|
handle->read_cb = read_cb;
|
742
748
|
handle->alloc_cb = alloc_cb;
|
743
749
|
|
@@ -762,7 +768,12 @@ int uv_tty_read_start(uv_tty_t* handle, uv_alloc_cb alloc_cb,
|
|
762
768
|
|
763
769
|
|
764
770
|
int uv_tty_read_stop(uv_tty_t* handle) {
|
765
|
-
handle->
|
771
|
+
uv_loop_t* loop = handle->loop;
|
772
|
+
|
773
|
+
if (handle->flags & UV_HANDLE_READING) {
|
774
|
+
handle->flags &= ~UV_HANDLE_READING;
|
775
|
+
DECREASE_ACTIVE_COUNT(loop, handle);
|
776
|
+
}
|
766
777
|
|
767
778
|
/* Cancel raw read */
|
768
779
|
if ((handle->flags & UV_HANDLE_READ_PENDING) &&
|
@@ -772,7 +783,7 @@ int uv_tty_read_stop(uv_tty_t* handle) {
|
|
772
783
|
DWORD written;
|
773
784
|
memset(&record, 0, sizeof record);
|
774
785
|
if (!WriteConsoleInputW(handle->handle, &record, 1, &written)) {
|
775
|
-
uv__set_sys_error(
|
786
|
+
uv__set_sys_error(loop, GetLastError());
|
776
787
|
return -1;
|
777
788
|
}
|
778
789
|
}
|
@@ -960,9 +971,6 @@ static int uv_tty_reset(uv_tty_t* handle, DWORD* error) {
|
|
960
971
|
|
961
972
|
static int uv_tty_clear(uv_tty_t* handle, int dir, char entire_screen,
|
962
973
|
DWORD* error) {
|
963
|
-
unsigned short argc = handle->ansi_csi_argc;
|
964
|
-
unsigned short* argv = handle->ansi_csi_argv;
|
965
|
-
|
966
974
|
CONSOLE_SCREEN_BUFFER_INFO info;
|
967
975
|
COORD start, end;
|
968
976
|
DWORD count, written;
|
@@ -1683,7 +1691,7 @@ int uv_tty_write(uv_loop_t* loop, uv_write_t* req, uv_tty_t* handle,
|
|
1683
1691
|
|
1684
1692
|
handle->reqs_pending++;
|
1685
1693
|
handle->write_reqs_pending++;
|
1686
|
-
|
1694
|
+
REGISTER_HANDLE_REQ(loop, handle, req);
|
1687
1695
|
|
1688
1696
|
req->queued_bytes = 0;
|
1689
1697
|
|
@@ -1703,6 +1711,7 @@ void uv_process_tty_write_req(uv_loop_t* loop, uv_tty_t* handle,
|
|
1703
1711
|
uv_write_t* req) {
|
1704
1712
|
|
1705
1713
|
handle->write_queue_size -= req->queued_bytes;
|
1714
|
+
UNREGISTER_HANDLE_REQ(loop, handle, req);
|
1706
1715
|
|
1707
1716
|
if (req->cb) {
|
1708
1717
|
uv__set_sys_error(loop, GET_REQ_ERROR(req));
|
@@ -1716,7 +1725,6 @@ void uv_process_tty_write_req(uv_loop_t* loop, uv_tty_t* handle,
|
|
1716
1725
|
}
|
1717
1726
|
|
1718
1727
|
DECREASE_PENDING_REQ_COUNT(handle);
|
1719
|
-
uv_unref(loop);
|
1720
1728
|
}
|
1721
1729
|
|
1722
1730
|
|
@@ -1726,6 +1734,8 @@ void uv_tty_close(uv_tty_t* handle) {
|
|
1726
1734
|
uv_tty_read_stop(handle);
|
1727
1735
|
CloseHandle(handle->handle);
|
1728
1736
|
|
1737
|
+
uv__handle_start(handle);
|
1738
|
+
|
1729
1739
|
if (handle->reqs_pending == 0) {
|
1730
1740
|
uv_want_endgame(handle->loop, (uv_handle_t*) handle);
|
1731
1741
|
}
|
@@ -1736,6 +1746,8 @@ void uv_tty_endgame(uv_loop_t* loop, uv_tty_t* handle) {
|
|
1736
1746
|
if ((handle->flags && UV_HANDLE_CONNECTION) &&
|
1737
1747
|
handle->shutdown_req != NULL &&
|
1738
1748
|
handle->write_reqs_pending == 0) {
|
1749
|
+
UNREGISTER_HANDLE_REQ(loop, handle, handle->shutdown_req);
|
1750
|
+
|
1739
1751
|
/* TTY shutdown is really just a no-op */
|
1740
1752
|
if (handle->shutdown_req->cb) {
|
1741
1753
|
if (handle->flags & UV_HANDLE_CLOSING) {
|
@@ -1748,7 +1760,6 @@ void uv_tty_endgame(uv_loop_t* loop, uv_tty_t* handle) {
|
|
1748
1760
|
|
1749
1761
|
handle->shutdown_req = NULL;
|
1750
1762
|
|
1751
|
-
uv_unref(loop);
|
1752
1763
|
DECREASE_PENDING_REQ_COUNT(handle);
|
1753
1764
|
return;
|
1754
1765
|
}
|
@@ -1764,13 +1775,8 @@ void uv_tty_endgame(uv_loop_t* loop, uv_tty_t* handle) {
|
|
1764
1775
|
assert(handle->read_raw_wait == NULL);
|
1765
1776
|
|
1766
1777
|
assert(!(handle->flags & UV_HANDLE_CLOSED));
|
1767
|
-
handle
|
1768
|
-
|
1769
|
-
if (handle->close_cb) {
|
1770
|
-
handle->close_cb((uv_handle_t*)handle);
|
1771
|
-
}
|
1772
|
-
|
1773
|
-
uv_unref(loop);
|
1778
|
+
uv__handle_stop(handle);
|
1779
|
+
uv__handle_close(handle);
|
1774
1780
|
}
|
1775
1781
|
}
|
1776
1782
|
|
@@ -22,8 +22,10 @@
|
|
22
22
|
#include <assert.h>
|
23
23
|
|
24
24
|
#include "uv.h"
|
25
|
-
#include "../uv-common.h"
|
26
25
|
#include "internal.h"
|
26
|
+
#include "handle-inl.h"
|
27
|
+
#include "stream-inl.h"
|
28
|
+
#include "req-inl.h"
|
27
29
|
|
28
30
|
|
29
31
|
/*
|
@@ -121,11 +123,11 @@ static int uv_udp_set_socket(uv_loop_t* loop, uv_udp_t* handle,
|
|
121
123
|
|
122
124
|
|
123
125
|
int uv_udp_init(uv_loop_t* loop, uv_udp_t* handle) {
|
124
|
-
handle
|
126
|
+
uv__handle_init(loop, (uv_handle_t*) handle, UV_UDP);
|
127
|
+
|
125
128
|
handle->socket = INVALID_SOCKET;
|
126
129
|
handle->reqs_pending = 0;
|
127
|
-
handle->
|
128
|
-
handle->flags = 0;
|
130
|
+
handle->activecnt = 0;
|
129
131
|
handle->func_wsarecv = WSARecv;
|
130
132
|
handle->func_wsarecvfrom = WSARecvFrom;
|
131
133
|
|
@@ -133,26 +135,30 @@ int uv_udp_init(uv_loop_t* loop, uv_udp_t* handle) {
|
|
133
135
|
handle->recv_req.type = UV_UDP_RECV;
|
134
136
|
handle->recv_req.data = handle;
|
135
137
|
|
136
|
-
uv_ref(loop);
|
137
|
-
|
138
|
-
loop->counters.handle_init++;
|
139
138
|
loop->counters.udp_init++;
|
140
139
|
|
141
140
|
return 0;
|
142
141
|
}
|
143
142
|
|
144
143
|
|
144
|
+
void uv_udp_close(uv_loop_t* loop, uv_udp_t* handle) {
|
145
|
+
uv_udp_recv_stop(handle);
|
146
|
+
closesocket(handle->socket);
|
147
|
+
|
148
|
+
uv__handle_start(handle);
|
149
|
+
|
150
|
+
if (handle->reqs_pending == 0) {
|
151
|
+
uv_want_endgame(loop, (uv_handle_t*) handle);
|
152
|
+
}
|
153
|
+
}
|
154
|
+
|
155
|
+
|
145
156
|
void uv_udp_endgame(uv_loop_t* loop, uv_udp_t* handle) {
|
146
157
|
if (handle->flags & UV_HANDLE_CLOSING &&
|
147
158
|
handle->reqs_pending == 0) {
|
148
159
|
assert(!(handle->flags & UV_HANDLE_CLOSED));
|
149
|
-
handle
|
150
|
-
|
151
|
-
if (handle->close_cb) {
|
152
|
-
handle->close_cb((uv_handle_t*)handle);
|
153
|
-
}
|
154
|
-
|
155
|
-
uv_unref(loop);
|
160
|
+
uv__handle_stop(handle);
|
161
|
+
uv__handle_close(handle);
|
156
162
|
}
|
157
163
|
}
|
158
164
|
|
@@ -350,6 +356,7 @@ int uv_udp_recv_start(uv_udp_t* handle, uv_alloc_cb alloc_cb,
|
|
350
356
|
}
|
351
357
|
|
352
358
|
handle->flags |= UV_HANDLE_READING;
|
359
|
+
INCREASE_ACTIVE_COUNT(loop, handle);
|
353
360
|
loop->active_udp_streams++;
|
354
361
|
|
355
362
|
handle->recv_cb = recv_cb;
|
@@ -368,6 +375,7 @@ int uv_udp_recv_stop(uv_udp_t* handle) {
|
|
368
375
|
if (handle->flags & UV_HANDLE_READING) {
|
369
376
|
handle->flags &= ~UV_HANDLE_READING;
|
370
377
|
handle->loop->active_udp_streams--;
|
378
|
+
DECREASE_ACTIVE_COUNT(loop, handle);
|
371
379
|
}
|
372
380
|
|
373
381
|
return 0;
|
@@ -399,13 +407,13 @@ static int uv__udp_send(uv_udp_send_t* req, uv_udp_t* handle, uv_buf_t bufs[],
|
|
399
407
|
/* Request completed immediately. */
|
400
408
|
req->queued_bytes = 0;
|
401
409
|
handle->reqs_pending++;
|
402
|
-
|
410
|
+
REGISTER_HANDLE_REQ(loop, handle, req);
|
403
411
|
uv_insert_pending_req(loop, (uv_req_t*)req);
|
404
412
|
} else if (UV_SUCCEEDED_WITH_IOCP(result == 0)) {
|
405
413
|
/* Request queued by the kernel. */
|
406
414
|
req->queued_bytes = uv_count_bufs(bufs, bufcnt);
|
407
415
|
handle->reqs_pending++;
|
408
|
-
|
416
|
+
REGISTER_HANDLE_REQ(loop, handle, req);
|
409
417
|
} else {
|
410
418
|
/* Send failed due to an error. */
|
411
419
|
uv__set_sys_error(loop, WSAGetLastError());
|
@@ -561,6 +569,8 @@ void uv_process_udp_send_req(uv_loop_t* loop, uv_udp_t* handle,
|
|
561
569
|
uv_udp_send_t* req) {
|
562
570
|
assert(handle->type == UV_UDP);
|
563
571
|
|
572
|
+
UNREGISTER_HANDLE_REQ(loop, handle, req);
|
573
|
+
|
564
574
|
if (req->cb) {
|
565
575
|
if (REQ_SUCCESS(req)) {
|
566
576
|
req->cb(req, 0);
|
@@ -570,7 +580,6 @@ void uv_process_udp_send_req(uv_loop_t* loop, uv_udp_t* handle,
|
|
570
580
|
}
|
571
581
|
}
|
572
582
|
|
573
|
-
uv_unref(loop);
|
574
583
|
DECREASE_PENDING_REQ_COUNT(handle);
|
575
584
|
}
|
576
585
|
|