noderb 0.0.2
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/LICENSE +19 -0
- data/README.md +25 -0
- data/ext/noderb_extension/extconf.rb +11 -0
- data/ext/noderb_extension/libuv/AUTHORS +11 -0
- data/ext/noderb_extension/libuv/LICENSE +48 -0
- data/ext/noderb_extension/libuv/Makefile +119 -0
- data/ext/noderb_extension/libuv/README +45 -0
- data/ext/noderb_extension/libuv/build/all.gyp +254 -0
- data/ext/noderb_extension/libuv/build/common.gypi +13 -0
- data/ext/noderb_extension/libuv/build/gyp_uv +43 -0
- data/ext/noderb_extension/libuv/config-mingw.mk +67 -0
- data/ext/noderb_extension/libuv/config-unix.mk +121 -0
- data/ext/noderb_extension/libuv/create-msvs-files.bat +14 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/ANNOUNCE +482 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/BUGS +141 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/Bmakefile +268 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/CONTRIBUTORS +140 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/COPYING +150 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/COPYING.LIB +504 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/ChangeLog +5194 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/FAQ +451 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/GNUmakefile +593 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/MAINTAINERS +4 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/Makefile +516 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/NEWS +1245 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/Nmakefile +24 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/Nmakefile.tests +260 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/PROGRESS +4 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/README +601 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/README.Borland +57 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/README.CV +3036 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/README.NONPORTABLE +783 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/README.Watcom +62 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/README.WinCE +6 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/TODO +7 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/WinCE-PORT +222 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/attr.c +53 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/autostatic.c +69 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/barrier.c +47 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/build/all.gyp +207 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/builddmc.bat +9 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/cancel.c +44 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/cleanup.c +148 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/condvar.c +50 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/config.h +153 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/context.h +74 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/create.c +308 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/dll.c +92 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/errno.c +94 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/exit.c +44 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/fork.c +39 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/global.c +107 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/implement.h +944 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/misc.c +50 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/mutex.c +62 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/need_errno.h +145 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/nonportable.c +47 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/private.c +54 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread.c +66 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread.dsp +142 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread.dsw +29 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread.h +1368 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_destroy.c +79 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_getdetachstate.c +86 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_getinheritsched.c +51 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_getschedparam.c +52 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_getschedpolicy.c +61 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_getscope.c +54 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_getstackaddr.c +97 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_getstacksize.c +100 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_init.c +117 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_setdetachstate.c +91 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_setinheritsched.c +57 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_setschedparam.c +63 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_setschedpolicy.c +55 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_setscope.c +62 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_setstackaddr.c +97 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_setstacksize.c +110 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_barrier_destroy.c +103 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_barrier_init.c +69 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_barrier_wait.c +104 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_barrierattr_destroy.c +83 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_barrierattr_getpshared.c +95 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_barrierattr_init.c +85 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_barrierattr_setpshared.c +119 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_cancel.c +189 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_cond_destroy.c +253 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_cond_init.c +167 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_cond_signal.c +231 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_cond_wait.c +567 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_condattr_destroy.c +86 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_condattr_getpshared.c +97 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_condattr_init.c +87 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_condattr_setpshared.c +117 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_delay_np.c +172 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_detach.c +136 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_equal.c +76 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_exit.c +106 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_getconcurrency.c +45 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_getschedparam.c +75 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_getspecific.c +87 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_getunique_np.c +47 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_getw32threadhandle_np.c +65 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_join.c +157 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_key_create.c +108 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_key_delete.c +125 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_kill.c +105 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutex_consistent.c +187 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutex_destroy.c +148 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutex_init.c +130 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutex_lock.c +269 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutex_timedlock.c +324 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutex_trylock.c +154 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutex_unlock.c +175 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_destroy.c +83 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_getkind_np.c +44 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_getpshared.c +95 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_getrobust.c +113 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_gettype.c +56 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_init.c +86 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_setkind_np.c +44 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_setpshared.c +119 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_setrobust.c +119 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_settype.c +143 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_num_processors_np.c +56 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_once.c +79 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlock_destroy.c +143 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlock_init.c +109 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlock_rdlock.c +102 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlock_timedrdlock.c +109 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlock_timedwrlock.c +139 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlock_tryrdlock.c +102 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlock_trywrlock.c +122 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlock_unlock.c +93 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlock_wrlock.c +133 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlockattr_destroy.c +84 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlockattr_getpshared.c +97 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlockattr_init.c +83 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlockattr_setpshared.c +120 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_self.c +141 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_setcancelstate.c +125 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_setcanceltype.c +126 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_setconcurrency.c +53 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_setschedparam.c +123 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_setspecific.c +167 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_spin_destroy.c +111 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_spin_init.c +123 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_spin_lock.c +80 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_spin_trylock.c +77 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_spin_unlock.c +71 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_testcancel.c +103 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_timechange_handler_np.c +108 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_win32_attach_detach_np.c +258 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_MCS_lock.c +278 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_callUserDestroyRoutines.c +232 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_calloc.c +56 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_cond_check_need_init.c +78 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_getprocessors.c +91 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_is_attr.c +47 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_mutex_check_need_init.c +92 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_new.c +94 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_processInitialize.c +92 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_processTerminate.c +105 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_relmillisecs.c +132 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_reuse.c +151 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_rwlock_cancelwrwait.c +50 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_rwlock_check_need_init.c +77 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_semwait.c +135 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_spinlock_check_need_init.c +78 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_threadDestroy.c +79 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_threadStart.c +357 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_throw.c +189 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_timespec.c +83 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_tkAssocCreate.c +118 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_tkAssocDestroy.c +114 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/rwlock.c +51 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/sched.c +53 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/sched.h +183 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/sched_get_priority_max.c +134 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/sched_get_priority_min.c +135 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/sched_getscheduler.c +71 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/sched_setscheduler.c +83 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/sched_yield.c +71 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/sem_close.c +58 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/sem_destroy.c +144 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/sem_getvalue.c +110 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/sem_init.c +169 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/sem_open.c +58 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/sem_post.c +128 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/sem_post_multiple.c +142 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/sem_timedwait.c +238 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/sem_trywait.c +117 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/sem_unlink.c +58 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/sem_wait.c +187 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/semaphore.c +69 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/semaphore.h +169 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/signal.c +179 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/spin.c +46 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/sync.c +43 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/tsd.c +44 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/version.rc +388 -0
- data/ext/noderb_extension/libuv/deps/pthread-win32/w32_CancelableWait.c +161 -0
- data/ext/noderb_extension/libuv/doc/desired-api.md +159 -0
- data/ext/noderb_extension/libuv/doc/iocp-links.html +574 -0
- data/ext/noderb_extension/libuv/include/ares.h +582 -0
- data/ext/noderb_extension/libuv/include/ares_version.h +24 -0
- data/ext/noderb_extension/libuv/include/eio.h +376 -0
- data/ext/noderb_extension/libuv/include/ev.h +835 -0
- data/ext/noderb_extension/libuv/include/ngx-queue.h +102 -0
- data/ext/noderb_extension/libuv/include/tree.h +762 -0
- data/ext/noderb_extension/libuv/include/uv-unix.h +138 -0
- data/ext/noderb_extension/libuv/include/uv-win.h +187 -0
- data/ext/noderb_extension/libuv/include/uv.h +635 -0
- data/ext/noderb_extension/libuv/src/ares/AUTHORS +37 -0
- data/ext/noderb_extension/libuv/src/ares/CHANGES +1198 -0
- data/ext/noderb_extension/libuv/src/ares/CMakeLists.txt +22 -0
- data/ext/noderb_extension/libuv/src/ares/NEWS +21 -0
- data/ext/noderb_extension/libuv/src/ares/README +60 -0
- data/ext/noderb_extension/libuv/src/ares/README.cares +13 -0
- data/ext/noderb_extension/libuv/src/ares/README.msvc +118 -0
- data/ext/noderb_extension/libuv/src/ares/README.node +21 -0
- data/ext/noderb_extension/libuv/src/ares/RELEASE-NOTES +25 -0
- data/ext/noderb_extension/libuv/src/ares/TODO +23 -0
- data/ext/noderb_extension/libuv/src/ares/ares__close_sockets.c +66 -0
- data/ext/noderb_extension/libuv/src/ares/ares__get_hostent.c +263 -0
- data/ext/noderb_extension/libuv/src/ares/ares__read_line.c +71 -0
- data/ext/noderb_extension/libuv/src/ares/ares__timeval.c +111 -0
- data/ext/noderb_extension/libuv/src/ares/ares_cancel.c +63 -0
- data/ext/noderb_extension/libuv/src/ares/ares_data.c +190 -0
- data/ext/noderb_extension/libuv/src/ares/ares_data.h +65 -0
- data/ext/noderb_extension/libuv/src/ares/ares_destroy.c +105 -0
- data/ext/noderb_extension/libuv/src/ares/ares_dns.h +90 -0
- data/ext/noderb_extension/libuv/src/ares/ares_expand_name.c +193 -0
- data/ext/noderb_extension/libuv/src/ares/ares_expand_string.c +75 -0
- data/ext/noderb_extension/libuv/src/ares/ares_fds.c +62 -0
- data/ext/noderb_extension/libuv/src/ares/ares_free_hostent.c +39 -0
- data/ext/noderb_extension/libuv/src/ares/ares_free_string.c +25 -0
- data/ext/noderb_extension/libuv/src/ares/ares_gethostbyaddr.c +292 -0
- data/ext/noderb_extension/libuv/src/ares/ares_gethostbyname.c +515 -0
- data/ext/noderb_extension/libuv/src/ares/ares_getnameinfo.c +426 -0
- data/ext/noderb_extension/libuv/src/ares/ares_getopt.c +122 -0
- data/ext/noderb_extension/libuv/src/ares/ares_getopt.h +53 -0
- data/ext/noderb_extension/libuv/src/ares/ares_getsock.c +72 -0
- data/ext/noderb_extension/libuv/src/ares/ares_init.c +1665 -0
- data/ext/noderb_extension/libuv/src/ares/ares_ipv6.h +78 -0
- data/ext/noderb_extension/libuv/src/ares/ares_library_init.c +132 -0
- data/ext/noderb_extension/libuv/src/ares/ares_library_init.h +39 -0
- data/ext/noderb_extension/libuv/src/ares/ares_llist.c +86 -0
- data/ext/noderb_extension/libuv/src/ares/ares_llist.h +42 -0
- data/ext/noderb_extension/libuv/src/ares/ares_mkquery.c +195 -0
- data/ext/noderb_extension/libuv/src/ares/ares_nowarn.c +59 -0
- data/ext/noderb_extension/libuv/src/ares/ares_nowarn.h +24 -0
- data/ext/noderb_extension/libuv/src/ares/ares_options.c +253 -0
- data/ext/noderb_extension/libuv/src/ares/ares_parse_a_reply.c +260 -0
- data/ext/noderb_extension/libuv/src/ares/ares_parse_aaaa_reply.c +256 -0
- data/ext/noderb_extension/libuv/src/ares/ares_parse_mx_reply.c +170 -0
- data/ext/noderb_extension/libuv/src/ares/ares_parse_ns_reply.c +182 -0
- data/ext/noderb_extension/libuv/src/ares/ares_parse_ptr_reply.c +208 -0
- data/ext/noderb_extension/libuv/src/ares/ares_parse_srv_reply.c +179 -0
- data/ext/noderb_extension/libuv/src/ares/ares_parse_txt_reply.c +201 -0
- data/ext/noderb_extension/libuv/src/ares/ares_private.h +351 -0
- data/ext/noderb_extension/libuv/src/ares/ares_process.c +1296 -0
- data/ext/noderb_extension/libuv/src/ares/ares_query.c +183 -0
- data/ext/noderb_extension/libuv/src/ares/ares_rules.h +144 -0
- data/ext/noderb_extension/libuv/src/ares/ares_search.c +322 -0
- data/ext/noderb_extension/libuv/src/ares/ares_send.c +134 -0
- data/ext/noderb_extension/libuv/src/ares/ares_setup.h +191 -0
- data/ext/noderb_extension/libuv/src/ares/ares_strcasecmp.c +66 -0
- data/ext/noderb_extension/libuv/src/ares/ares_strcasecmp.h +30 -0
- data/ext/noderb_extension/libuv/src/ares/ares_strdup.c +42 -0
- data/ext/noderb_extension/libuv/src/ares/ares_strdup.h +26 -0
- data/ext/noderb_extension/libuv/src/ares/ares_strerror.c +56 -0
- data/ext/noderb_extension/libuv/src/ares/ares_timeout.c +80 -0
- data/ext/noderb_extension/libuv/src/ares/ares_version.c +11 -0
- data/ext/noderb_extension/libuv/src/ares/ares_writev.c +79 -0
- data/ext/noderb_extension/libuv/src/ares/ares_writev.h +36 -0
- data/ext/noderb_extension/libuv/src/ares/bitncmp.c +59 -0
- data/ext/noderb_extension/libuv/src/ares/bitncmp.h +26 -0
- data/ext/noderb_extension/libuv/src/ares/config_cygwin/ares_config.h +510 -0
- data/ext/noderb_extension/libuv/src/ares/config_darwin/ares_config.h +510 -0
- data/ext/noderb_extension/libuv/src/ares/config_freebsd/ares_config.h +510 -0
- data/ext/noderb_extension/libuv/src/ares/config_linux/ares_config.h +510 -0
- data/ext/noderb_extension/libuv/src/ares/config_openbsd/ares_config.h +510 -0
- data/ext/noderb_extension/libuv/src/ares/config_sunos/ares_config.h +510 -0
- data/ext/noderb_extension/libuv/src/ares/config_win32/ares_config.h +369 -0
- data/ext/noderb_extension/libuv/src/ares/get_ver.awk +35 -0
- data/ext/noderb_extension/libuv/src/ares/inet_net_pton.c +450 -0
- data/ext/noderb_extension/libuv/src/ares/inet_net_pton.h +31 -0
- data/ext/noderb_extension/libuv/src/ares/inet_ntop.c +232 -0
- data/ext/noderb_extension/libuv/src/ares/inet_ntop.h +27 -0
- data/ext/noderb_extension/libuv/src/ares/nameser.h +193 -0
- data/ext/noderb_extension/libuv/src/ares/setup_once.h +488 -0
- data/ext/noderb_extension/libuv/src/ares/windows_port.c +22 -0
- data/ext/noderb_extension/libuv/src/eio/Changes +63 -0
- data/ext/noderb_extension/libuv/src/eio/LICENSE +36 -0
- data/ext/noderb_extension/libuv/src/eio/Makefile.am +15 -0
- data/ext/noderb_extension/libuv/src/eio/aclocal.m4 +8957 -0
- data/ext/noderb_extension/libuv/src/eio/autogen.sh +3 -0
- data/ext/noderb_extension/libuv/src/eio/config.h.in +86 -0
- data/ext/noderb_extension/libuv/src/eio/config_cygwin.h +77 -0
- data/ext/noderb_extension/libuv/src/eio/config_darwin.h +137 -0
- data/ext/noderb_extension/libuv/src/eio/config_freebsd.h +78 -0
- data/ext/noderb_extension/libuv/src/eio/config_linux.h +101 -0
- data/ext/noderb_extension/libuv/src/eio/config_sunos.h +81 -0
- data/ext/noderb_extension/libuv/src/eio/configure.ac +22 -0
- data/ext/noderb_extension/libuv/src/eio/demo.c +194 -0
- data/ext/noderb_extension/libuv/src/eio/ecb.h +370 -0
- data/ext/noderb_extension/libuv/src/eio/eio.3 +3428 -0
- data/ext/noderb_extension/libuv/src/eio/eio.c +2562 -0
- data/ext/noderb_extension/libuv/src/eio/eio.pod +969 -0
- data/ext/noderb_extension/libuv/src/eio/libeio.m4 +195 -0
- data/ext/noderb_extension/libuv/src/eio/xthread.h +164 -0
- data/ext/noderb_extension/libuv/src/ev/Changes +388 -0
- data/ext/noderb_extension/libuv/src/ev/LICENSE +36 -0
- data/ext/noderb_extension/libuv/src/ev/Makefile.am +18 -0
- data/ext/noderb_extension/libuv/src/ev/Makefile.in +771 -0
- data/ext/noderb_extension/libuv/src/ev/README +58 -0
- data/ext/noderb_extension/libuv/src/ev/aclocal.m4 +8957 -0
- data/ext/noderb_extension/libuv/src/ev/autogen.sh +6 -0
- data/ext/noderb_extension/libuv/src/ev/config.guess +1526 -0
- data/ext/noderb_extension/libuv/src/ev/config.h.in +125 -0
- data/ext/noderb_extension/libuv/src/ev/config.sub +1658 -0
- data/ext/noderb_extension/libuv/src/ev/config_cygwin.h +123 -0
- data/ext/noderb_extension/libuv/src/ev/config_darwin.h +122 -0
- data/ext/noderb_extension/libuv/src/ev/config_freebsd.h +120 -0
- data/ext/noderb_extension/libuv/src/ev/config_linux.h +130 -0
- data/ext/noderb_extension/libuv/src/ev/config_sunos.h +122 -0
- data/ext/noderb_extension/libuv/src/ev/configure +13037 -0
- data/ext/noderb_extension/libuv/src/ev/configure.ac +18 -0
- data/ext/noderb_extension/libuv/src/ev/depcomp +630 -0
- data/ext/noderb_extension/libuv/src/ev/ev++.h +816 -0
- data/ext/noderb_extension/libuv/src/ev/ev.3 +5311 -0
- data/ext/noderb_extension/libuv/src/ev/ev.c +3913 -0
- data/ext/noderb_extension/libuv/src/ev/ev.pod +5243 -0
- data/ext/noderb_extension/libuv/src/ev/ev_epoll.c +266 -0
- data/ext/noderb_extension/libuv/src/ev/ev_kqueue.c +198 -0
- data/ext/noderb_extension/libuv/src/ev/ev_poll.c +148 -0
- data/ext/noderb_extension/libuv/src/ev/ev_port.c +179 -0
- data/ext/noderb_extension/libuv/src/ev/ev_select.c +310 -0
- data/ext/noderb_extension/libuv/src/ev/ev_vars.h +203 -0
- data/ext/noderb_extension/libuv/src/ev/ev_win32.c +153 -0
- data/ext/noderb_extension/libuv/src/ev/ev_wrap.h +196 -0
- data/ext/noderb_extension/libuv/src/ev/event.c +402 -0
- data/ext/noderb_extension/libuv/src/ev/event.h +170 -0
- data/ext/noderb_extension/libuv/src/ev/install-sh +294 -0
- data/ext/noderb_extension/libuv/src/ev/libev.m4 +39 -0
- data/ext/noderb_extension/libuv/src/ev/ltmain.sh +8413 -0
- data/ext/noderb_extension/libuv/src/ev/missing +336 -0
- data/ext/noderb_extension/libuv/src/ev/mkinstalldirs +111 -0
- data/ext/noderb_extension/libuv/src/uv-common.c +172 -0
- data/ext/noderb_extension/libuv/src/uv-common.h +53 -0
- data/ext/noderb_extension/libuv/src/uv-cygwin.c +52 -0
- data/ext/noderb_extension/libuv/src/uv-darwin.c +64 -0
- data/ext/noderb_extension/libuv/src/uv-eio.c +113 -0
- data/ext/noderb_extension/libuv/src/uv-eio.h +13 -0
- data/ext/noderb_extension/libuv/src/uv-freebsd.c +65 -0
- data/ext/noderb_extension/libuv/src/uv-linux.c +51 -0
- data/ext/noderb_extension/libuv/src/uv-sunos.c +60 -0
- data/ext/noderb_extension/libuv/src/uv-unix.c +2408 -0
- data/ext/noderb_extension/libuv/src/win/async.c +129 -0
- data/ext/noderb_extension/libuv/src/win/cares.c +304 -0
- data/ext/noderb_extension/libuv/src/win/core.c +155 -0
- data/ext/noderb_extension/libuv/src/win/error.c +140 -0
- data/ext/noderb_extension/libuv/src/win/getaddrinfo.c +341 -0
- data/ext/noderb_extension/libuv/src/win/handle.c +176 -0
- data/ext/noderb_extension/libuv/src/win/internal.h +237 -0
- data/ext/noderb_extension/libuv/src/win/loop-watcher.c +128 -0
- data/ext/noderb_extension/libuv/src/win/pipe.c +828 -0
- data/ext/noderb_extension/libuv/src/win/process.c +936 -0
- data/ext/noderb_extension/libuv/src/win/req.c +141 -0
- data/ext/noderb_extension/libuv/src/win/stdio.c +75 -0
- data/ext/noderb_extension/libuv/src/win/stream.c +149 -0
- data/ext/noderb_extension/libuv/src/win/tcp.c +895 -0
- data/ext/noderb_extension/libuv/src/win/timer.c +269 -0
- data/ext/noderb_extension/libuv/src/win/util.c +82 -0
- data/ext/noderb_extension/libuv/test/benchmark-ares.c +117 -0
- data/ext/noderb_extension/libuv/test/benchmark-getaddrinfo.c +90 -0
- data/ext/noderb_extension/libuv/test/benchmark-list.h +77 -0
- data/ext/noderb_extension/libuv/test/benchmark-ping-pongs.c +210 -0
- data/ext/noderb_extension/libuv/test/benchmark-pound.c +237 -0
- data/ext/noderb_extension/libuv/test/benchmark-pump.c +459 -0
- data/ext/noderb_extension/libuv/test/benchmark-sizes.c +39 -0
- data/ext/noderb_extension/libuv/test/benchmark-spawn.c +154 -0
- data/ext/noderb_extension/libuv/test/dns-server.c +323 -0
- data/ext/noderb_extension/libuv/test/echo-server.c +299 -0
- data/ext/noderb_extension/libuv/test/run-benchmarks.c +64 -0
- data/ext/noderb_extension/libuv/test/run-tests.c +82 -0
- data/ext/noderb_extension/libuv/test/runner-unix.c +335 -0
- data/ext/noderb_extension/libuv/test/runner-unix.h +36 -0
- data/ext/noderb_extension/libuv/test/runner-win.c +343 -0
- data/ext/noderb_extension/libuv/test/runner-win.h +42 -0
- data/ext/noderb_extension/libuv/test/runner.c +311 -0
- data/ext/noderb_extension/libuv/test/runner.h +155 -0
- data/ext/noderb_extension/libuv/test/task.h +111 -0
- data/ext/noderb_extension/libuv/test/test-async.c +218 -0
- data/ext/noderb_extension/libuv/test/test-callback-stack.c +205 -0
- data/ext/noderb_extension/libuv/test/test-connection-fail.c +149 -0
- data/ext/noderb_extension/libuv/test/test-delayed-accept.c +198 -0
- data/ext/noderb_extension/libuv/test/test-fail-always.c +29 -0
- data/ext/noderb_extension/libuv/test/test-get-currentexe.c +53 -0
- data/ext/noderb_extension/libuv/test/test-getaddrinfo.c +110 -0
- data/ext/noderb_extension/libuv/test/test-gethostbyname.c +192 -0
- data/ext/noderb_extension/libuv/test/test-getsockname.c +196 -0
- data/ext/noderb_extension/libuv/test/test-hrtime.c +51 -0
- data/ext/noderb_extension/libuv/test/test-idle.c +83 -0
- data/ext/noderb_extension/libuv/test/test-list.h +165 -0
- data/ext/noderb_extension/libuv/test/test-loop-handles.c +361 -0
- data/ext/noderb_extension/libuv/test/test-pass-always.c +28 -0
- data/ext/noderb_extension/libuv/test/test-ping-pong.c +256 -0
- data/ext/noderb_extension/libuv/test/test-pipe-bind-error.c +148 -0
- data/ext/noderb_extension/libuv/test/test-ref.c +91 -0
- data/ext/noderb_extension/libuv/test/test-shutdown-eof.c +183 -0
- data/ext/noderb_extension/libuv/test/test-spawn.c +345 -0
- data/ext/noderb_extension/libuv/test/test-tcp-bind-error.c +204 -0
- data/ext/noderb_extension/libuv/test/test-tcp-bind6-error.c +164 -0
- data/ext/noderb_extension/libuv/test/test-tcp-writealot.c +198 -0
- data/ext/noderb_extension/libuv/test/test-timer-again.c +141 -0
- data/ext/noderb_extension/libuv/test/test-timer.c +134 -0
- data/ext/noderb_extension/noderb.c +340 -0
- data/ext/noderb_extension/noderb.h +2 -0
- data/lib/noderb/connection.rb +21 -0
- data/lib/noderb/process.rb +17 -0
- data/lib/noderb.rb +25 -0
- metadata +470 -0
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
/* Copyright Joyent, Inc. and other Node contributors. All rights reserved.
|
|
2
|
+
*
|
|
3
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
4
|
+
* of this software and associated documentation files (the "Software"), to
|
|
5
|
+
* deal in the Software without restriction, including without limitation the
|
|
6
|
+
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
|
7
|
+
* sell copies of the Software, and to permit persons to whom the Software is
|
|
8
|
+
* furnished to do so, subject to the following conditions:
|
|
9
|
+
*
|
|
10
|
+
* The above copyright notice and this permission notice shall be included in
|
|
11
|
+
* all copies or substantial portions of the Software.
|
|
12
|
+
*
|
|
13
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
14
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
15
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
16
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
17
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
18
|
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
|
19
|
+
* IN THE SOFTWARE.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
#include <assert.h>
|
|
23
|
+
|
|
24
|
+
#include "uv.h"
|
|
25
|
+
#include "internal.h"
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
/* Atomic set operation on char */
|
|
29
|
+
#ifdef _MSC_VER /* MSVC */
|
|
30
|
+
|
|
31
|
+
/* _InterlockedOr8 is supported by MSVC on x32 and x64. It is slightly less */
|
|
32
|
+
/* efficient than InterlockedExchange, but InterlockedExchange8 does not */
|
|
33
|
+
/* exist, and interlocked operations on larger targets might require the */
|
|
34
|
+
/* target to be aligned. */
|
|
35
|
+
#pragma intrinsic(_InterlockedOr8)
|
|
36
|
+
|
|
37
|
+
static char __declspec(inline) uv_atomic_exchange_set(char volatile* target) {
|
|
38
|
+
return _InterlockedOr8(target, 1);
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
#else /* GCC */
|
|
42
|
+
|
|
43
|
+
/* Mingw-32 version, hopefully this works for 64-bit gcc as well. */
|
|
44
|
+
static inline char uv_atomic_exchange_set(char volatile* target) {
|
|
45
|
+
const char one = 1;
|
|
46
|
+
char old_value;
|
|
47
|
+
__asm__ __volatile__ ("lock xchgb %0, %1\n\t"
|
|
48
|
+
: "=r"(old_value), "=m"(*target)
|
|
49
|
+
: "0"(one), "m"(*target)
|
|
50
|
+
: "memory");
|
|
51
|
+
return old_value;
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
#endif
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
void uv_async_endgame(uv_async_t* handle) {
|
|
58
|
+
if (handle->flags & UV_HANDLE_CLOSING &&
|
|
59
|
+
!handle->async_sent) {
|
|
60
|
+
assert(!(handle->flags & UV_HANDLE_CLOSED));
|
|
61
|
+
handle->flags |= UV_HANDLE_CLOSED;
|
|
62
|
+
|
|
63
|
+
if (handle->close_cb) {
|
|
64
|
+
handle->close_cb((uv_handle_t*)handle);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
uv_unref();
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
int uv_async_init(uv_async_t* handle, uv_async_cb async_cb) {
|
|
73
|
+
uv_req_t* req;
|
|
74
|
+
|
|
75
|
+
uv_counters()->handle_init++;
|
|
76
|
+
uv_counters()->async_init++;
|
|
77
|
+
|
|
78
|
+
handle->type = UV_ASYNC;
|
|
79
|
+
handle->flags = 0;
|
|
80
|
+
handle->async_sent = 0;
|
|
81
|
+
handle->error = uv_ok_;
|
|
82
|
+
handle->async_cb = async_cb;
|
|
83
|
+
|
|
84
|
+
req = &handle->async_req;
|
|
85
|
+
uv_req_init(req);
|
|
86
|
+
req->type = UV_WAKEUP;
|
|
87
|
+
req->data = handle;
|
|
88
|
+
|
|
89
|
+
uv_ref();
|
|
90
|
+
|
|
91
|
+
return 0;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
int uv_async_send(uv_async_t* handle) {
|
|
96
|
+
if (handle->type != UV_ASYNC) {
|
|
97
|
+
/* Can't set errno because that's not thread-safe. */
|
|
98
|
+
return -1;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/* The user should make sure never to call uv_async_send to a closing */
|
|
102
|
+
/* or closed handle. */
|
|
103
|
+
assert(!(handle->flags & UV_HANDLE_CLOSING));
|
|
104
|
+
|
|
105
|
+
if (!uv_atomic_exchange_set(&handle->async_sent)) {
|
|
106
|
+
if (!PostQueuedCompletionStatus(LOOP->iocp,
|
|
107
|
+
0,
|
|
108
|
+
0,
|
|
109
|
+
&handle->async_req.overlapped)) {
|
|
110
|
+
uv_fatal_error(GetLastError(), "PostQueuedCompletionStatus");
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
return 0;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
void uv_process_async_wakeup_req(uv_async_t* handle, uv_req_t* req) {
|
|
119
|
+
assert(handle->type == UV_ASYNC);
|
|
120
|
+
assert(req->type == UV_WAKEUP);
|
|
121
|
+
|
|
122
|
+
handle->async_sent = 0;
|
|
123
|
+
if (handle->async_cb) {
|
|
124
|
+
handle->async_cb((uv_async_t*) handle, 0);
|
|
125
|
+
}
|
|
126
|
+
if (handle->flags & UV_HANDLE_CLOSING) {
|
|
127
|
+
uv_want_endgame((uv_handle_t*)handle);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
@@ -0,0 +1,304 @@
|
|
|
1
|
+
/* Copyright Joyent, Inc. and other Node contributors. All rights reserved.
|
|
2
|
+
*
|
|
3
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
4
|
+
* of this software and associated documentation files (the "Software"), to
|
|
5
|
+
* deal in the Software without restriction, including without limitation the
|
|
6
|
+
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
|
7
|
+
* sell copies of the Software, and to permit persons to whom the Software is
|
|
8
|
+
* furnished to do so, subject to the following conditions:
|
|
9
|
+
*
|
|
10
|
+
* The above copyright notice and this permission notice shall be included in
|
|
11
|
+
* all copies or substantial portions of the Software.
|
|
12
|
+
*
|
|
13
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
14
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
15
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
16
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
17
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
18
|
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
|
19
|
+
* IN THE SOFTWARE.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
#include <assert.h>
|
|
23
|
+
|
|
24
|
+
#include "uv.h"
|
|
25
|
+
#include "../uv-common.h"
|
|
26
|
+
#include "internal.h"
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
/*
|
|
30
|
+
* Subclass of uv_handle_t. Used for integration of c-ares.
|
|
31
|
+
*/
|
|
32
|
+
struct uv_ares_action_s {
|
|
33
|
+
UV_HANDLE_FIELDS
|
|
34
|
+
struct uv_req_s ares_req;
|
|
35
|
+
SOCKET sock;
|
|
36
|
+
int read;
|
|
37
|
+
int write;
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
/* memory used per ares_channel */
|
|
42
|
+
typedef struct uv_ares_channel_s {
|
|
43
|
+
ares_channel channel;
|
|
44
|
+
int activesockets;
|
|
45
|
+
uv_timer_t pollingtimer;
|
|
46
|
+
} uv_ares_channel_t;
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
/* static data to hold single ares_channel */
|
|
50
|
+
static uv_ares_channel_t uv_ares_data = { NULL, 0 };
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
/* default timeout per socket request if ares does not specify value */
|
|
54
|
+
/* use 20 sec */
|
|
55
|
+
#define ARES_TIMEOUT_MS 20000
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
/* thread pool callback when socket is signalled */
|
|
59
|
+
static void CALLBACK uv_ares_socksignal_tp(void* parameter, BOOLEAN timerfired) {
|
|
60
|
+
WSANETWORKEVENTS network_events;
|
|
61
|
+
uv_ares_task_t* sockhandle;
|
|
62
|
+
uv_ares_action_t* selhandle;
|
|
63
|
+
uv_req_t* uv_ares_req;
|
|
64
|
+
|
|
65
|
+
assert(parameter != NULL);
|
|
66
|
+
|
|
67
|
+
if (parameter != NULL) {
|
|
68
|
+
sockhandle = (uv_ares_task_t*)parameter;
|
|
69
|
+
|
|
70
|
+
/* clear socket status for this event */
|
|
71
|
+
/* do not fail if error, thread may run after socket close */
|
|
72
|
+
/* The code assumes that c-ares will write all pending data in the callback,
|
|
73
|
+
unless the socket would block. We can clear the state here to avoid unecessary
|
|
74
|
+
signals. */
|
|
75
|
+
WSAEnumNetworkEvents(sockhandle->sock, sockhandle->h_event, &network_events);
|
|
76
|
+
|
|
77
|
+
/* setup new handle */
|
|
78
|
+
selhandle = (uv_ares_action_t*)malloc(sizeof(uv_ares_action_t));
|
|
79
|
+
if (selhandle == NULL) {
|
|
80
|
+
uv_fatal_error(ERROR_OUTOFMEMORY, "malloc");
|
|
81
|
+
}
|
|
82
|
+
selhandle->type = UV_ARES_EVENT;
|
|
83
|
+
selhandle->close_cb = NULL;
|
|
84
|
+
selhandle->data = sockhandle->data;
|
|
85
|
+
selhandle->sock = sockhandle->sock;
|
|
86
|
+
selhandle->read = (network_events.lNetworkEvents & (FD_READ | FD_CONNECT)) ? 1 : 0;
|
|
87
|
+
selhandle->write = (network_events.lNetworkEvents & (FD_WRITE | FD_CONNECT)) ? 1 : 0;
|
|
88
|
+
|
|
89
|
+
uv_ares_req = &selhandle->ares_req;
|
|
90
|
+
uv_req_init(uv_ares_req);
|
|
91
|
+
uv_ares_req->type = UV_ARES_EVENT_REQ;
|
|
92
|
+
uv_ares_req->data = selhandle;
|
|
93
|
+
|
|
94
|
+
/* post ares needs to called */
|
|
95
|
+
if (!PostQueuedCompletionStatus(LOOP->iocp,
|
|
96
|
+
0,
|
|
97
|
+
0,
|
|
98
|
+
&uv_ares_req->overlapped)) {
|
|
99
|
+
uv_fatal_error(GetLastError(), "PostQueuedCompletionStatus");
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
/* periodically call ares to check for timeouts */
|
|
106
|
+
static void uv_ares_poll(uv_timer_t* handle, int status) {
|
|
107
|
+
if (uv_ares_data.channel != NULL && uv_ares_data.activesockets > 0) {
|
|
108
|
+
ares_process_fd(uv_ares_data.channel, ARES_SOCKET_BAD, ARES_SOCKET_BAD);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
/* callback from ares when socket operation is started */
|
|
114
|
+
static void uv_ares_sockstate_cb(void *data, ares_socket_t sock, int read, int write) {
|
|
115
|
+
/* look to see if we have a handle for this socket in our list */
|
|
116
|
+
uv_ares_task_t* uv_handle_ares = uv_find_ares_handle(sock);
|
|
117
|
+
uv_ares_channel_t* uv_ares_data_ptr = (uv_ares_channel_t*)data;
|
|
118
|
+
|
|
119
|
+
int timeoutms = 0;
|
|
120
|
+
|
|
121
|
+
if (read == 0 && write == 0) {
|
|
122
|
+
/* if read and write are 0, cleanup existing data */
|
|
123
|
+
/* The code assumes that c-ares does a callback with read = 0 and write = 0
|
|
124
|
+
when the socket is closed. After we recieve this we stop monitoring the socket. */
|
|
125
|
+
if (uv_handle_ares != NULL) {
|
|
126
|
+
uv_req_t* uv_ares_req;
|
|
127
|
+
|
|
128
|
+
uv_handle_ares->h_close_event = CreateEvent(NULL, FALSE, FALSE, NULL);
|
|
129
|
+
/* remove Wait */
|
|
130
|
+
if (uv_handle_ares->h_wait) {
|
|
131
|
+
UnregisterWaitEx(uv_handle_ares->h_wait, uv_handle_ares->h_close_event);
|
|
132
|
+
uv_handle_ares->h_wait = NULL;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/* detach socket from the event */
|
|
136
|
+
WSAEventSelect(sock, NULL, 0);
|
|
137
|
+
if (uv_handle_ares->h_event != WSA_INVALID_EVENT) {
|
|
138
|
+
WSACloseEvent(uv_handle_ares->h_event);
|
|
139
|
+
uv_handle_ares->h_event = WSA_INVALID_EVENT;
|
|
140
|
+
}
|
|
141
|
+
/* remove handle from list */
|
|
142
|
+
uv_remove_ares_handle(uv_handle_ares);
|
|
143
|
+
|
|
144
|
+
/* Post request to cleanup the Task */
|
|
145
|
+
uv_ares_req = &uv_handle_ares->ares_req;
|
|
146
|
+
uv_req_init(uv_ares_req);
|
|
147
|
+
uv_ares_req->type = UV_ARES_CLEANUP_REQ;
|
|
148
|
+
uv_ares_req->data = uv_handle_ares;
|
|
149
|
+
|
|
150
|
+
/* post ares done with socket - finish cleanup when all threads done. */
|
|
151
|
+
if (!PostQueuedCompletionStatus(LOOP->iocp,
|
|
152
|
+
0,
|
|
153
|
+
0,
|
|
154
|
+
&uv_ares_req->overlapped)) {
|
|
155
|
+
uv_fatal_error(GetLastError(), "PostQueuedCompletionStatus");
|
|
156
|
+
}
|
|
157
|
+
} else {
|
|
158
|
+
assert(0);
|
|
159
|
+
uv_fatal_error(ERROR_INVALID_DATA, "ares_SockStateCB");
|
|
160
|
+
}
|
|
161
|
+
} else {
|
|
162
|
+
if (uv_handle_ares == NULL) {
|
|
163
|
+
/* setup new handle */
|
|
164
|
+
/* The code assumes that c-ares will call us when it has an open socket.
|
|
165
|
+
We need to call into c-ares when there is something to read,
|
|
166
|
+
or when it becomes writable. */
|
|
167
|
+
uv_handle_ares = (uv_ares_task_t*)malloc(sizeof(uv_ares_task_t));
|
|
168
|
+
if (uv_handle_ares == NULL) {
|
|
169
|
+
uv_fatal_error(ERROR_OUTOFMEMORY, "malloc");
|
|
170
|
+
}
|
|
171
|
+
uv_handle_ares->type = UV_ARES_TASK;
|
|
172
|
+
uv_handle_ares->close_cb = NULL;
|
|
173
|
+
uv_handle_ares->data = uv_ares_data_ptr;
|
|
174
|
+
uv_handle_ares->sock = sock;
|
|
175
|
+
uv_handle_ares->h_wait = NULL;
|
|
176
|
+
uv_handle_ares->flags = 0;
|
|
177
|
+
|
|
178
|
+
/* create an event to wait on socket signal */
|
|
179
|
+
uv_handle_ares->h_event = WSACreateEvent();
|
|
180
|
+
if (uv_handle_ares->h_event == WSA_INVALID_EVENT) {
|
|
181
|
+
uv_fatal_error(WSAGetLastError(), "WSACreateEvent");
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/* tie event to socket */
|
|
185
|
+
if (SOCKET_ERROR == WSAEventSelect(sock, uv_handle_ares->h_event, FD_READ | FD_WRITE | FD_CONNECT)) {
|
|
186
|
+
uv_fatal_error(WSAGetLastError(), "WSAEventSelect");
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/* add handle to list */
|
|
190
|
+
uv_add_ares_handle(uv_handle_ares);
|
|
191
|
+
uv_ref();
|
|
192
|
+
|
|
193
|
+
/*
|
|
194
|
+
* we have a single polling timer for all ares sockets.
|
|
195
|
+
* This is preferred to using ares_timeout. See ares_timeout.c warning.
|
|
196
|
+
* if timer is not running start it, and keep socket count
|
|
197
|
+
*/
|
|
198
|
+
if (uv_ares_data_ptr->activesockets == 0) {
|
|
199
|
+
uv_timer_init(&uv_ares_data_ptr->pollingtimer);
|
|
200
|
+
uv_timer_start(&uv_ares_data_ptr->pollingtimer, uv_ares_poll, 1000L, 1000L);
|
|
201
|
+
}
|
|
202
|
+
uv_ares_data_ptr->activesockets++;
|
|
203
|
+
|
|
204
|
+
/* specify thread pool function to call when event is signaled */
|
|
205
|
+
if (RegisterWaitForSingleObject(&uv_handle_ares->h_wait,
|
|
206
|
+
uv_handle_ares->h_event,
|
|
207
|
+
uv_ares_socksignal_tp,
|
|
208
|
+
(void*)uv_handle_ares,
|
|
209
|
+
INFINITE,
|
|
210
|
+
WT_EXECUTEINWAITTHREAD) == 0) {
|
|
211
|
+
uv_fatal_error(GetLastError(), "RegisterWaitForSingleObject");
|
|
212
|
+
}
|
|
213
|
+
} else {
|
|
214
|
+
/* found existing handle. */
|
|
215
|
+
assert(uv_handle_ares->type == UV_ARES_TASK);
|
|
216
|
+
assert(uv_handle_ares->data != NULL);
|
|
217
|
+
assert(uv_handle_ares->h_event != WSA_INVALID_EVENT);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
|
|
223
|
+
/* called via uv_poll when ares completion port signaled */
|
|
224
|
+
void uv_process_ares_event_req(uv_ares_action_t* handle, uv_req_t* req) {
|
|
225
|
+
uv_ares_channel_t* uv_ares_data_ptr = (uv_ares_channel_t*)handle->data;
|
|
226
|
+
|
|
227
|
+
ares_process_fd(uv_ares_data_ptr->channel,
|
|
228
|
+
handle->read ? handle->sock : INVALID_SOCKET,
|
|
229
|
+
handle->write ? handle->sock : INVALID_SOCKET);
|
|
230
|
+
|
|
231
|
+
/* release handle for select here */
|
|
232
|
+
free(handle);
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
/* called via uv_poll when ares is finished with socket */
|
|
237
|
+
void uv_process_ares_cleanup_req(uv_ares_task_t* handle, uv_req_t* req) {
|
|
238
|
+
/* check for event complete without waiting */
|
|
239
|
+
unsigned int signaled = WaitForSingleObject(handle->h_close_event, 0);
|
|
240
|
+
|
|
241
|
+
if (signaled != WAIT_TIMEOUT) {
|
|
242
|
+
uv_ares_channel_t* uv_ares_data_ptr = (uv_ares_channel_t*)handle->data;
|
|
243
|
+
|
|
244
|
+
uv_unref();
|
|
245
|
+
|
|
246
|
+
/* close event handle and free uv handle memory */
|
|
247
|
+
CloseHandle(handle->h_close_event);
|
|
248
|
+
free(handle);
|
|
249
|
+
|
|
250
|
+
/* decrement active count. if it becomes 0 stop polling */
|
|
251
|
+
if (uv_ares_data_ptr->activesockets > 0) {
|
|
252
|
+
uv_ares_data_ptr->activesockets--;
|
|
253
|
+
if (uv_ares_data_ptr->activesockets == 0) {
|
|
254
|
+
uv_close((uv_handle_t*)&uv_ares_data_ptr->pollingtimer, NULL);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
} else {
|
|
258
|
+
/* stil busy - repost and try again */
|
|
259
|
+
if (!PostQueuedCompletionStatus(LOOP->iocp,
|
|
260
|
+
0,
|
|
261
|
+
0,
|
|
262
|
+
&req->overlapped)) {
|
|
263
|
+
uv_fatal_error(GetLastError(), "PostQueuedCompletionStatus");
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
|
|
268
|
+
|
|
269
|
+
/* set ares SOCK_STATE callback to our handler */
|
|
270
|
+
int uv_ares_init_options(ares_channel *channelptr,
|
|
271
|
+
struct ares_options *options,
|
|
272
|
+
int optmask) {
|
|
273
|
+
int rc;
|
|
274
|
+
|
|
275
|
+
/* only allow single init at a time */
|
|
276
|
+
if (uv_ares_data.channel != NULL) {
|
|
277
|
+
return UV_EALREADY;
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
/* set our callback as an option */
|
|
281
|
+
options->sock_state_cb = uv_ares_sockstate_cb;
|
|
282
|
+
options->sock_state_cb_data = &uv_ares_data;
|
|
283
|
+
optmask |= ARES_OPT_SOCK_STATE_CB;
|
|
284
|
+
|
|
285
|
+
/* We do the call to ares_init_option for caller. */
|
|
286
|
+
rc = ares_init_options(channelptr, options, optmask);
|
|
287
|
+
|
|
288
|
+
/* if success, save channel */
|
|
289
|
+
if (rc == ARES_SUCCESS) {
|
|
290
|
+
uv_ares_data.channel = *channelptr;
|
|
291
|
+
}
|
|
292
|
+
|
|
293
|
+
return rc;
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
|
|
297
|
+
/* release memory */
|
|
298
|
+
void uv_ares_destroy(ares_channel channel) {
|
|
299
|
+
/* only allow destroy if did init */
|
|
300
|
+
if (uv_ares_data.channel != NULL) {
|
|
301
|
+
ares_destroy(channel);
|
|
302
|
+
uv_ares_data.channel = NULL;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/* Copyright Joyent, Inc. and other Node contributors. All rights reserved.
|
|
2
|
+
*
|
|
3
|
+
* Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
4
|
+
* of this software and associated documentation files (the "Software"), to
|
|
5
|
+
* deal in the Software without restriction, including without limitation the
|
|
6
|
+
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
|
|
7
|
+
* sell copies of the Software, and to permit persons to whom the Software is
|
|
8
|
+
* furnished to do so, subject to the following conditions:
|
|
9
|
+
*
|
|
10
|
+
* The above copyright notice and this permission notice shall be included in
|
|
11
|
+
* all copies or substantial portions of the Software.
|
|
12
|
+
*
|
|
13
|
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
14
|
+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
15
|
+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
16
|
+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
17
|
+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
|
18
|
+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
|
|
19
|
+
* IN THE SOFTWARE.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
#include <assert.h>
|
|
23
|
+
#include <errno.h>
|
|
24
|
+
#include <limits.h>
|
|
25
|
+
#include <malloc.h>
|
|
26
|
+
#include <stdio.h>
|
|
27
|
+
#include <string.h>
|
|
28
|
+
|
|
29
|
+
#include "uv.h"
|
|
30
|
+
#include "../uv-common.h"
|
|
31
|
+
#include "internal.h"
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
/* The only event loop we support right now */
|
|
35
|
+
uv_loop_t uv_main_loop_;
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
static void uv_loop_init() {
|
|
39
|
+
/* Create an I/O completion port */
|
|
40
|
+
LOOP->iocp = CreateIoCompletionPort(INVALID_HANDLE_VALUE, NULL, 0, 1);
|
|
41
|
+
if (LOOP->iocp == NULL) {
|
|
42
|
+
uv_fatal_error(GetLastError(), "CreateIoCompletionPort");
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
LOOP->refs = 0;
|
|
46
|
+
|
|
47
|
+
uv_update_time();
|
|
48
|
+
|
|
49
|
+
LOOP->pending_reqs_tail = NULL;
|
|
50
|
+
|
|
51
|
+
LOOP->endgame_handles = NULL;
|
|
52
|
+
|
|
53
|
+
RB_INIT(&LOOP->timers);
|
|
54
|
+
|
|
55
|
+
LOOP->check_handles = NULL;
|
|
56
|
+
LOOP->prepare_handles = NULL;
|
|
57
|
+
LOOP->idle_handles = NULL;
|
|
58
|
+
|
|
59
|
+
LOOP->next_prepare_handle = NULL;
|
|
60
|
+
LOOP->next_check_handle = NULL;
|
|
61
|
+
LOOP->next_idle_handle = NULL;
|
|
62
|
+
|
|
63
|
+
LOOP->last_error = uv_ok_;
|
|
64
|
+
|
|
65
|
+
LOOP->err_str = NULL;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
void uv_init() {
|
|
70
|
+
/* Initialize winsock */
|
|
71
|
+
uv_winsock_startup();
|
|
72
|
+
|
|
73
|
+
/* Intialize event loop */
|
|
74
|
+
uv_loop_init();
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
void uv_ref() {
|
|
79
|
+
LOOP->refs++;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
void uv_unref() {
|
|
84
|
+
LOOP->refs--;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
static void uv_poll(int block) {
|
|
89
|
+
BOOL success;
|
|
90
|
+
DWORD bytes, timeout;
|
|
91
|
+
ULONG_PTR key;
|
|
92
|
+
OVERLAPPED* overlapped;
|
|
93
|
+
uv_req_t* req;
|
|
94
|
+
|
|
95
|
+
if (block) {
|
|
96
|
+
timeout = uv_get_poll_timeout();
|
|
97
|
+
} else {
|
|
98
|
+
timeout = 0;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
success = GetQueuedCompletionStatus(LOOP->iocp,
|
|
102
|
+
&bytes,
|
|
103
|
+
&key,
|
|
104
|
+
&overlapped,
|
|
105
|
+
timeout);
|
|
106
|
+
|
|
107
|
+
if (overlapped) {
|
|
108
|
+
/* Package was dequeued */
|
|
109
|
+
req = uv_overlapped_to_req(overlapped);
|
|
110
|
+
|
|
111
|
+
if (!success) {
|
|
112
|
+
req->error = uv_new_sys_error(GetLastError());
|
|
113
|
+
}
|
|
114
|
+
|
|
115
|
+
uv_insert_pending_req(req);
|
|
116
|
+
|
|
117
|
+
} else if (GetLastError() != WAIT_TIMEOUT) {
|
|
118
|
+
/* Serious error */
|
|
119
|
+
uv_fatal_error(GetLastError(), "GetQueuedCompletionStatus");
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
int uv_run() {
|
|
125
|
+
while (LOOP->refs > 0) {
|
|
126
|
+
uv_update_time();
|
|
127
|
+
uv_process_timers();
|
|
128
|
+
|
|
129
|
+
/* Call idle callbacks if nothing to do. */
|
|
130
|
+
if (LOOP->pending_reqs_tail == NULL && LOOP->endgame_handles == NULL) {
|
|
131
|
+
uv_idle_invoke();
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
/* Completely flush all pending reqs and endgames. */
|
|
135
|
+
/* We do even when we just called the idle callbacks because those may */
|
|
136
|
+
/* have closed handles or started requests that short-circuited. */
|
|
137
|
+
while (LOOP->pending_reqs_tail || LOOP->endgame_handles) {
|
|
138
|
+
uv_process_endgames();
|
|
139
|
+
uv_process_reqs();
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
if (LOOP->refs <= 0) {
|
|
143
|
+
break;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
uv_prepare_invoke();
|
|
147
|
+
|
|
148
|
+
uv_poll(LOOP->idle_handles == NULL && LOOP->refs > 0);
|
|
149
|
+
|
|
150
|
+
uv_check_invoke();
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
assert(LOOP->refs == 0);
|
|
154
|
+
return 0;
|
|
155
|
+
}
|