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,189 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* pthread_cancel.c
|
|
3
|
+
*
|
|
4
|
+
* Description:
|
|
5
|
+
* POSIX thread functions related to thread cancellation.
|
|
6
|
+
*
|
|
7
|
+
* --------------------------------------------------------------------------
|
|
8
|
+
*
|
|
9
|
+
* Pthreads-win32 - POSIX Threads Library for Win32
|
|
10
|
+
* Copyright(C) 1998 John E. Bossom
|
|
11
|
+
* Copyright(C) 1999,2005 Pthreads-win32 contributors
|
|
12
|
+
*
|
|
13
|
+
* Contact Email: rpj@callisto.canberra.edu.au
|
|
14
|
+
*
|
|
15
|
+
* The current list of contributors is contained
|
|
16
|
+
* in the file CONTRIBUTORS included with the source
|
|
17
|
+
* code distribution. The list can also be seen at the
|
|
18
|
+
* following World Wide Web location:
|
|
19
|
+
* http://sources.redhat.com/pthreads-win32/contributors.html
|
|
20
|
+
*
|
|
21
|
+
* This library is free software; you can redistribute it and/or
|
|
22
|
+
* modify it under the terms of the GNU Lesser General Public
|
|
23
|
+
* License as published by the Free Software Foundation; either
|
|
24
|
+
* version 2 of the License, or (at your option) any later version.
|
|
25
|
+
*
|
|
26
|
+
* This library is distributed in the hope that it will be useful,
|
|
27
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
28
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
29
|
+
* Lesser General Public License for more details.
|
|
30
|
+
*
|
|
31
|
+
* You should have received a copy of the GNU Lesser General Public
|
|
32
|
+
* License along with this library in the file COPYING.LIB;
|
|
33
|
+
* if not, write to the Free Software Foundation, Inc.,
|
|
34
|
+
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
|
35
|
+
*/
|
|
36
|
+
|
|
37
|
+
#include "pthread.h"
|
|
38
|
+
#include "implement.h"
|
|
39
|
+
#include "context.h"
|
|
40
|
+
|
|
41
|
+
static void
|
|
42
|
+
ptw32_cancel_self (void)
|
|
43
|
+
{
|
|
44
|
+
ptw32_throw (PTW32_EPS_CANCEL);
|
|
45
|
+
|
|
46
|
+
/* Never reached */
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
static void CALLBACK
|
|
50
|
+
ptw32_cancel_callback (ULONG_PTR unused)
|
|
51
|
+
{
|
|
52
|
+
ptw32_throw (PTW32_EPS_CANCEL);
|
|
53
|
+
|
|
54
|
+
/* Never reached */
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/*
|
|
58
|
+
* ptw32_RegisterCancelation() -
|
|
59
|
+
* Must have args of same type as QueueUserAPCEx because this function
|
|
60
|
+
* is a substitute for QueueUserAPCEx if it's not available.
|
|
61
|
+
*/
|
|
62
|
+
DWORD
|
|
63
|
+
ptw32_RegisterCancelation (PAPCFUNC unused1, HANDLE threadH, DWORD unused2)
|
|
64
|
+
{
|
|
65
|
+
CONTEXT context;
|
|
66
|
+
|
|
67
|
+
context.ContextFlags = CONTEXT_CONTROL;
|
|
68
|
+
GetThreadContext (threadH, &context);
|
|
69
|
+
PTW32_PROGCTR (context) = (DWORD_PTR) ptw32_cancel_self;
|
|
70
|
+
SetThreadContext (threadH, &context);
|
|
71
|
+
return 0;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
int
|
|
75
|
+
pthread_cancel (pthread_t thread)
|
|
76
|
+
/*
|
|
77
|
+
* ------------------------------------------------------
|
|
78
|
+
* DOCPUBLIC
|
|
79
|
+
* This function requests cancellation of 'thread'.
|
|
80
|
+
*
|
|
81
|
+
* PARAMETERS
|
|
82
|
+
* thread
|
|
83
|
+
* reference to an instance of pthread_t
|
|
84
|
+
*
|
|
85
|
+
*
|
|
86
|
+
* DESCRIPTION
|
|
87
|
+
* This function requests cancellation of 'thread'.
|
|
88
|
+
* NOTE: cancellation is asynchronous; use pthread_join to
|
|
89
|
+
* wait for termination of 'thread' if necessary.
|
|
90
|
+
*
|
|
91
|
+
* RESULTS
|
|
92
|
+
* 0 successfully requested cancellation,
|
|
93
|
+
* ESRCH no thread found corresponding to 'thread',
|
|
94
|
+
* ENOMEM implicit self thread create failed.
|
|
95
|
+
* ------------------------------------------------------
|
|
96
|
+
*/
|
|
97
|
+
{
|
|
98
|
+
int result;
|
|
99
|
+
int cancel_self;
|
|
100
|
+
pthread_t self;
|
|
101
|
+
ptw32_thread_t * tp;
|
|
102
|
+
ptw32_mcs_local_node_t stateLock;
|
|
103
|
+
|
|
104
|
+
result = pthread_kill (thread, 0);
|
|
105
|
+
|
|
106
|
+
if (0 != result)
|
|
107
|
+
{
|
|
108
|
+
return result;
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
if ((self = pthread_self ()).p == NULL)
|
|
112
|
+
{
|
|
113
|
+
return ENOMEM;
|
|
114
|
+
};
|
|
115
|
+
|
|
116
|
+
/*
|
|
117
|
+
* For self cancellation we need to ensure that a thread can't
|
|
118
|
+
* deadlock itself trying to cancel itself asynchronously
|
|
119
|
+
* (pthread_cancel is required to be an async-cancel
|
|
120
|
+
* safe function).
|
|
121
|
+
*/
|
|
122
|
+
cancel_self = pthread_equal (thread, self);
|
|
123
|
+
|
|
124
|
+
tp = (ptw32_thread_t *) thread.p;
|
|
125
|
+
|
|
126
|
+
/*
|
|
127
|
+
* Lock for async-cancel safety.
|
|
128
|
+
*/
|
|
129
|
+
ptw32_mcs_lock_acquire (&tp->stateLock, &stateLock);
|
|
130
|
+
|
|
131
|
+
if (tp->cancelType == PTHREAD_CANCEL_ASYNCHRONOUS
|
|
132
|
+
&& tp->cancelState == PTHREAD_CANCEL_ENABLE
|
|
133
|
+
&& tp->state < PThreadStateCanceling)
|
|
134
|
+
{
|
|
135
|
+
if (cancel_self)
|
|
136
|
+
{
|
|
137
|
+
tp->state = PThreadStateCanceling;
|
|
138
|
+
tp->cancelState = PTHREAD_CANCEL_DISABLE;
|
|
139
|
+
|
|
140
|
+
ptw32_mcs_lock_release (&stateLock);
|
|
141
|
+
ptw32_throw (PTW32_EPS_CANCEL);
|
|
142
|
+
|
|
143
|
+
/* Never reached */
|
|
144
|
+
}
|
|
145
|
+
else
|
|
146
|
+
{
|
|
147
|
+
HANDLE threadH = tp->threadH;
|
|
148
|
+
|
|
149
|
+
SuspendThread (threadH);
|
|
150
|
+
|
|
151
|
+
if (WaitForSingleObject (threadH, 0) == WAIT_TIMEOUT)
|
|
152
|
+
{
|
|
153
|
+
tp->state = PThreadStateCanceling;
|
|
154
|
+
tp->cancelState = PTHREAD_CANCEL_DISABLE;
|
|
155
|
+
/*
|
|
156
|
+
* If alertdrv and QueueUserAPCEx is available then the following
|
|
157
|
+
* will result in a call to QueueUserAPCEx with the args given, otherwise
|
|
158
|
+
* this will result in a call to ptw32_RegisterCancelation and only
|
|
159
|
+
* the threadH arg will be used.
|
|
160
|
+
*/
|
|
161
|
+
ptw32_register_cancelation ((PAPCFUNC)ptw32_cancel_callback, threadH, 0);
|
|
162
|
+
ptw32_mcs_lock_release (&stateLock);
|
|
163
|
+
ResumeThread (threadH);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
else
|
|
168
|
+
{
|
|
169
|
+
/*
|
|
170
|
+
* Set for deferred cancellation.
|
|
171
|
+
*/
|
|
172
|
+
if (tp->state < PThreadStateCancelPending)
|
|
173
|
+
{
|
|
174
|
+
tp->state = PThreadStateCancelPending;
|
|
175
|
+
if (!SetEvent (tp->cancelEvent))
|
|
176
|
+
{
|
|
177
|
+
result = ESRCH;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
else if (tp->state >= PThreadStateCanceling)
|
|
181
|
+
{
|
|
182
|
+
result = ESRCH;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
ptw32_mcs_lock_release (&stateLock);
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
return (result);
|
|
189
|
+
}
|
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* pthread_cond_destroy.c
|
|
3
|
+
*
|
|
4
|
+
* Description:
|
|
5
|
+
* This translation unit implements condition variables and their primitives.
|
|
6
|
+
*
|
|
7
|
+
*
|
|
8
|
+
* --------------------------------------------------------------------------
|
|
9
|
+
*
|
|
10
|
+
* Pthreads-win32 - POSIX Threads Library for Win32
|
|
11
|
+
* Copyright(C) 1998 John E. Bossom
|
|
12
|
+
* Copyright(C) 1999,2005 Pthreads-win32 contributors
|
|
13
|
+
*
|
|
14
|
+
* Contact Email: rpj@callisto.canberra.edu.au
|
|
15
|
+
*
|
|
16
|
+
* The current list of contributors is contained
|
|
17
|
+
* in the file CONTRIBUTORS included with the source
|
|
18
|
+
* code distribution. The list can also be seen at the
|
|
19
|
+
* following World Wide Web location:
|
|
20
|
+
* http://sources.redhat.com/pthreads-win32/contributors.html
|
|
21
|
+
*
|
|
22
|
+
* This library is free software; you can redistribute it and/or
|
|
23
|
+
* modify it under the terms of the GNU Lesser General Public
|
|
24
|
+
* License as published by the Free Software Foundation; either
|
|
25
|
+
* version 2 of the License, or (at your option) any later version.
|
|
26
|
+
*
|
|
27
|
+
* This library is distributed in the hope that it will be useful,
|
|
28
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
29
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
30
|
+
* Lesser General Public License for more details.
|
|
31
|
+
*
|
|
32
|
+
* You should have received a copy of the GNU Lesser General Public
|
|
33
|
+
* License along with this library in the file COPYING.LIB;
|
|
34
|
+
* if not, write to the Free Software Foundation, Inc.,
|
|
35
|
+
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
|
36
|
+
*/
|
|
37
|
+
|
|
38
|
+
#include "pthread.h"
|
|
39
|
+
#include "implement.h"
|
|
40
|
+
|
|
41
|
+
int
|
|
42
|
+
pthread_cond_destroy (pthread_cond_t * cond)
|
|
43
|
+
/*
|
|
44
|
+
* ------------------------------------------------------
|
|
45
|
+
* DOCPUBLIC
|
|
46
|
+
* This function destroys a condition variable
|
|
47
|
+
*
|
|
48
|
+
*
|
|
49
|
+
* PARAMETERS
|
|
50
|
+
* cond
|
|
51
|
+
* pointer to an instance of pthread_cond_t
|
|
52
|
+
*
|
|
53
|
+
*
|
|
54
|
+
* DESCRIPTION
|
|
55
|
+
* This function destroys a condition variable.
|
|
56
|
+
*
|
|
57
|
+
* NOTES:
|
|
58
|
+
* 1) A condition variable can be destroyed
|
|
59
|
+
* immediately after all the threads that
|
|
60
|
+
* are blocked on it are awakened. e.g.
|
|
61
|
+
*
|
|
62
|
+
* struct list {
|
|
63
|
+
* pthread_mutex_t lm;
|
|
64
|
+
* ...
|
|
65
|
+
* }
|
|
66
|
+
*
|
|
67
|
+
* struct elt {
|
|
68
|
+
* key k;
|
|
69
|
+
* int busy;
|
|
70
|
+
* pthread_cond_t notbusy;
|
|
71
|
+
* ...
|
|
72
|
+
* }
|
|
73
|
+
*
|
|
74
|
+
*
|
|
75
|
+
* struct elt *
|
|
76
|
+
* list_find(struct list *lp, key k)
|
|
77
|
+
* {
|
|
78
|
+
* struct elt *ep;
|
|
79
|
+
*
|
|
80
|
+
* pthread_mutex_lock(&lp->lm);
|
|
81
|
+
* while ((ep = find_elt(l,k) != NULL) && ep->busy)
|
|
82
|
+
* pthread_cond_wait(&ep->notbusy, &lp->lm);
|
|
83
|
+
* if (ep != NULL)
|
|
84
|
+
* ep->busy = 1;
|
|
85
|
+
* pthread_mutex_unlock(&lp->lm);
|
|
86
|
+
* return(ep);
|
|
87
|
+
* }
|
|
88
|
+
*
|
|
89
|
+
* delete_elt(struct list *lp, struct elt *ep)
|
|
90
|
+
* {
|
|
91
|
+
* pthread_mutex_lock(&lp->lm);
|
|
92
|
+
* assert(ep->busy);
|
|
93
|
+
* ... remove ep from list ...
|
|
94
|
+
* ep->busy = 0;
|
|
95
|
+
* (A) pthread_cond_broadcast(&ep->notbusy);
|
|
96
|
+
* pthread_mutex_unlock(&lp->lm);
|
|
97
|
+
* (B) pthread_cond_destroy(&rp->notbusy);
|
|
98
|
+
* free(ep);
|
|
99
|
+
* }
|
|
100
|
+
*
|
|
101
|
+
* In this example, the condition variable
|
|
102
|
+
* and its list element may be freed (line B)
|
|
103
|
+
* immediately after all threads waiting for
|
|
104
|
+
* it are awakened (line A), since the mutex
|
|
105
|
+
* and the code ensure that no other thread
|
|
106
|
+
* can touch the element to be deleted.
|
|
107
|
+
*
|
|
108
|
+
* RESULTS
|
|
109
|
+
* 0 successfully released condition variable,
|
|
110
|
+
* EINVAL 'cond' is invalid,
|
|
111
|
+
* EBUSY 'cond' is in use,
|
|
112
|
+
*
|
|
113
|
+
* ------------------------------------------------------
|
|
114
|
+
*/
|
|
115
|
+
{
|
|
116
|
+
pthread_cond_t cv;
|
|
117
|
+
int result = 0, result1 = 0, result2 = 0;
|
|
118
|
+
|
|
119
|
+
/*
|
|
120
|
+
* Assuming any race condition here is harmless.
|
|
121
|
+
*/
|
|
122
|
+
if (cond == NULL || *cond == NULL)
|
|
123
|
+
{
|
|
124
|
+
return EINVAL;
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
if (*cond != PTHREAD_COND_INITIALIZER)
|
|
128
|
+
{
|
|
129
|
+
ptw32_mcs_local_node_t node;
|
|
130
|
+
ptw32_mcs_lock_acquire(&ptw32_cond_list_lock, &node);
|
|
131
|
+
|
|
132
|
+
cv = *cond;
|
|
133
|
+
|
|
134
|
+
/*
|
|
135
|
+
* Close the gate; this will synchronize this thread with
|
|
136
|
+
* all already signaled waiters to let them retract their
|
|
137
|
+
* waiter status - SEE NOTE 1 ABOVE!!!
|
|
138
|
+
*/
|
|
139
|
+
if (ptw32_semwait (&(cv->semBlockLock)) != 0) /* Non-cancelable */
|
|
140
|
+
{
|
|
141
|
+
result = errno;
|
|
142
|
+
}
|
|
143
|
+
else
|
|
144
|
+
{
|
|
145
|
+
/*
|
|
146
|
+
* !TRY! lock mtxUnblockLock; try will detect busy condition
|
|
147
|
+
* and will not cause a deadlock with respect to concurrent
|
|
148
|
+
* signal/broadcast.
|
|
149
|
+
*/
|
|
150
|
+
if ((result = pthread_mutex_trylock (&(cv->mtxUnblockLock))) != 0)
|
|
151
|
+
{
|
|
152
|
+
(void) sem_post (&(cv->semBlockLock));
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
if (result != 0)
|
|
157
|
+
{
|
|
158
|
+
ptw32_mcs_lock_release(&node);
|
|
159
|
+
return result;
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/*
|
|
163
|
+
* Check whether cv is still busy (still has waiters)
|
|
164
|
+
*/
|
|
165
|
+
if (cv->nWaitersBlocked > cv->nWaitersGone)
|
|
166
|
+
{
|
|
167
|
+
if (sem_post (&(cv->semBlockLock)) != 0)
|
|
168
|
+
{
|
|
169
|
+
result = errno;
|
|
170
|
+
}
|
|
171
|
+
result1 = pthread_mutex_unlock (&(cv->mtxUnblockLock));
|
|
172
|
+
result2 = EBUSY;
|
|
173
|
+
}
|
|
174
|
+
else
|
|
175
|
+
{
|
|
176
|
+
/*
|
|
177
|
+
* Now it is safe to destroy
|
|
178
|
+
*/
|
|
179
|
+
*cond = NULL;
|
|
180
|
+
|
|
181
|
+
if (sem_destroy (&(cv->semBlockLock)) != 0)
|
|
182
|
+
{
|
|
183
|
+
result = errno;
|
|
184
|
+
}
|
|
185
|
+
if (sem_destroy (&(cv->semBlockQueue)) != 0)
|
|
186
|
+
{
|
|
187
|
+
result1 = errno;
|
|
188
|
+
}
|
|
189
|
+
if ((result2 = pthread_mutex_unlock (&(cv->mtxUnblockLock))) == 0)
|
|
190
|
+
{
|
|
191
|
+
result2 = pthread_mutex_destroy (&(cv->mtxUnblockLock));
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
/* Unlink the CV from the list */
|
|
195
|
+
|
|
196
|
+
if (ptw32_cond_list_head == cv)
|
|
197
|
+
{
|
|
198
|
+
ptw32_cond_list_head = cv->next;
|
|
199
|
+
}
|
|
200
|
+
else
|
|
201
|
+
{
|
|
202
|
+
cv->prev->next = cv->next;
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
if (ptw32_cond_list_tail == cv)
|
|
206
|
+
{
|
|
207
|
+
ptw32_cond_list_tail = cv->prev;
|
|
208
|
+
}
|
|
209
|
+
else
|
|
210
|
+
{
|
|
211
|
+
cv->next->prev = cv->prev;
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
(void) free (cv);
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
ptw32_mcs_lock_release(&node);
|
|
218
|
+
}
|
|
219
|
+
else
|
|
220
|
+
{
|
|
221
|
+
ptw32_mcs_local_node_t node;
|
|
222
|
+
/*
|
|
223
|
+
* See notes in ptw32_cond_check_need_init() above also.
|
|
224
|
+
*/
|
|
225
|
+
ptw32_mcs_lock_acquire(&ptw32_cond_test_init_lock, &node);
|
|
226
|
+
|
|
227
|
+
/*
|
|
228
|
+
* Check again.
|
|
229
|
+
*/
|
|
230
|
+
if (*cond == PTHREAD_COND_INITIALIZER)
|
|
231
|
+
{
|
|
232
|
+
/*
|
|
233
|
+
* This is all we need to do to destroy a statically
|
|
234
|
+
* initialised cond that has not yet been used (initialised).
|
|
235
|
+
* If we get to here, another thread waiting to initialise
|
|
236
|
+
* this cond will get an EINVAL. That's OK.
|
|
237
|
+
*/
|
|
238
|
+
*cond = NULL;
|
|
239
|
+
}
|
|
240
|
+
else
|
|
241
|
+
{
|
|
242
|
+
/*
|
|
243
|
+
* The cv has been initialised while we were waiting
|
|
244
|
+
* so assume it's in use.
|
|
245
|
+
*/
|
|
246
|
+
result = EBUSY;
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
ptw32_mcs_lock_release(&node);
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
return ((result != 0) ? result : ((result1 != 0) ? result1 : result2));
|
|
253
|
+
}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* pthread_cond_init.c
|
|
3
|
+
*
|
|
4
|
+
* Description:
|
|
5
|
+
* This translation unit implements condition variables and their primitives.
|
|
6
|
+
*
|
|
7
|
+
*
|
|
8
|
+
* --------------------------------------------------------------------------
|
|
9
|
+
*
|
|
10
|
+
* Pthreads-win32 - POSIX Threads Library for Win32
|
|
11
|
+
* Copyright(C) 1998 John E. Bossom
|
|
12
|
+
* Copyright(C) 1999,2005 Pthreads-win32 contributors
|
|
13
|
+
*
|
|
14
|
+
* Contact Email: rpj@callisto.canberra.edu.au
|
|
15
|
+
*
|
|
16
|
+
* The current list of contributors is contained
|
|
17
|
+
* in the file CONTRIBUTORS included with the source
|
|
18
|
+
* code distribution. The list can also be seen at the
|
|
19
|
+
* following World Wide Web location:
|
|
20
|
+
* http://sources.redhat.com/pthreads-win32/contributors.html
|
|
21
|
+
*
|
|
22
|
+
* This library is free software; you can redistribute it and/or
|
|
23
|
+
* modify it under the terms of the GNU Lesser General Public
|
|
24
|
+
* License as published by the Free Software Foundation; either
|
|
25
|
+
* version 2 of the License, or (at your option) any later version.
|
|
26
|
+
*
|
|
27
|
+
* This library is distributed in the hope that it will be useful,
|
|
28
|
+
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
29
|
+
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
30
|
+
* Lesser General Public License for more details.
|
|
31
|
+
*
|
|
32
|
+
* You should have received a copy of the GNU Lesser General Public
|
|
33
|
+
* License along with this library in the file COPYING.LIB;
|
|
34
|
+
* if not, write to the Free Software Foundation, Inc.,
|
|
35
|
+
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
|
36
|
+
*/
|
|
37
|
+
|
|
38
|
+
#include "pthread.h"
|
|
39
|
+
#include "implement.h"
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
int
|
|
43
|
+
pthread_cond_init (pthread_cond_t * cond, const pthread_condattr_t * attr)
|
|
44
|
+
/*
|
|
45
|
+
* ------------------------------------------------------
|
|
46
|
+
* DOCPUBLIC
|
|
47
|
+
* This function initializes a condition variable.
|
|
48
|
+
*
|
|
49
|
+
* PARAMETERS
|
|
50
|
+
* cond
|
|
51
|
+
* pointer to an instance of pthread_cond_t
|
|
52
|
+
*
|
|
53
|
+
* attr
|
|
54
|
+
* specifies optional creation attributes.
|
|
55
|
+
*
|
|
56
|
+
*
|
|
57
|
+
* DESCRIPTION
|
|
58
|
+
* This function initializes a condition variable.
|
|
59
|
+
*
|
|
60
|
+
* RESULTS
|
|
61
|
+
* 0 successfully created condition variable,
|
|
62
|
+
* EINVAL 'attr' is invalid,
|
|
63
|
+
* EAGAIN insufficient resources (other than
|
|
64
|
+
* memory,
|
|
65
|
+
* ENOMEM insufficient memory,
|
|
66
|
+
* EBUSY 'cond' is already initialized,
|
|
67
|
+
*
|
|
68
|
+
* ------------------------------------------------------
|
|
69
|
+
*/
|
|
70
|
+
{
|
|
71
|
+
int result;
|
|
72
|
+
pthread_cond_t cv = NULL;
|
|
73
|
+
|
|
74
|
+
if (cond == NULL)
|
|
75
|
+
{
|
|
76
|
+
return EINVAL;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
if ((attr != NULL && *attr != NULL) &&
|
|
80
|
+
((*attr)->pshared == PTHREAD_PROCESS_SHARED))
|
|
81
|
+
{
|
|
82
|
+
/*
|
|
83
|
+
* Creating condition variable that can be shared between
|
|
84
|
+
* processes.
|
|
85
|
+
*/
|
|
86
|
+
result = ENOSYS;
|
|
87
|
+
goto DONE;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
cv = (pthread_cond_t) calloc (1, sizeof (*cv));
|
|
91
|
+
|
|
92
|
+
if (cv == NULL)
|
|
93
|
+
{
|
|
94
|
+
result = ENOMEM;
|
|
95
|
+
goto DONE;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
cv->nWaitersBlocked = 0;
|
|
99
|
+
cv->nWaitersToUnblock = 0;
|
|
100
|
+
cv->nWaitersGone = 0;
|
|
101
|
+
|
|
102
|
+
if (sem_init (&(cv->semBlockLock), 0, 1) != 0)
|
|
103
|
+
{
|
|
104
|
+
result = errno;
|
|
105
|
+
goto FAIL0;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
if (sem_init (&(cv->semBlockQueue), 0, 0) != 0)
|
|
109
|
+
{
|
|
110
|
+
result = errno;
|
|
111
|
+
goto FAIL1;
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
if ((result = pthread_mutex_init (&(cv->mtxUnblockLock), 0)) != 0)
|
|
115
|
+
{
|
|
116
|
+
goto FAIL2;
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
result = 0;
|
|
120
|
+
|
|
121
|
+
goto DONE;
|
|
122
|
+
|
|
123
|
+
/*
|
|
124
|
+
* -------------
|
|
125
|
+
* Failed...
|
|
126
|
+
* -------------
|
|
127
|
+
*/
|
|
128
|
+
FAIL2:
|
|
129
|
+
(void) sem_destroy (&(cv->semBlockQueue));
|
|
130
|
+
|
|
131
|
+
FAIL1:
|
|
132
|
+
(void) sem_destroy (&(cv->semBlockLock));
|
|
133
|
+
|
|
134
|
+
FAIL0:
|
|
135
|
+
(void) free (cv);
|
|
136
|
+
cv = NULL;
|
|
137
|
+
|
|
138
|
+
DONE:
|
|
139
|
+
if (0 == result)
|
|
140
|
+
{
|
|
141
|
+
ptw32_mcs_local_node_t node;
|
|
142
|
+
|
|
143
|
+
ptw32_mcs_lock_acquire(&ptw32_cond_list_lock, &node);
|
|
144
|
+
|
|
145
|
+
cv->next = NULL;
|
|
146
|
+
cv->prev = ptw32_cond_list_tail;
|
|
147
|
+
|
|
148
|
+
if (ptw32_cond_list_tail != NULL)
|
|
149
|
+
{
|
|
150
|
+
ptw32_cond_list_tail->next = cv;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
ptw32_cond_list_tail = cv;
|
|
154
|
+
|
|
155
|
+
if (ptw32_cond_list_head == NULL)
|
|
156
|
+
{
|
|
157
|
+
ptw32_cond_list_head = cv;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
ptw32_mcs_lock_release(&node);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
*cond = cv;
|
|
164
|
+
|
|
165
|
+
return result;
|
|
166
|
+
|
|
167
|
+
} /* pthread_cond_init */
|