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.
Files changed (424) hide show
  1. data/LICENSE +19 -0
  2. data/README.md +25 -0
  3. data/ext/noderb_extension/extconf.rb +11 -0
  4. data/ext/noderb_extension/libuv/AUTHORS +11 -0
  5. data/ext/noderb_extension/libuv/LICENSE +48 -0
  6. data/ext/noderb_extension/libuv/Makefile +119 -0
  7. data/ext/noderb_extension/libuv/README +45 -0
  8. data/ext/noderb_extension/libuv/build/all.gyp +254 -0
  9. data/ext/noderb_extension/libuv/build/common.gypi +13 -0
  10. data/ext/noderb_extension/libuv/build/gyp_uv +43 -0
  11. data/ext/noderb_extension/libuv/config-mingw.mk +67 -0
  12. data/ext/noderb_extension/libuv/config-unix.mk +121 -0
  13. data/ext/noderb_extension/libuv/create-msvs-files.bat +14 -0
  14. data/ext/noderb_extension/libuv/deps/pthread-win32/ANNOUNCE +482 -0
  15. data/ext/noderb_extension/libuv/deps/pthread-win32/BUGS +141 -0
  16. data/ext/noderb_extension/libuv/deps/pthread-win32/Bmakefile +268 -0
  17. data/ext/noderb_extension/libuv/deps/pthread-win32/CONTRIBUTORS +140 -0
  18. data/ext/noderb_extension/libuv/deps/pthread-win32/COPYING +150 -0
  19. data/ext/noderb_extension/libuv/deps/pthread-win32/COPYING.LIB +504 -0
  20. data/ext/noderb_extension/libuv/deps/pthread-win32/ChangeLog +5194 -0
  21. data/ext/noderb_extension/libuv/deps/pthread-win32/FAQ +451 -0
  22. data/ext/noderb_extension/libuv/deps/pthread-win32/GNUmakefile +593 -0
  23. data/ext/noderb_extension/libuv/deps/pthread-win32/MAINTAINERS +4 -0
  24. data/ext/noderb_extension/libuv/deps/pthread-win32/Makefile +516 -0
  25. data/ext/noderb_extension/libuv/deps/pthread-win32/NEWS +1245 -0
  26. data/ext/noderb_extension/libuv/deps/pthread-win32/Nmakefile +24 -0
  27. data/ext/noderb_extension/libuv/deps/pthread-win32/Nmakefile.tests +260 -0
  28. data/ext/noderb_extension/libuv/deps/pthread-win32/PROGRESS +4 -0
  29. data/ext/noderb_extension/libuv/deps/pthread-win32/README +601 -0
  30. data/ext/noderb_extension/libuv/deps/pthread-win32/README.Borland +57 -0
  31. data/ext/noderb_extension/libuv/deps/pthread-win32/README.CV +3036 -0
  32. data/ext/noderb_extension/libuv/deps/pthread-win32/README.NONPORTABLE +783 -0
  33. data/ext/noderb_extension/libuv/deps/pthread-win32/README.Watcom +62 -0
  34. data/ext/noderb_extension/libuv/deps/pthread-win32/README.WinCE +6 -0
  35. data/ext/noderb_extension/libuv/deps/pthread-win32/TODO +7 -0
  36. data/ext/noderb_extension/libuv/deps/pthread-win32/WinCE-PORT +222 -0
  37. data/ext/noderb_extension/libuv/deps/pthread-win32/attr.c +53 -0
  38. data/ext/noderb_extension/libuv/deps/pthread-win32/autostatic.c +69 -0
  39. data/ext/noderb_extension/libuv/deps/pthread-win32/barrier.c +47 -0
  40. data/ext/noderb_extension/libuv/deps/pthread-win32/build/all.gyp +207 -0
  41. data/ext/noderb_extension/libuv/deps/pthread-win32/builddmc.bat +9 -0
  42. data/ext/noderb_extension/libuv/deps/pthread-win32/cancel.c +44 -0
  43. data/ext/noderb_extension/libuv/deps/pthread-win32/cleanup.c +148 -0
  44. data/ext/noderb_extension/libuv/deps/pthread-win32/condvar.c +50 -0
  45. data/ext/noderb_extension/libuv/deps/pthread-win32/config.h +153 -0
  46. data/ext/noderb_extension/libuv/deps/pthread-win32/context.h +74 -0
  47. data/ext/noderb_extension/libuv/deps/pthread-win32/create.c +308 -0
  48. data/ext/noderb_extension/libuv/deps/pthread-win32/dll.c +92 -0
  49. data/ext/noderb_extension/libuv/deps/pthread-win32/errno.c +94 -0
  50. data/ext/noderb_extension/libuv/deps/pthread-win32/exit.c +44 -0
  51. data/ext/noderb_extension/libuv/deps/pthread-win32/fork.c +39 -0
  52. data/ext/noderb_extension/libuv/deps/pthread-win32/global.c +107 -0
  53. data/ext/noderb_extension/libuv/deps/pthread-win32/implement.h +944 -0
  54. data/ext/noderb_extension/libuv/deps/pthread-win32/misc.c +50 -0
  55. data/ext/noderb_extension/libuv/deps/pthread-win32/mutex.c +62 -0
  56. data/ext/noderb_extension/libuv/deps/pthread-win32/need_errno.h +145 -0
  57. data/ext/noderb_extension/libuv/deps/pthread-win32/nonportable.c +47 -0
  58. data/ext/noderb_extension/libuv/deps/pthread-win32/private.c +54 -0
  59. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread.c +66 -0
  60. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread.dsp +142 -0
  61. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread.dsw +29 -0
  62. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread.h +1368 -0
  63. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_destroy.c +79 -0
  64. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_getdetachstate.c +86 -0
  65. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_getinheritsched.c +51 -0
  66. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_getschedparam.c +52 -0
  67. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_getschedpolicy.c +61 -0
  68. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_getscope.c +54 -0
  69. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_getstackaddr.c +97 -0
  70. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_getstacksize.c +100 -0
  71. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_init.c +117 -0
  72. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_setdetachstate.c +91 -0
  73. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_setinheritsched.c +57 -0
  74. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_setschedparam.c +63 -0
  75. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_setschedpolicy.c +55 -0
  76. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_setscope.c +62 -0
  77. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_setstackaddr.c +97 -0
  78. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_attr_setstacksize.c +110 -0
  79. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_barrier_destroy.c +103 -0
  80. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_barrier_init.c +69 -0
  81. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_barrier_wait.c +104 -0
  82. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_barrierattr_destroy.c +83 -0
  83. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_barrierattr_getpshared.c +95 -0
  84. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_barrierattr_init.c +85 -0
  85. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_barrierattr_setpshared.c +119 -0
  86. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_cancel.c +189 -0
  87. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_cond_destroy.c +253 -0
  88. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_cond_init.c +167 -0
  89. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_cond_signal.c +231 -0
  90. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_cond_wait.c +567 -0
  91. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_condattr_destroy.c +86 -0
  92. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_condattr_getpshared.c +97 -0
  93. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_condattr_init.c +87 -0
  94. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_condattr_setpshared.c +117 -0
  95. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_delay_np.c +172 -0
  96. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_detach.c +136 -0
  97. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_equal.c +76 -0
  98. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_exit.c +106 -0
  99. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_getconcurrency.c +45 -0
  100. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_getschedparam.c +75 -0
  101. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_getspecific.c +87 -0
  102. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_getunique_np.c +47 -0
  103. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_getw32threadhandle_np.c +65 -0
  104. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_join.c +157 -0
  105. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_key_create.c +108 -0
  106. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_key_delete.c +125 -0
  107. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_kill.c +105 -0
  108. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutex_consistent.c +187 -0
  109. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutex_destroy.c +148 -0
  110. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutex_init.c +130 -0
  111. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutex_lock.c +269 -0
  112. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutex_timedlock.c +324 -0
  113. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutex_trylock.c +154 -0
  114. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutex_unlock.c +175 -0
  115. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_destroy.c +83 -0
  116. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_getkind_np.c +44 -0
  117. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_getpshared.c +95 -0
  118. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_getrobust.c +113 -0
  119. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_gettype.c +56 -0
  120. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_init.c +86 -0
  121. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_setkind_np.c +44 -0
  122. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_setpshared.c +119 -0
  123. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_setrobust.c +119 -0
  124. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_mutexattr_settype.c +143 -0
  125. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_num_processors_np.c +56 -0
  126. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_once.c +79 -0
  127. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlock_destroy.c +143 -0
  128. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlock_init.c +109 -0
  129. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlock_rdlock.c +102 -0
  130. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlock_timedrdlock.c +109 -0
  131. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlock_timedwrlock.c +139 -0
  132. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlock_tryrdlock.c +102 -0
  133. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlock_trywrlock.c +122 -0
  134. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlock_unlock.c +93 -0
  135. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlock_wrlock.c +133 -0
  136. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlockattr_destroy.c +84 -0
  137. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlockattr_getpshared.c +97 -0
  138. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlockattr_init.c +83 -0
  139. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_rwlockattr_setpshared.c +120 -0
  140. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_self.c +141 -0
  141. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_setcancelstate.c +125 -0
  142. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_setcanceltype.c +126 -0
  143. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_setconcurrency.c +53 -0
  144. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_setschedparam.c +123 -0
  145. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_setspecific.c +167 -0
  146. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_spin_destroy.c +111 -0
  147. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_spin_init.c +123 -0
  148. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_spin_lock.c +80 -0
  149. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_spin_trylock.c +77 -0
  150. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_spin_unlock.c +71 -0
  151. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_testcancel.c +103 -0
  152. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_timechange_handler_np.c +108 -0
  153. data/ext/noderb_extension/libuv/deps/pthread-win32/pthread_win32_attach_detach_np.c +258 -0
  154. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_MCS_lock.c +278 -0
  155. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_callUserDestroyRoutines.c +232 -0
  156. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_calloc.c +56 -0
  157. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_cond_check_need_init.c +78 -0
  158. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_getprocessors.c +91 -0
  159. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_is_attr.c +47 -0
  160. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_mutex_check_need_init.c +92 -0
  161. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_new.c +94 -0
  162. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_processInitialize.c +92 -0
  163. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_processTerminate.c +105 -0
  164. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_relmillisecs.c +132 -0
  165. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_reuse.c +151 -0
  166. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_rwlock_cancelwrwait.c +50 -0
  167. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_rwlock_check_need_init.c +77 -0
  168. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_semwait.c +135 -0
  169. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_spinlock_check_need_init.c +78 -0
  170. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_threadDestroy.c +79 -0
  171. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_threadStart.c +357 -0
  172. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_throw.c +189 -0
  173. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_timespec.c +83 -0
  174. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_tkAssocCreate.c +118 -0
  175. data/ext/noderb_extension/libuv/deps/pthread-win32/ptw32_tkAssocDestroy.c +114 -0
  176. data/ext/noderb_extension/libuv/deps/pthread-win32/rwlock.c +51 -0
  177. data/ext/noderb_extension/libuv/deps/pthread-win32/sched.c +53 -0
  178. data/ext/noderb_extension/libuv/deps/pthread-win32/sched.h +183 -0
  179. data/ext/noderb_extension/libuv/deps/pthread-win32/sched_get_priority_max.c +134 -0
  180. data/ext/noderb_extension/libuv/deps/pthread-win32/sched_get_priority_min.c +135 -0
  181. data/ext/noderb_extension/libuv/deps/pthread-win32/sched_getscheduler.c +71 -0
  182. data/ext/noderb_extension/libuv/deps/pthread-win32/sched_setscheduler.c +83 -0
  183. data/ext/noderb_extension/libuv/deps/pthread-win32/sched_yield.c +71 -0
  184. data/ext/noderb_extension/libuv/deps/pthread-win32/sem_close.c +58 -0
  185. data/ext/noderb_extension/libuv/deps/pthread-win32/sem_destroy.c +144 -0
  186. data/ext/noderb_extension/libuv/deps/pthread-win32/sem_getvalue.c +110 -0
  187. data/ext/noderb_extension/libuv/deps/pthread-win32/sem_init.c +169 -0
  188. data/ext/noderb_extension/libuv/deps/pthread-win32/sem_open.c +58 -0
  189. data/ext/noderb_extension/libuv/deps/pthread-win32/sem_post.c +128 -0
  190. data/ext/noderb_extension/libuv/deps/pthread-win32/sem_post_multiple.c +142 -0
  191. data/ext/noderb_extension/libuv/deps/pthread-win32/sem_timedwait.c +238 -0
  192. data/ext/noderb_extension/libuv/deps/pthread-win32/sem_trywait.c +117 -0
  193. data/ext/noderb_extension/libuv/deps/pthread-win32/sem_unlink.c +58 -0
  194. data/ext/noderb_extension/libuv/deps/pthread-win32/sem_wait.c +187 -0
  195. data/ext/noderb_extension/libuv/deps/pthread-win32/semaphore.c +69 -0
  196. data/ext/noderb_extension/libuv/deps/pthread-win32/semaphore.h +169 -0
  197. data/ext/noderb_extension/libuv/deps/pthread-win32/signal.c +179 -0
  198. data/ext/noderb_extension/libuv/deps/pthread-win32/spin.c +46 -0
  199. data/ext/noderb_extension/libuv/deps/pthread-win32/sync.c +43 -0
  200. data/ext/noderb_extension/libuv/deps/pthread-win32/tsd.c +44 -0
  201. data/ext/noderb_extension/libuv/deps/pthread-win32/version.rc +388 -0
  202. data/ext/noderb_extension/libuv/deps/pthread-win32/w32_CancelableWait.c +161 -0
  203. data/ext/noderb_extension/libuv/doc/desired-api.md +159 -0
  204. data/ext/noderb_extension/libuv/doc/iocp-links.html +574 -0
  205. data/ext/noderb_extension/libuv/include/ares.h +582 -0
  206. data/ext/noderb_extension/libuv/include/ares_version.h +24 -0
  207. data/ext/noderb_extension/libuv/include/eio.h +376 -0
  208. data/ext/noderb_extension/libuv/include/ev.h +835 -0
  209. data/ext/noderb_extension/libuv/include/ngx-queue.h +102 -0
  210. data/ext/noderb_extension/libuv/include/tree.h +762 -0
  211. data/ext/noderb_extension/libuv/include/uv-unix.h +138 -0
  212. data/ext/noderb_extension/libuv/include/uv-win.h +187 -0
  213. data/ext/noderb_extension/libuv/include/uv.h +635 -0
  214. data/ext/noderb_extension/libuv/src/ares/AUTHORS +37 -0
  215. data/ext/noderb_extension/libuv/src/ares/CHANGES +1198 -0
  216. data/ext/noderb_extension/libuv/src/ares/CMakeLists.txt +22 -0
  217. data/ext/noderb_extension/libuv/src/ares/NEWS +21 -0
  218. data/ext/noderb_extension/libuv/src/ares/README +60 -0
  219. data/ext/noderb_extension/libuv/src/ares/README.cares +13 -0
  220. data/ext/noderb_extension/libuv/src/ares/README.msvc +118 -0
  221. data/ext/noderb_extension/libuv/src/ares/README.node +21 -0
  222. data/ext/noderb_extension/libuv/src/ares/RELEASE-NOTES +25 -0
  223. data/ext/noderb_extension/libuv/src/ares/TODO +23 -0
  224. data/ext/noderb_extension/libuv/src/ares/ares__close_sockets.c +66 -0
  225. data/ext/noderb_extension/libuv/src/ares/ares__get_hostent.c +263 -0
  226. data/ext/noderb_extension/libuv/src/ares/ares__read_line.c +71 -0
  227. data/ext/noderb_extension/libuv/src/ares/ares__timeval.c +111 -0
  228. data/ext/noderb_extension/libuv/src/ares/ares_cancel.c +63 -0
  229. data/ext/noderb_extension/libuv/src/ares/ares_data.c +190 -0
  230. data/ext/noderb_extension/libuv/src/ares/ares_data.h +65 -0
  231. data/ext/noderb_extension/libuv/src/ares/ares_destroy.c +105 -0
  232. data/ext/noderb_extension/libuv/src/ares/ares_dns.h +90 -0
  233. data/ext/noderb_extension/libuv/src/ares/ares_expand_name.c +193 -0
  234. data/ext/noderb_extension/libuv/src/ares/ares_expand_string.c +75 -0
  235. data/ext/noderb_extension/libuv/src/ares/ares_fds.c +62 -0
  236. data/ext/noderb_extension/libuv/src/ares/ares_free_hostent.c +39 -0
  237. data/ext/noderb_extension/libuv/src/ares/ares_free_string.c +25 -0
  238. data/ext/noderb_extension/libuv/src/ares/ares_gethostbyaddr.c +292 -0
  239. data/ext/noderb_extension/libuv/src/ares/ares_gethostbyname.c +515 -0
  240. data/ext/noderb_extension/libuv/src/ares/ares_getnameinfo.c +426 -0
  241. data/ext/noderb_extension/libuv/src/ares/ares_getopt.c +122 -0
  242. data/ext/noderb_extension/libuv/src/ares/ares_getopt.h +53 -0
  243. data/ext/noderb_extension/libuv/src/ares/ares_getsock.c +72 -0
  244. data/ext/noderb_extension/libuv/src/ares/ares_init.c +1665 -0
  245. data/ext/noderb_extension/libuv/src/ares/ares_ipv6.h +78 -0
  246. data/ext/noderb_extension/libuv/src/ares/ares_library_init.c +132 -0
  247. data/ext/noderb_extension/libuv/src/ares/ares_library_init.h +39 -0
  248. data/ext/noderb_extension/libuv/src/ares/ares_llist.c +86 -0
  249. data/ext/noderb_extension/libuv/src/ares/ares_llist.h +42 -0
  250. data/ext/noderb_extension/libuv/src/ares/ares_mkquery.c +195 -0
  251. data/ext/noderb_extension/libuv/src/ares/ares_nowarn.c +59 -0
  252. data/ext/noderb_extension/libuv/src/ares/ares_nowarn.h +24 -0
  253. data/ext/noderb_extension/libuv/src/ares/ares_options.c +253 -0
  254. data/ext/noderb_extension/libuv/src/ares/ares_parse_a_reply.c +260 -0
  255. data/ext/noderb_extension/libuv/src/ares/ares_parse_aaaa_reply.c +256 -0
  256. data/ext/noderb_extension/libuv/src/ares/ares_parse_mx_reply.c +170 -0
  257. data/ext/noderb_extension/libuv/src/ares/ares_parse_ns_reply.c +182 -0
  258. data/ext/noderb_extension/libuv/src/ares/ares_parse_ptr_reply.c +208 -0
  259. data/ext/noderb_extension/libuv/src/ares/ares_parse_srv_reply.c +179 -0
  260. data/ext/noderb_extension/libuv/src/ares/ares_parse_txt_reply.c +201 -0
  261. data/ext/noderb_extension/libuv/src/ares/ares_private.h +351 -0
  262. data/ext/noderb_extension/libuv/src/ares/ares_process.c +1296 -0
  263. data/ext/noderb_extension/libuv/src/ares/ares_query.c +183 -0
  264. data/ext/noderb_extension/libuv/src/ares/ares_rules.h +144 -0
  265. data/ext/noderb_extension/libuv/src/ares/ares_search.c +322 -0
  266. data/ext/noderb_extension/libuv/src/ares/ares_send.c +134 -0
  267. data/ext/noderb_extension/libuv/src/ares/ares_setup.h +191 -0
  268. data/ext/noderb_extension/libuv/src/ares/ares_strcasecmp.c +66 -0
  269. data/ext/noderb_extension/libuv/src/ares/ares_strcasecmp.h +30 -0
  270. data/ext/noderb_extension/libuv/src/ares/ares_strdup.c +42 -0
  271. data/ext/noderb_extension/libuv/src/ares/ares_strdup.h +26 -0
  272. data/ext/noderb_extension/libuv/src/ares/ares_strerror.c +56 -0
  273. data/ext/noderb_extension/libuv/src/ares/ares_timeout.c +80 -0
  274. data/ext/noderb_extension/libuv/src/ares/ares_version.c +11 -0
  275. data/ext/noderb_extension/libuv/src/ares/ares_writev.c +79 -0
  276. data/ext/noderb_extension/libuv/src/ares/ares_writev.h +36 -0
  277. data/ext/noderb_extension/libuv/src/ares/bitncmp.c +59 -0
  278. data/ext/noderb_extension/libuv/src/ares/bitncmp.h +26 -0
  279. data/ext/noderb_extension/libuv/src/ares/config_cygwin/ares_config.h +510 -0
  280. data/ext/noderb_extension/libuv/src/ares/config_darwin/ares_config.h +510 -0
  281. data/ext/noderb_extension/libuv/src/ares/config_freebsd/ares_config.h +510 -0
  282. data/ext/noderb_extension/libuv/src/ares/config_linux/ares_config.h +510 -0
  283. data/ext/noderb_extension/libuv/src/ares/config_openbsd/ares_config.h +510 -0
  284. data/ext/noderb_extension/libuv/src/ares/config_sunos/ares_config.h +510 -0
  285. data/ext/noderb_extension/libuv/src/ares/config_win32/ares_config.h +369 -0
  286. data/ext/noderb_extension/libuv/src/ares/get_ver.awk +35 -0
  287. data/ext/noderb_extension/libuv/src/ares/inet_net_pton.c +450 -0
  288. data/ext/noderb_extension/libuv/src/ares/inet_net_pton.h +31 -0
  289. data/ext/noderb_extension/libuv/src/ares/inet_ntop.c +232 -0
  290. data/ext/noderb_extension/libuv/src/ares/inet_ntop.h +27 -0
  291. data/ext/noderb_extension/libuv/src/ares/nameser.h +193 -0
  292. data/ext/noderb_extension/libuv/src/ares/setup_once.h +488 -0
  293. data/ext/noderb_extension/libuv/src/ares/windows_port.c +22 -0
  294. data/ext/noderb_extension/libuv/src/eio/Changes +63 -0
  295. data/ext/noderb_extension/libuv/src/eio/LICENSE +36 -0
  296. data/ext/noderb_extension/libuv/src/eio/Makefile.am +15 -0
  297. data/ext/noderb_extension/libuv/src/eio/aclocal.m4 +8957 -0
  298. data/ext/noderb_extension/libuv/src/eio/autogen.sh +3 -0
  299. data/ext/noderb_extension/libuv/src/eio/config.h.in +86 -0
  300. data/ext/noderb_extension/libuv/src/eio/config_cygwin.h +77 -0
  301. data/ext/noderb_extension/libuv/src/eio/config_darwin.h +137 -0
  302. data/ext/noderb_extension/libuv/src/eio/config_freebsd.h +78 -0
  303. data/ext/noderb_extension/libuv/src/eio/config_linux.h +101 -0
  304. data/ext/noderb_extension/libuv/src/eio/config_sunos.h +81 -0
  305. data/ext/noderb_extension/libuv/src/eio/configure.ac +22 -0
  306. data/ext/noderb_extension/libuv/src/eio/demo.c +194 -0
  307. data/ext/noderb_extension/libuv/src/eio/ecb.h +370 -0
  308. data/ext/noderb_extension/libuv/src/eio/eio.3 +3428 -0
  309. data/ext/noderb_extension/libuv/src/eio/eio.c +2562 -0
  310. data/ext/noderb_extension/libuv/src/eio/eio.pod +969 -0
  311. data/ext/noderb_extension/libuv/src/eio/libeio.m4 +195 -0
  312. data/ext/noderb_extension/libuv/src/eio/xthread.h +164 -0
  313. data/ext/noderb_extension/libuv/src/ev/Changes +388 -0
  314. data/ext/noderb_extension/libuv/src/ev/LICENSE +36 -0
  315. data/ext/noderb_extension/libuv/src/ev/Makefile.am +18 -0
  316. data/ext/noderb_extension/libuv/src/ev/Makefile.in +771 -0
  317. data/ext/noderb_extension/libuv/src/ev/README +58 -0
  318. data/ext/noderb_extension/libuv/src/ev/aclocal.m4 +8957 -0
  319. data/ext/noderb_extension/libuv/src/ev/autogen.sh +6 -0
  320. data/ext/noderb_extension/libuv/src/ev/config.guess +1526 -0
  321. data/ext/noderb_extension/libuv/src/ev/config.h.in +125 -0
  322. data/ext/noderb_extension/libuv/src/ev/config.sub +1658 -0
  323. data/ext/noderb_extension/libuv/src/ev/config_cygwin.h +123 -0
  324. data/ext/noderb_extension/libuv/src/ev/config_darwin.h +122 -0
  325. data/ext/noderb_extension/libuv/src/ev/config_freebsd.h +120 -0
  326. data/ext/noderb_extension/libuv/src/ev/config_linux.h +130 -0
  327. data/ext/noderb_extension/libuv/src/ev/config_sunos.h +122 -0
  328. data/ext/noderb_extension/libuv/src/ev/configure +13037 -0
  329. data/ext/noderb_extension/libuv/src/ev/configure.ac +18 -0
  330. data/ext/noderb_extension/libuv/src/ev/depcomp +630 -0
  331. data/ext/noderb_extension/libuv/src/ev/ev++.h +816 -0
  332. data/ext/noderb_extension/libuv/src/ev/ev.3 +5311 -0
  333. data/ext/noderb_extension/libuv/src/ev/ev.c +3913 -0
  334. data/ext/noderb_extension/libuv/src/ev/ev.pod +5243 -0
  335. data/ext/noderb_extension/libuv/src/ev/ev_epoll.c +266 -0
  336. data/ext/noderb_extension/libuv/src/ev/ev_kqueue.c +198 -0
  337. data/ext/noderb_extension/libuv/src/ev/ev_poll.c +148 -0
  338. data/ext/noderb_extension/libuv/src/ev/ev_port.c +179 -0
  339. data/ext/noderb_extension/libuv/src/ev/ev_select.c +310 -0
  340. data/ext/noderb_extension/libuv/src/ev/ev_vars.h +203 -0
  341. data/ext/noderb_extension/libuv/src/ev/ev_win32.c +153 -0
  342. data/ext/noderb_extension/libuv/src/ev/ev_wrap.h +196 -0
  343. data/ext/noderb_extension/libuv/src/ev/event.c +402 -0
  344. data/ext/noderb_extension/libuv/src/ev/event.h +170 -0
  345. data/ext/noderb_extension/libuv/src/ev/install-sh +294 -0
  346. data/ext/noderb_extension/libuv/src/ev/libev.m4 +39 -0
  347. data/ext/noderb_extension/libuv/src/ev/ltmain.sh +8413 -0
  348. data/ext/noderb_extension/libuv/src/ev/missing +336 -0
  349. data/ext/noderb_extension/libuv/src/ev/mkinstalldirs +111 -0
  350. data/ext/noderb_extension/libuv/src/uv-common.c +172 -0
  351. data/ext/noderb_extension/libuv/src/uv-common.h +53 -0
  352. data/ext/noderb_extension/libuv/src/uv-cygwin.c +52 -0
  353. data/ext/noderb_extension/libuv/src/uv-darwin.c +64 -0
  354. data/ext/noderb_extension/libuv/src/uv-eio.c +113 -0
  355. data/ext/noderb_extension/libuv/src/uv-eio.h +13 -0
  356. data/ext/noderb_extension/libuv/src/uv-freebsd.c +65 -0
  357. data/ext/noderb_extension/libuv/src/uv-linux.c +51 -0
  358. data/ext/noderb_extension/libuv/src/uv-sunos.c +60 -0
  359. data/ext/noderb_extension/libuv/src/uv-unix.c +2408 -0
  360. data/ext/noderb_extension/libuv/src/win/async.c +129 -0
  361. data/ext/noderb_extension/libuv/src/win/cares.c +304 -0
  362. data/ext/noderb_extension/libuv/src/win/core.c +155 -0
  363. data/ext/noderb_extension/libuv/src/win/error.c +140 -0
  364. data/ext/noderb_extension/libuv/src/win/getaddrinfo.c +341 -0
  365. data/ext/noderb_extension/libuv/src/win/handle.c +176 -0
  366. data/ext/noderb_extension/libuv/src/win/internal.h +237 -0
  367. data/ext/noderb_extension/libuv/src/win/loop-watcher.c +128 -0
  368. data/ext/noderb_extension/libuv/src/win/pipe.c +828 -0
  369. data/ext/noderb_extension/libuv/src/win/process.c +936 -0
  370. data/ext/noderb_extension/libuv/src/win/req.c +141 -0
  371. data/ext/noderb_extension/libuv/src/win/stdio.c +75 -0
  372. data/ext/noderb_extension/libuv/src/win/stream.c +149 -0
  373. data/ext/noderb_extension/libuv/src/win/tcp.c +895 -0
  374. data/ext/noderb_extension/libuv/src/win/timer.c +269 -0
  375. data/ext/noderb_extension/libuv/src/win/util.c +82 -0
  376. data/ext/noderb_extension/libuv/test/benchmark-ares.c +117 -0
  377. data/ext/noderb_extension/libuv/test/benchmark-getaddrinfo.c +90 -0
  378. data/ext/noderb_extension/libuv/test/benchmark-list.h +77 -0
  379. data/ext/noderb_extension/libuv/test/benchmark-ping-pongs.c +210 -0
  380. data/ext/noderb_extension/libuv/test/benchmark-pound.c +237 -0
  381. data/ext/noderb_extension/libuv/test/benchmark-pump.c +459 -0
  382. data/ext/noderb_extension/libuv/test/benchmark-sizes.c +39 -0
  383. data/ext/noderb_extension/libuv/test/benchmark-spawn.c +154 -0
  384. data/ext/noderb_extension/libuv/test/dns-server.c +323 -0
  385. data/ext/noderb_extension/libuv/test/echo-server.c +299 -0
  386. data/ext/noderb_extension/libuv/test/run-benchmarks.c +64 -0
  387. data/ext/noderb_extension/libuv/test/run-tests.c +82 -0
  388. data/ext/noderb_extension/libuv/test/runner-unix.c +335 -0
  389. data/ext/noderb_extension/libuv/test/runner-unix.h +36 -0
  390. data/ext/noderb_extension/libuv/test/runner-win.c +343 -0
  391. data/ext/noderb_extension/libuv/test/runner-win.h +42 -0
  392. data/ext/noderb_extension/libuv/test/runner.c +311 -0
  393. data/ext/noderb_extension/libuv/test/runner.h +155 -0
  394. data/ext/noderb_extension/libuv/test/task.h +111 -0
  395. data/ext/noderb_extension/libuv/test/test-async.c +218 -0
  396. data/ext/noderb_extension/libuv/test/test-callback-stack.c +205 -0
  397. data/ext/noderb_extension/libuv/test/test-connection-fail.c +149 -0
  398. data/ext/noderb_extension/libuv/test/test-delayed-accept.c +198 -0
  399. data/ext/noderb_extension/libuv/test/test-fail-always.c +29 -0
  400. data/ext/noderb_extension/libuv/test/test-get-currentexe.c +53 -0
  401. data/ext/noderb_extension/libuv/test/test-getaddrinfo.c +110 -0
  402. data/ext/noderb_extension/libuv/test/test-gethostbyname.c +192 -0
  403. data/ext/noderb_extension/libuv/test/test-getsockname.c +196 -0
  404. data/ext/noderb_extension/libuv/test/test-hrtime.c +51 -0
  405. data/ext/noderb_extension/libuv/test/test-idle.c +83 -0
  406. data/ext/noderb_extension/libuv/test/test-list.h +165 -0
  407. data/ext/noderb_extension/libuv/test/test-loop-handles.c +361 -0
  408. data/ext/noderb_extension/libuv/test/test-pass-always.c +28 -0
  409. data/ext/noderb_extension/libuv/test/test-ping-pong.c +256 -0
  410. data/ext/noderb_extension/libuv/test/test-pipe-bind-error.c +148 -0
  411. data/ext/noderb_extension/libuv/test/test-ref.c +91 -0
  412. data/ext/noderb_extension/libuv/test/test-shutdown-eof.c +183 -0
  413. data/ext/noderb_extension/libuv/test/test-spawn.c +345 -0
  414. data/ext/noderb_extension/libuv/test/test-tcp-bind-error.c +204 -0
  415. data/ext/noderb_extension/libuv/test/test-tcp-bind6-error.c +164 -0
  416. data/ext/noderb_extension/libuv/test/test-tcp-writealot.c +198 -0
  417. data/ext/noderb_extension/libuv/test/test-timer-again.c +141 -0
  418. data/ext/noderb_extension/libuv/test/test-timer.c +134 -0
  419. data/ext/noderb_extension/noderb.c +340 -0
  420. data/ext/noderb_extension/noderb.h +2 -0
  421. data/lib/noderb/connection.rb +21 -0
  422. data/lib/noderb/process.rb +17 -0
  423. data/lib/noderb.rb +25 -0
  424. 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 */