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,567 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* pthread_cond_wait.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
|
+
* Algorithm:
|
|
39
|
+
* The algorithm used in this implementation is that developed by
|
|
40
|
+
* Alexander Terekhov in colaboration with Louis Thomas. The bulk
|
|
41
|
+
* of the discussion is recorded in the file README.CV, which contains
|
|
42
|
+
* several generations of both colaborators original algorithms. The final
|
|
43
|
+
* algorithm used here is the one referred to as
|
|
44
|
+
*
|
|
45
|
+
* Algorithm 8a / IMPL_SEM,UNBLOCK_STRATEGY == UNBLOCK_ALL
|
|
46
|
+
*
|
|
47
|
+
* presented below in pseudo-code as it appeared:
|
|
48
|
+
*
|
|
49
|
+
*
|
|
50
|
+
* given:
|
|
51
|
+
* semBlockLock - bin.semaphore
|
|
52
|
+
* semBlockQueue - semaphore
|
|
53
|
+
* mtxExternal - mutex or CS
|
|
54
|
+
* mtxUnblockLock - mutex or CS
|
|
55
|
+
* nWaitersGone - int
|
|
56
|
+
* nWaitersBlocked - int
|
|
57
|
+
* nWaitersToUnblock - int
|
|
58
|
+
*
|
|
59
|
+
* wait( timeout ) {
|
|
60
|
+
*
|
|
61
|
+
* [auto: register int result ] // error checking omitted
|
|
62
|
+
* [auto: register int nSignalsWasLeft ]
|
|
63
|
+
* [auto: register int nWaitersWasGone ]
|
|
64
|
+
*
|
|
65
|
+
* sem_wait( semBlockLock );
|
|
66
|
+
* nWaitersBlocked++;
|
|
67
|
+
* sem_post( semBlockLock );
|
|
68
|
+
*
|
|
69
|
+
* unlock( mtxExternal );
|
|
70
|
+
* bTimedOut = sem_wait( semBlockQueue,timeout );
|
|
71
|
+
*
|
|
72
|
+
* lock( mtxUnblockLock );
|
|
73
|
+
* if ( 0 != (nSignalsWasLeft = nWaitersToUnblock) ) {
|
|
74
|
+
* if ( bTimeout ) { // timeout (or canceled)
|
|
75
|
+
* if ( 0 != nWaitersBlocked ) {
|
|
76
|
+
* nWaitersBlocked--;
|
|
77
|
+
* }
|
|
78
|
+
* else {
|
|
79
|
+
* nWaitersGone++; // count spurious wakeups.
|
|
80
|
+
* }
|
|
81
|
+
* }
|
|
82
|
+
* if ( 0 == --nWaitersToUnblock ) {
|
|
83
|
+
* if ( 0 != nWaitersBlocked ) {
|
|
84
|
+
* sem_post( semBlockLock ); // open the gate.
|
|
85
|
+
* nSignalsWasLeft = 0; // do not open the gate
|
|
86
|
+
* // below again.
|
|
87
|
+
* }
|
|
88
|
+
* else if ( 0 != (nWaitersWasGone = nWaitersGone) ) {
|
|
89
|
+
* nWaitersGone = 0;
|
|
90
|
+
* }
|
|
91
|
+
* }
|
|
92
|
+
* }
|
|
93
|
+
* else if ( INT_MAX/2 == ++nWaitersGone ) { // timeout/canceled or
|
|
94
|
+
* // spurious semaphore :-)
|
|
95
|
+
* sem_wait( semBlockLock );
|
|
96
|
+
* nWaitersBlocked -= nWaitersGone; // something is going on here
|
|
97
|
+
* // - test of timeouts? :-)
|
|
98
|
+
* sem_post( semBlockLock );
|
|
99
|
+
* nWaitersGone = 0;
|
|
100
|
+
* }
|
|
101
|
+
* unlock( mtxUnblockLock );
|
|
102
|
+
*
|
|
103
|
+
* if ( 1 == nSignalsWasLeft ) {
|
|
104
|
+
* if ( 0 != nWaitersWasGone ) {
|
|
105
|
+
* // sem_adjust( semBlockQueue,-nWaitersWasGone );
|
|
106
|
+
* while ( nWaitersWasGone-- ) {
|
|
107
|
+
* sem_wait( semBlockQueue ); // better now than spurious later
|
|
108
|
+
* }
|
|
109
|
+
* } sem_post( semBlockLock ); // open the gate
|
|
110
|
+
* }
|
|
111
|
+
*
|
|
112
|
+
* lock( mtxExternal );
|
|
113
|
+
*
|
|
114
|
+
* return ( bTimedOut ) ? ETIMEOUT : 0;
|
|
115
|
+
* }
|
|
116
|
+
*
|
|
117
|
+
* signal(bAll) {
|
|
118
|
+
*
|
|
119
|
+
* [auto: register int result ]
|
|
120
|
+
* [auto: register int nSignalsToIssue]
|
|
121
|
+
*
|
|
122
|
+
* lock( mtxUnblockLock );
|
|
123
|
+
*
|
|
124
|
+
* if ( 0 != nWaitersToUnblock ) { // the gate is closed!!!
|
|
125
|
+
* if ( 0 == nWaitersBlocked ) { // NO-OP
|
|
126
|
+
* return unlock( mtxUnblockLock );
|
|
127
|
+
* }
|
|
128
|
+
* if (bAll) {
|
|
129
|
+
* nWaitersToUnblock += nSignalsToIssue=nWaitersBlocked;
|
|
130
|
+
* nWaitersBlocked = 0;
|
|
131
|
+
* }
|
|
132
|
+
* else {
|
|
133
|
+
* nSignalsToIssue = 1;
|
|
134
|
+
* nWaitersToUnblock++;
|
|
135
|
+
* nWaitersBlocked--;
|
|
136
|
+
* }
|
|
137
|
+
* }
|
|
138
|
+
* else if ( nWaitersBlocked > nWaitersGone ) { // HARMLESS RACE CONDITION!
|
|
139
|
+
* sem_wait( semBlockLock ); // close the gate
|
|
140
|
+
* if ( 0 != nWaitersGone ) {
|
|
141
|
+
* nWaitersBlocked -= nWaitersGone;
|
|
142
|
+
* nWaitersGone = 0;
|
|
143
|
+
* }
|
|
144
|
+
* if (bAll) {
|
|
145
|
+
* nSignalsToIssue = nWaitersToUnblock = nWaitersBlocked;
|
|
146
|
+
* nWaitersBlocked = 0;
|
|
147
|
+
* }
|
|
148
|
+
* else {
|
|
149
|
+
* nSignalsToIssue = nWaitersToUnblock = 1;
|
|
150
|
+
* nWaitersBlocked--;
|
|
151
|
+
* }
|
|
152
|
+
* }
|
|
153
|
+
* else { // NO-OP
|
|
154
|
+
* return unlock( mtxUnblockLock );
|
|
155
|
+
* }
|
|
156
|
+
*
|
|
157
|
+
* unlock( mtxUnblockLock );
|
|
158
|
+
* sem_post( semBlockQueue,nSignalsToIssue );
|
|
159
|
+
* return result;
|
|
160
|
+
* }
|
|
161
|
+
* -------------------------------------------------------------
|
|
162
|
+
*
|
|
163
|
+
* Algorithm 9 / IMPL_SEM,UNBLOCK_STRATEGY == UNBLOCK_ALL
|
|
164
|
+
*
|
|
165
|
+
* presented below in pseudo-code; basically 8a...
|
|
166
|
+
* ...BUT W/O "spurious wakes" prevention:
|
|
167
|
+
*
|
|
168
|
+
*
|
|
169
|
+
* given:
|
|
170
|
+
* semBlockLock - bin.semaphore
|
|
171
|
+
* semBlockQueue - semaphore
|
|
172
|
+
* mtxExternal - mutex or CS
|
|
173
|
+
* mtxUnblockLock - mutex or CS
|
|
174
|
+
* nWaitersGone - int
|
|
175
|
+
* nWaitersBlocked - int
|
|
176
|
+
* nWaitersToUnblock - int
|
|
177
|
+
*
|
|
178
|
+
* wait( timeout ) {
|
|
179
|
+
*
|
|
180
|
+
* [auto: register int result ] // error checking omitted
|
|
181
|
+
* [auto: register int nSignalsWasLeft ]
|
|
182
|
+
*
|
|
183
|
+
* sem_wait( semBlockLock );
|
|
184
|
+
* ++nWaitersBlocked;
|
|
185
|
+
* sem_post( semBlockLock );
|
|
186
|
+
*
|
|
187
|
+
* unlock( mtxExternal );
|
|
188
|
+
* bTimedOut = sem_wait( semBlockQueue,timeout );
|
|
189
|
+
*
|
|
190
|
+
* lock( mtxUnblockLock );
|
|
191
|
+
* if ( 0 != (nSignalsWasLeft = nWaitersToUnblock) ) {
|
|
192
|
+
* --nWaitersToUnblock;
|
|
193
|
+
* }
|
|
194
|
+
* else if ( INT_MAX/2 == ++nWaitersGone ) { // timeout/canceled or
|
|
195
|
+
* // spurious semaphore :-)
|
|
196
|
+
* sem_wait( semBlockLock );
|
|
197
|
+
* nWaitersBlocked -= nWaitersGone; // something is going on here
|
|
198
|
+
* // - test of timeouts? :-)
|
|
199
|
+
* sem_post( semBlockLock );
|
|
200
|
+
* nWaitersGone = 0;
|
|
201
|
+
* }
|
|
202
|
+
* unlock( mtxUnblockLock );
|
|
203
|
+
*
|
|
204
|
+
* if ( 1 == nSignalsWasLeft ) {
|
|
205
|
+
* sem_post( semBlockLock ); // open the gate
|
|
206
|
+
* }
|
|
207
|
+
*
|
|
208
|
+
* lock( mtxExternal );
|
|
209
|
+
*
|
|
210
|
+
* return ( bTimedOut ) ? ETIMEOUT : 0;
|
|
211
|
+
* }
|
|
212
|
+
*
|
|
213
|
+
* signal(bAll) {
|
|
214
|
+
*
|
|
215
|
+
* [auto: register int result ]
|
|
216
|
+
* [auto: register int nSignalsToIssue]
|
|
217
|
+
*
|
|
218
|
+
* lock( mtxUnblockLock );
|
|
219
|
+
*
|
|
220
|
+
* if ( 0 != nWaitersToUnblock ) { // the gate is closed!!!
|
|
221
|
+
* if ( 0 == nWaitersBlocked ) { // NO-OP
|
|
222
|
+
* return unlock( mtxUnblockLock );
|
|
223
|
+
* }
|
|
224
|
+
* if (bAll) {
|
|
225
|
+
* nWaitersToUnblock += nSignalsToIssue=nWaitersBlocked;
|
|
226
|
+
* nWaitersBlocked = 0;
|
|
227
|
+
* }
|
|
228
|
+
* else {
|
|
229
|
+
* nSignalsToIssue = 1;
|
|
230
|
+
* ++nWaitersToUnblock;
|
|
231
|
+
* --nWaitersBlocked;
|
|
232
|
+
* }
|
|
233
|
+
* }
|
|
234
|
+
* else if ( nWaitersBlocked > nWaitersGone ) { // HARMLESS RACE CONDITION!
|
|
235
|
+
* sem_wait( semBlockLock ); // close the gate
|
|
236
|
+
* if ( 0 != nWaitersGone ) {
|
|
237
|
+
* nWaitersBlocked -= nWaitersGone;
|
|
238
|
+
* nWaitersGone = 0;
|
|
239
|
+
* }
|
|
240
|
+
* if (bAll) {
|
|
241
|
+
* nSignalsToIssue = nWaitersToUnblock = nWaitersBlocked;
|
|
242
|
+
* nWaitersBlocked = 0;
|
|
243
|
+
* }
|
|
244
|
+
* else {
|
|
245
|
+
* nSignalsToIssue = nWaitersToUnblock = 1;
|
|
246
|
+
* --nWaitersBlocked;
|
|
247
|
+
* }
|
|
248
|
+
* }
|
|
249
|
+
* else { // NO-OP
|
|
250
|
+
* return unlock( mtxUnblockLock );
|
|
251
|
+
* }
|
|
252
|
+
*
|
|
253
|
+
* unlock( mtxUnblockLock );
|
|
254
|
+
* sem_post( semBlockQueue,nSignalsToIssue );
|
|
255
|
+
* return result;
|
|
256
|
+
* }
|
|
257
|
+
* -------------------------------------------------------------
|
|
258
|
+
*
|
|
259
|
+
*/
|
|
260
|
+
|
|
261
|
+
#include "pthread.h"
|
|
262
|
+
#include "implement.h"
|
|
263
|
+
|
|
264
|
+
/*
|
|
265
|
+
* Arguments for cond_wait_cleanup, since we can only pass a
|
|
266
|
+
* single void * to it.
|
|
267
|
+
*/
|
|
268
|
+
typedef struct
|
|
269
|
+
{
|
|
270
|
+
pthread_mutex_t *mutexPtr;
|
|
271
|
+
pthread_cond_t cv;
|
|
272
|
+
int *resultPtr;
|
|
273
|
+
} ptw32_cond_wait_cleanup_args_t;
|
|
274
|
+
|
|
275
|
+
static void PTW32_CDECL
|
|
276
|
+
ptw32_cond_wait_cleanup (void *args)
|
|
277
|
+
{
|
|
278
|
+
ptw32_cond_wait_cleanup_args_t *cleanup_args =
|
|
279
|
+
(ptw32_cond_wait_cleanup_args_t *) args;
|
|
280
|
+
pthread_cond_t cv = cleanup_args->cv;
|
|
281
|
+
int *resultPtr = cleanup_args->resultPtr;
|
|
282
|
+
int nSignalsWasLeft;
|
|
283
|
+
int result;
|
|
284
|
+
|
|
285
|
+
/*
|
|
286
|
+
* Whether we got here as a result of signal/broadcast or because of
|
|
287
|
+
* timeout on wait or thread cancellation we indicate that we are no
|
|
288
|
+
* longer waiting. The waiter is responsible for adjusting waiters
|
|
289
|
+
* (to)unblock(ed) counts (protected by unblock lock).
|
|
290
|
+
*/
|
|
291
|
+
if ((result = pthread_mutex_lock (&(cv->mtxUnblockLock))) != 0)
|
|
292
|
+
{
|
|
293
|
+
*resultPtr = result;
|
|
294
|
+
return;
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
if (0 != (nSignalsWasLeft = cv->nWaitersToUnblock))
|
|
298
|
+
{
|
|
299
|
+
--(cv->nWaitersToUnblock);
|
|
300
|
+
}
|
|
301
|
+
else if (INT_MAX / 2 == ++(cv->nWaitersGone))
|
|
302
|
+
{
|
|
303
|
+
/* Use the non-cancellable version of sem_wait() */
|
|
304
|
+
if (ptw32_semwait (&(cv->semBlockLock)) != 0)
|
|
305
|
+
{
|
|
306
|
+
*resultPtr = errno;
|
|
307
|
+
/*
|
|
308
|
+
* This is a fatal error for this CV,
|
|
309
|
+
* so we deliberately don't unlock
|
|
310
|
+
* cv->mtxUnblockLock before returning.
|
|
311
|
+
*/
|
|
312
|
+
return;
|
|
313
|
+
}
|
|
314
|
+
cv->nWaitersBlocked -= cv->nWaitersGone;
|
|
315
|
+
if (sem_post (&(cv->semBlockLock)) != 0)
|
|
316
|
+
{
|
|
317
|
+
*resultPtr = errno;
|
|
318
|
+
/*
|
|
319
|
+
* This is a fatal error for this CV,
|
|
320
|
+
* so we deliberately don't unlock
|
|
321
|
+
* cv->mtxUnblockLock before returning.
|
|
322
|
+
*/
|
|
323
|
+
return;
|
|
324
|
+
}
|
|
325
|
+
cv->nWaitersGone = 0;
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
if ((result = pthread_mutex_unlock (&(cv->mtxUnblockLock))) != 0)
|
|
329
|
+
{
|
|
330
|
+
*resultPtr = result;
|
|
331
|
+
return;
|
|
332
|
+
}
|
|
333
|
+
|
|
334
|
+
if (1 == nSignalsWasLeft)
|
|
335
|
+
{
|
|
336
|
+
if (sem_post (&(cv->semBlockLock)) != 0)
|
|
337
|
+
{
|
|
338
|
+
*resultPtr = errno;
|
|
339
|
+
return;
|
|
340
|
+
}
|
|
341
|
+
}
|
|
342
|
+
|
|
343
|
+
/*
|
|
344
|
+
* XSH: Upon successful return, the mutex has been locked and is owned
|
|
345
|
+
* by the calling thread.
|
|
346
|
+
*/
|
|
347
|
+
if ((result = pthread_mutex_lock (cleanup_args->mutexPtr)) != 0)
|
|
348
|
+
{
|
|
349
|
+
*resultPtr = result;
|
|
350
|
+
}
|
|
351
|
+
} /* ptw32_cond_wait_cleanup */
|
|
352
|
+
|
|
353
|
+
static INLINE int
|
|
354
|
+
ptw32_cond_timedwait (pthread_cond_t * cond,
|
|
355
|
+
pthread_mutex_t * mutex, const struct timespec *abstime)
|
|
356
|
+
{
|
|
357
|
+
int result = 0;
|
|
358
|
+
pthread_cond_t cv;
|
|
359
|
+
ptw32_cond_wait_cleanup_args_t cleanup_args;
|
|
360
|
+
|
|
361
|
+
if (cond == NULL || *cond == NULL)
|
|
362
|
+
{
|
|
363
|
+
return EINVAL;
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
/*
|
|
367
|
+
* We do a quick check to see if we need to do more work
|
|
368
|
+
* to initialise a static condition variable. We check
|
|
369
|
+
* again inside the guarded section of ptw32_cond_check_need_init()
|
|
370
|
+
* to avoid race conditions.
|
|
371
|
+
*/
|
|
372
|
+
if (*cond == PTHREAD_COND_INITIALIZER)
|
|
373
|
+
{
|
|
374
|
+
result = ptw32_cond_check_need_init (cond);
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
if (result != 0 && result != EBUSY)
|
|
378
|
+
{
|
|
379
|
+
return result;
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
cv = *cond;
|
|
383
|
+
|
|
384
|
+
/* Thread can be cancelled in sem_wait() but this is OK */
|
|
385
|
+
if (sem_wait (&(cv->semBlockLock)) != 0)
|
|
386
|
+
{
|
|
387
|
+
return errno;
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
++(cv->nWaitersBlocked);
|
|
391
|
+
|
|
392
|
+
if (sem_post (&(cv->semBlockLock)) != 0)
|
|
393
|
+
{
|
|
394
|
+
return errno;
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
/*
|
|
398
|
+
* Setup this waiter cleanup handler
|
|
399
|
+
*/
|
|
400
|
+
cleanup_args.mutexPtr = mutex;
|
|
401
|
+
cleanup_args.cv = cv;
|
|
402
|
+
cleanup_args.resultPtr = &result;
|
|
403
|
+
|
|
404
|
+
#if defined(_MSC_VER) && _MSC_VER < 1400
|
|
405
|
+
#pragma inline_depth(0)
|
|
406
|
+
#endif
|
|
407
|
+
pthread_cleanup_push (ptw32_cond_wait_cleanup, (void *) &cleanup_args);
|
|
408
|
+
|
|
409
|
+
/*
|
|
410
|
+
* Now we can release 'mutex' and...
|
|
411
|
+
*/
|
|
412
|
+
if ((result = pthread_mutex_unlock (mutex)) == 0)
|
|
413
|
+
{
|
|
414
|
+
|
|
415
|
+
/*
|
|
416
|
+
* ...wait to be awakened by
|
|
417
|
+
* pthread_cond_signal, or
|
|
418
|
+
* pthread_cond_broadcast, or
|
|
419
|
+
* timeout, or
|
|
420
|
+
* thread cancellation
|
|
421
|
+
*
|
|
422
|
+
* Note:
|
|
423
|
+
*
|
|
424
|
+
* sem_timedwait is a cancellation point,
|
|
425
|
+
* hence providing the mechanism for making
|
|
426
|
+
* pthread_cond_wait a cancellation point.
|
|
427
|
+
* We use the cleanup mechanism to ensure we
|
|
428
|
+
* re-lock the mutex and adjust (to)unblock(ed) waiters
|
|
429
|
+
* counts if we are cancelled, timed out or signalled.
|
|
430
|
+
*/
|
|
431
|
+
if (sem_timedwait (&(cv->semBlockQueue), abstime) != 0)
|
|
432
|
+
{
|
|
433
|
+
result = errno;
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
/*
|
|
438
|
+
* Always cleanup
|
|
439
|
+
*/
|
|
440
|
+
pthread_cleanup_pop (1);
|
|
441
|
+
#if defined(_MSC_VER) && _MSC_VER < 1400
|
|
442
|
+
#pragma inline_depth()
|
|
443
|
+
#endif
|
|
444
|
+
|
|
445
|
+
/*
|
|
446
|
+
* "result" can be modified by the cleanup handler.
|
|
447
|
+
*/
|
|
448
|
+
return result;
|
|
449
|
+
|
|
450
|
+
} /* ptw32_cond_timedwait */
|
|
451
|
+
|
|
452
|
+
|
|
453
|
+
int
|
|
454
|
+
pthread_cond_wait (pthread_cond_t * cond, pthread_mutex_t * mutex)
|
|
455
|
+
/*
|
|
456
|
+
* ------------------------------------------------------
|
|
457
|
+
* DOCPUBLIC
|
|
458
|
+
* This function waits on a condition variable until
|
|
459
|
+
* awakened by a signal or broadcast.
|
|
460
|
+
*
|
|
461
|
+
* Caller MUST be holding the mutex lock; the
|
|
462
|
+
* lock is released and the caller is blocked waiting
|
|
463
|
+
* on 'cond'. When 'cond' is signaled, the mutex
|
|
464
|
+
* is re-acquired before returning to the caller.
|
|
465
|
+
*
|
|
466
|
+
* PARAMETERS
|
|
467
|
+
* cond
|
|
468
|
+
* pointer to an instance of pthread_cond_t
|
|
469
|
+
*
|
|
470
|
+
* mutex
|
|
471
|
+
* pointer to an instance of pthread_mutex_t
|
|
472
|
+
*
|
|
473
|
+
*
|
|
474
|
+
* DESCRIPTION
|
|
475
|
+
* This function waits on a condition variable until
|
|
476
|
+
* awakened by a signal or broadcast.
|
|
477
|
+
*
|
|
478
|
+
* NOTES:
|
|
479
|
+
*
|
|
480
|
+
* 1) The function must be called with 'mutex' LOCKED
|
|
481
|
+
* by the calling thread, or undefined behaviour
|
|
482
|
+
* will result.
|
|
483
|
+
*
|
|
484
|
+
* 2) This routine atomically releases 'mutex' and causes
|
|
485
|
+
* the calling thread to block on the condition variable.
|
|
486
|
+
* The blocked thread may be awakened by
|
|
487
|
+
* pthread_cond_signal or
|
|
488
|
+
* pthread_cond_broadcast.
|
|
489
|
+
*
|
|
490
|
+
* Upon successful completion, the 'mutex' has been locked and
|
|
491
|
+
* is owned by the calling thread.
|
|
492
|
+
*
|
|
493
|
+
*
|
|
494
|
+
* RESULTS
|
|
495
|
+
* 0 caught condition; mutex released,
|
|
496
|
+
* EINVAL 'cond' or 'mutex' is invalid,
|
|
497
|
+
* EINVAL different mutexes for concurrent waits,
|
|
498
|
+
* EINVAL mutex is not held by the calling thread,
|
|
499
|
+
*
|
|
500
|
+
* ------------------------------------------------------
|
|
501
|
+
*/
|
|
502
|
+
{
|
|
503
|
+
/*
|
|
504
|
+
* The NULL abstime arg means INFINITE waiting.
|
|
505
|
+
*/
|
|
506
|
+
return (ptw32_cond_timedwait (cond, mutex, NULL));
|
|
507
|
+
|
|
508
|
+
} /* pthread_cond_wait */
|
|
509
|
+
|
|
510
|
+
|
|
511
|
+
int
|
|
512
|
+
pthread_cond_timedwait (pthread_cond_t * cond,
|
|
513
|
+
pthread_mutex_t * mutex,
|
|
514
|
+
const struct timespec *abstime)
|
|
515
|
+
/*
|
|
516
|
+
* ------------------------------------------------------
|
|
517
|
+
* DOCPUBLIC
|
|
518
|
+
* This function waits on a condition variable either until
|
|
519
|
+
* awakened by a signal or broadcast; or until the time
|
|
520
|
+
* specified by abstime passes.
|
|
521
|
+
*
|
|
522
|
+
* PARAMETERS
|
|
523
|
+
* cond
|
|
524
|
+
* pointer to an instance of pthread_cond_t
|
|
525
|
+
*
|
|
526
|
+
* mutex
|
|
527
|
+
* pointer to an instance of pthread_mutex_t
|
|
528
|
+
*
|
|
529
|
+
* abstime
|
|
530
|
+
* pointer to an instance of (const struct timespec)
|
|
531
|
+
*
|
|
532
|
+
*
|
|
533
|
+
* DESCRIPTION
|
|
534
|
+
* This function waits on a condition variable either until
|
|
535
|
+
* awakened by a signal or broadcast; or until the time
|
|
536
|
+
* specified by abstime passes.
|
|
537
|
+
*
|
|
538
|
+
* NOTES:
|
|
539
|
+
* 1) The function must be called with 'mutex' LOCKED
|
|
540
|
+
* by the calling thread, or undefined behaviour
|
|
541
|
+
* will result.
|
|
542
|
+
*
|
|
543
|
+
* 2) This routine atomically releases 'mutex' and causes
|
|
544
|
+
* the calling thread to block on the condition variable.
|
|
545
|
+
* The blocked thread may be awakened by
|
|
546
|
+
* pthread_cond_signal or
|
|
547
|
+
* pthread_cond_broadcast.
|
|
548
|
+
*
|
|
549
|
+
*
|
|
550
|
+
* RESULTS
|
|
551
|
+
* 0 caught condition; mutex released,
|
|
552
|
+
* EINVAL 'cond', 'mutex', or abstime is invalid,
|
|
553
|
+
* EINVAL different mutexes for concurrent waits,
|
|
554
|
+
* EINVAL mutex is not held by the calling thread,
|
|
555
|
+
* ETIMEDOUT abstime ellapsed before cond was signaled.
|
|
556
|
+
*
|
|
557
|
+
* ------------------------------------------------------
|
|
558
|
+
*/
|
|
559
|
+
{
|
|
560
|
+
if (abstime == NULL)
|
|
561
|
+
{
|
|
562
|
+
return EINVAL;
|
|
563
|
+
}
|
|
564
|
+
|
|
565
|
+
return (ptw32_cond_timedwait (cond, mutex, abstime));
|
|
566
|
+
|
|
567
|
+
} /* pthread_cond_timedwait */
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/*
|
|
2
|
+
* condvar_attr_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
|
+
|
|
42
|
+
int
|
|
43
|
+
pthread_condattr_destroy (pthread_condattr_t * attr)
|
|
44
|
+
/*
|
|
45
|
+
* ------------------------------------------------------
|
|
46
|
+
* DOCPUBLIC
|
|
47
|
+
* Destroys a condition variable attributes object.
|
|
48
|
+
* The object can no longer be used.
|
|
49
|
+
*
|
|
50
|
+
* PARAMETERS
|
|
51
|
+
* attr
|
|
52
|
+
* pointer to an instance of pthread_condattr_t
|
|
53
|
+
*
|
|
54
|
+
*
|
|
55
|
+
* DESCRIPTION
|
|
56
|
+
* Destroys a condition variable attributes object.
|
|
57
|
+
* The object can no longer be used.
|
|
58
|
+
*
|
|
59
|
+
* NOTES:
|
|
60
|
+
* 1) Does not affect condition variables created
|
|
61
|
+
* using 'attr'
|
|
62
|
+
*
|
|
63
|
+
* RESULTS
|
|
64
|
+
* 0 successfully released attr,
|
|
65
|
+
* EINVAL 'attr' is invalid.
|
|
66
|
+
*
|
|
67
|
+
* ------------------------------------------------------
|
|
68
|
+
*/
|
|
69
|
+
{
|
|
70
|
+
int result = 0;
|
|
71
|
+
|
|
72
|
+
if (attr == NULL || *attr == NULL)
|
|
73
|
+
{
|
|
74
|
+
result = EINVAL;
|
|
75
|
+
}
|
|
76
|
+
else
|
|
77
|
+
{
|
|
78
|
+
(void) free (*attr);
|
|
79
|
+
|
|
80
|
+
*attr = NULL;
|
|
81
|
+
result = 0;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
return result;
|
|
85
|
+
|
|
86
|
+
} /* pthread_condattr_destroy */
|