zuvloop 0.0.3__tar.gz → 0.0.4__tar.gz

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 (504) hide show
  1. {zuvloop-0.0.3 → zuvloop-0.0.4}/PKG-INFO +4 -2
  2. {zuvloop-0.0.3 → zuvloop-0.0.4}/README.md +3 -1
  3. {zuvloop-0.0.3 → zuvloop-0.0.4}/pyproject.toml +1 -1
  4. zuvloop-0.0.4/vendor/README.md +17 -0
  5. zuvloop-0.0.4/vendor/libuv-maintainer-keys.txt +12 -0
  6. zuvloop-0.0.4/vendor/update-libuv.sh +38 -0
  7. {zuvloop-0.0.3 → zuvloop-0.0.4}/zig/addr.zig +4 -3
  8. {zuvloop-0.0.3 → zuvloop-0.0.4}/zig/datagram.zig +8 -6
  9. {zuvloop-0.0.3 → zuvloop-0.0.4}/zig/dns.zig +5 -0
  10. {zuvloop-0.0.3 → zuvloop-0.0.4}/zig/handle.zig +15 -4
  11. {zuvloop-0.0.3 → zuvloop-0.0.4}/zig/loop.zig +7 -3
  12. {zuvloop-0.0.3 → zuvloop-0.0.4}/zig/process.zig +4 -4
  13. {zuvloop-0.0.3 → zuvloop-0.0.4}/zig/transport.zig +34 -12
  14. {zuvloop-0.0.3 → zuvloop-0.0.4}/zuvloop/_base.py +98 -11
  15. {zuvloop-0.0.3 → zuvloop-0.0.4}/zuvloop/_connect.py +1 -1
  16. {zuvloop-0.0.3 → zuvloop-0.0.4}/zuvloop/_instrumentation.py +1 -1
  17. zuvloop-0.0.4/zuvloop/_loop.py +105 -0
  18. {zuvloop-0.0.3 → zuvloop-0.0.4}/zuvloop/_process.py +117 -49
  19. zuvloop-0.0.3/vendor/README.md +0 -13
  20. zuvloop-0.0.3/vendor/update-libuv.sh +0 -21
  21. zuvloop-0.0.3/zuvloop/_loop.py +0 -64
  22. {zuvloop-0.0.3 → zuvloop-0.0.4}/.gitignore +0 -0
  23. {zuvloop-0.0.3 → zuvloop-0.0.4}/LICENSE +0 -0
  24. {zuvloop-0.0.3 → zuvloop-0.0.4}/build.zig +0 -0
  25. {zuvloop-0.0.3 → zuvloop-0.0.4}/build.zig.zon +0 -0
  26. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/.gitattributes +0 -0
  27. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/.github/ISSUE_TEMPLATE.md +0 -0
  28. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/.github/dependabot.yml +0 -0
  29. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/.github/workflows/CI-docs.yml +0 -0
  30. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/.github/workflows/CI-sample.yml +0 -0
  31. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/.github/workflows/CI-unix.yml +0 -0
  32. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/.github/workflows/CI-win.yml +0 -0
  33. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/.github/workflows/sanitizer.yml +0 -0
  34. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/.gitignore +0 -0
  35. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/.mailmap +0 -0
  36. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/.readthedocs.yaml +0 -0
  37. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/AUTHORS +0 -0
  38. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/CMakeLists.txt +0 -0
  39. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/CONTRIBUTING.md +0 -0
  40. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/ChangeLog +0 -0
  41. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/LICENSE +0 -0
  42. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/LICENSE-docs +0 -0
  43. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/LICENSE-extra +0 -0
  44. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/LINKS.md +0 -0
  45. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/MAINTAINERS.md +0 -0
  46. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/Makefile.am +0 -0
  47. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/README.md +0 -0
  48. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/SECURITY.md +0 -0
  49. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/SUPPORTED_PLATFORMS.md +0 -0
  50. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/autogen.sh +0 -0
  51. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/cmake-toolchains/cross-mingw32.cmake +0 -0
  52. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/configure.ac +0 -0
  53. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/code/.gitignore +0 -0
  54. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/code/CMakeLists.txt +0 -0
  55. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/code/cgi/main.c +0 -0
  56. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/code/cgi/tick.c +0 -0
  57. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/code/default-loop/main.c +0 -0
  58. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/code/detach/main.c +0 -0
  59. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/code/dns/main.c +0 -0
  60. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/code/helloworld/main.c +0 -0
  61. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/code/idle-basic/main.c +0 -0
  62. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/code/idle-compute/main.c +0 -0
  63. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/code/interfaces/main.c +0 -0
  64. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/code/locks/main.c +0 -0
  65. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/code/multi-echo-server/main.c +0 -0
  66. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/code/multi-echo-server/worker.c +0 -0
  67. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/code/onchange/main.c +0 -0
  68. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/code/pipe-echo-server/main.c +0 -0
  69. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/code/plugin/hello.c +0 -0
  70. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/code/plugin/main.c +0 -0
  71. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/code/plugin/plugin.h +0 -0
  72. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/code/proc-streams/main.c +0 -0
  73. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/code/proc-streams/test.c +0 -0
  74. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/code/progress/main.c +0 -0
  75. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/code/queue-cancel/main.c +0 -0
  76. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/code/queue-work/main.c +0 -0
  77. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/code/ref-timer/main.c +0 -0
  78. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/code/signal/main.c +0 -0
  79. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/code/spawn/main.c +0 -0
  80. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/code/tcp-echo-server/main.c +0 -0
  81. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/code/thread-create/main.c +0 -0
  82. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/code/tty/main.c +0 -0
  83. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/code/tty-gravity/main.c +0 -0
  84. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/code/udp-dhcp/main.c +0 -0
  85. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/code/uvcat/main.c +0 -0
  86. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/code/uvstop/main.c +0 -0
  87. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/code/uvtee/main.c +0 -0
  88. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/code/uvwget/main.c +0 -0
  89. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/make.bat +0 -0
  90. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/requirements.txt +0 -0
  91. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/src/api.rst +0 -0
  92. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/src/async.rst +0 -0
  93. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/src/check.rst +0 -0
  94. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/src/conf.py +0 -0
  95. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/src/design.rst +0 -0
  96. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/src/dll.rst +0 -0
  97. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/src/dns.rst +0 -0
  98. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/src/errors.rst +0 -0
  99. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/src/fs.rst +0 -0
  100. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/src/fs_event.rst +0 -0
  101. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/src/fs_poll.rst +0 -0
  102. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/src/guide/about.rst +0 -0
  103. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/src/guide/basics.rst +0 -0
  104. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/src/guide/eventloops.rst +0 -0
  105. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/src/guide/filesystem.rst +0 -0
  106. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/src/guide/introduction.rst +0 -0
  107. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/src/guide/networking.rst +0 -0
  108. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/src/guide/processes.rst +0 -0
  109. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/src/guide/threads.rst +0 -0
  110. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/src/guide/utilities.rst +0 -0
  111. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/src/guide.rst +0 -0
  112. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/src/handle.rst +0 -0
  113. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/src/idle.rst +0 -0
  114. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/src/index.rst +0 -0
  115. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/src/loop.rst +0 -0
  116. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/src/metrics.rst +0 -0
  117. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/src/migration_010_100.rst +0 -0
  118. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/src/misc.rst +0 -0
  119. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/src/pipe.rst +0 -0
  120. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/src/poll.rst +0 -0
  121. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/src/prepare.rst +0 -0
  122. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/src/process.rst +0 -0
  123. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/src/request.rst +0 -0
  124. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/src/signal.rst +0 -0
  125. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/src/sphinx-plugins/manpage.py +0 -0
  126. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/src/static/architecture.png +0 -0
  127. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/src/static/diagrams.key/Data/st0-311.jpg +0 -0
  128. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/src/static/diagrams.key/Data/st1-475.jpg +0 -0
  129. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/src/static/diagrams.key/Index.zip +0 -0
  130. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/src/static/diagrams.key/Metadata/BuildVersionHistory.plist +0 -0
  131. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/src/static/diagrams.key/Metadata/DocumentIdentifier +0 -0
  132. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/src/static/diagrams.key/Metadata/Properties.plist +0 -0
  133. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/src/static/diagrams.key/preview-micro.jpg +0 -0
  134. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/src/static/diagrams.key/preview-web.jpg +0 -0
  135. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/src/static/diagrams.key/preview.jpg +0 -0
  136. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/src/static/favicon.ico +0 -0
  137. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/src/static/logo.png +0 -0
  138. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/src/static/loop_iteration.png +0 -0
  139. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/src/stream.rst +0 -0
  140. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/src/tcp.rst +0 -0
  141. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/src/threading.rst +0 -0
  142. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/src/threadpool.rst +0 -0
  143. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/src/timer.rst +0 -0
  144. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/src/tty.rst +0 -0
  145. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/src/udp.rst +0 -0
  146. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/src/upgrading.rst +0 -0
  147. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/docs/src/version.rst +0 -0
  148. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/img/banner.png +0 -0
  149. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/img/logos.svg +0 -0
  150. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/include/uv/aix.h +0 -0
  151. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/include/uv/bsd.h +0 -0
  152. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/include/uv/darwin.h +0 -0
  153. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/include/uv/errno.h +0 -0
  154. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/include/uv/linux.h +0 -0
  155. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/include/uv/os390.h +0 -0
  156. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/include/uv/posix.h +0 -0
  157. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/include/uv/sunos.h +0 -0
  158. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/include/uv/threadpool.h +0 -0
  159. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/include/uv/tree.h +0 -0
  160. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/include/uv/unix.h +0 -0
  161. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/include/uv/version.h +0 -0
  162. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/include/uv/win.h +0 -0
  163. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/include/uv.h +0 -0
  164. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/libuv-static.pc.in +0 -0
  165. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/libuv.pc.in +0 -0
  166. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/m4/.gitignore +0 -0
  167. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/m4/as_case.m4 +0 -0
  168. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/m4/ax_pthread.m4 +0 -0
  169. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/m4/libuv-check-flags.m4 +0 -0
  170. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/fs-poll.c +0 -0
  171. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/heap-inl.h +0 -0
  172. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/idna.c +0 -0
  173. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/idna.h +0 -0
  174. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/inet.c +0 -0
  175. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/queue.h +0 -0
  176. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/random.c +0 -0
  177. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/strscpy.c +0 -0
  178. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/strscpy.h +0 -0
  179. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/strtok.c +0 -0
  180. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/strtok.h +0 -0
  181. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/thread-common.c +0 -0
  182. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/threadpool.c +0 -0
  183. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/timer.c +0 -0
  184. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/unix/aix-common.c +0 -0
  185. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/unix/aix.c +0 -0
  186. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/unix/async.c +0 -0
  187. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/unix/bsd-ifaddrs.c +0 -0
  188. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/unix/bsd-proctitle.c +0 -0
  189. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/unix/core.c +0 -0
  190. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/unix/cygwin.c +0 -0
  191. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/unix/darwin-proctitle.c +0 -0
  192. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/unix/darwin-stub.h +0 -0
  193. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/unix/darwin-syscalls.h +0 -0
  194. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/unix/darwin.c +0 -0
  195. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/unix/dl.c +0 -0
  196. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/unix/freebsd.c +0 -0
  197. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/unix/fs.c +0 -0
  198. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/unix/fsevents.c +0 -0
  199. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/unix/getaddrinfo.c +0 -0
  200. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/unix/getnameinfo.c +0 -0
  201. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/unix/haiku.c +0 -0
  202. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/unix/hurd.c +0 -0
  203. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/unix/ibmi.c +0 -0
  204. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/unix/internal.h +0 -0
  205. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/unix/kqueue.c +0 -0
  206. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/unix/linux.c +0 -0
  207. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/unix/loop-watcher.c +0 -0
  208. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/unix/loop.c +0 -0
  209. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/unix/netbsd.c +0 -0
  210. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/unix/no-fsevents.c +0 -0
  211. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/unix/no-proctitle.c +0 -0
  212. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/unix/openbsd.c +0 -0
  213. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/unix/os390-proctitle.c +0 -0
  214. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/unix/os390-syscalls.c +0 -0
  215. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/unix/os390-syscalls.h +0 -0
  216. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/unix/os390.c +0 -0
  217. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/unix/pipe.c +0 -0
  218. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/unix/poll.c +0 -0
  219. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/unix/posix-hrtime.c +0 -0
  220. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/unix/posix-poll.c +0 -0
  221. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/unix/process.c +0 -0
  222. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/unix/procfs-exepath.c +0 -0
  223. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/unix/proctitle.c +0 -0
  224. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/unix/qnx.c +0 -0
  225. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/unix/random-devurandom.c +0 -0
  226. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/unix/random-getentropy.c +0 -0
  227. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/unix/random-getrandom.c +0 -0
  228. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/unix/random-sysctl-linux.c +0 -0
  229. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/unix/signal.c +0 -0
  230. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/unix/stream.c +0 -0
  231. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/unix/sunos.c +0 -0
  232. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/unix/sysinfo-loadavg.c +0 -0
  233. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/unix/sysinfo-memory.c +0 -0
  234. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/unix/tcp.c +0 -0
  235. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/unix/thread.c +0 -0
  236. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/unix/tty.c +0 -0
  237. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/unix/udp.c +0 -0
  238. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/uv-common.c +0 -0
  239. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/uv-common.h +0 -0
  240. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/uv-data-getter-setters.c +0 -0
  241. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/version.c +0 -0
  242. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/win/async.c +0 -0
  243. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/win/atomicops-inl.h +0 -0
  244. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/win/core.c +0 -0
  245. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/win/detect-wakeup.c +0 -0
  246. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/win/dl.c +0 -0
  247. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/win/error.c +0 -0
  248. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/win/fs-event.c +0 -0
  249. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/win/fs-fd-hash-inl.h +0 -0
  250. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/win/fs.c +0 -0
  251. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/win/getaddrinfo.c +0 -0
  252. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/win/getnameinfo.c +0 -0
  253. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/win/handle-inl.h +0 -0
  254. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/win/handle.c +0 -0
  255. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/win/internal.h +0 -0
  256. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/win/loop-watcher.c +0 -0
  257. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/win/pipe.c +0 -0
  258. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/win/poll.c +0 -0
  259. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/win/process-stdio.c +0 -0
  260. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/win/process.c +0 -0
  261. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/win/req-inl.h +0 -0
  262. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/win/signal.c +0 -0
  263. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/win/snprintf.c +0 -0
  264. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/win/stream-inl.h +0 -0
  265. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/win/stream.c +0 -0
  266. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/win/tcp.c +0 -0
  267. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/win/thread.c +0 -0
  268. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/win/tty.c +0 -0
  269. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/win/udp.c +0 -0
  270. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/win/util.c +0 -0
  271. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/win/winapi.c +0 -0
  272. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/win/winapi.h +0 -0
  273. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/win/winsock.c +0 -0
  274. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/src/win/winsock.h +0 -0
  275. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/benchmark-async-pummel.c +0 -0
  276. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/benchmark-async.c +0 -0
  277. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/benchmark-fs-stat.c +0 -0
  278. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/benchmark-getaddrinfo.c +0 -0
  279. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/benchmark-list.h +0 -0
  280. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/benchmark-loop-count.c +0 -0
  281. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/benchmark-million-async.c +0 -0
  282. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/benchmark-million-timers.c +0 -0
  283. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/benchmark-multi-accept.c +0 -0
  284. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/benchmark-ping-pongs.c +0 -0
  285. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/benchmark-ping-udp.c +0 -0
  286. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/benchmark-pound.c +0 -0
  287. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/benchmark-pump.c +0 -0
  288. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/benchmark-queue-work.c +0 -0
  289. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/benchmark-sizes.c +0 -0
  290. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/benchmark-spawn.c +0 -0
  291. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/benchmark-tcp-write-batch.c +0 -0
  292. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/benchmark-thread.c +0 -0
  293. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/benchmark-udp-pummel.c +0 -0
  294. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/blackhole-server.c +0 -0
  295. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/echo-server.c +0 -0
  296. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/fixtures/empty_file +0 -0
  297. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/fixtures/load_error.node +0 -0
  298. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/fixtures/lorem_ipsum.txt +0 -0
  299. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/fixtures/one_file/one_file +0 -0
  300. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/run-benchmarks.c +0 -0
  301. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/run-tests.c +0 -0
  302. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/runner-unix.c +0 -0
  303. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/runner-unix.h +0 -0
  304. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/runner-win.c +0 -0
  305. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/runner-win.h +0 -0
  306. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/runner.c +0 -0
  307. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/runner.h +0 -0
  308. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/task.h +0 -0
  309. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-active.c +0 -0
  310. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-async-null-cb.c +0 -0
  311. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-async.c +0 -0
  312. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-barrier.c +0 -0
  313. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-callback-stack.c +0 -0
  314. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-close-fd.c +0 -0
  315. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-close-order.c +0 -0
  316. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-condvar.c +0 -0
  317. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-connect-unspecified.c +0 -0
  318. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-connection-fail.c +0 -0
  319. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-cwd-and-chdir.c +0 -0
  320. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-default-loop-close.c +0 -0
  321. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-delayed-accept.c +0 -0
  322. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-dlerror.c +0 -0
  323. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-eintr-handling.c +0 -0
  324. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-embed.c +0 -0
  325. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-emfile.c +0 -0
  326. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-env-vars.c +0 -0
  327. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-error.c +0 -0
  328. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-fail-always.c +0 -0
  329. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-fork.c +0 -0
  330. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-fs-copyfile.c +0 -0
  331. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-fs-event.c +0 -0
  332. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-fs-fd-hash.c +0 -0
  333. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-fs-open-flags.c +0 -0
  334. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-fs-poll.c +0 -0
  335. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-fs-readdir.c +0 -0
  336. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-fs.c +0 -0
  337. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-get-currentexe.c +0 -0
  338. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-get-loadavg.c +0 -0
  339. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-get-memory.c +0 -0
  340. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-get-passwd.c +0 -0
  341. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-getaddrinfo.c +0 -0
  342. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-gethostname.c +0 -0
  343. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-getnameinfo.c +0 -0
  344. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-getsockname.c +0 -0
  345. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-getters-setters.c +0 -0
  346. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-gettimeofday.c +0 -0
  347. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-handle-fileno.c +0 -0
  348. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-homedir.c +0 -0
  349. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-hrtime.c +0 -0
  350. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-idle.c +0 -0
  351. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-idna.c +0 -0
  352. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-iouring-pollhup.c +0 -0
  353. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-ip-name.c +0 -0
  354. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-ip4-addr.c +0 -0
  355. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-ip6-addr.c +0 -0
  356. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-ipc-heavy-traffic-deadlock-bug.c +0 -0
  357. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-ipc-send-recv.c +0 -0
  358. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-ipc.c +0 -0
  359. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-list.h +0 -0
  360. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-loop-alive.c +0 -0
  361. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-loop-close.c +0 -0
  362. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-loop-configure.c +0 -0
  363. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-loop-handles.c +0 -0
  364. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-loop-oom.c +0 -0
  365. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-loop-stop.c +0 -0
  366. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-loop-time.c +0 -0
  367. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-metrics.c +0 -0
  368. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-multiple-listen.c +0 -0
  369. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-mutexes.c +0 -0
  370. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-not-readable-nor-writable-on-read-error.c +0 -0
  371. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-not-writable-after-shutdown.c +0 -0
  372. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-osx-select.c +0 -0
  373. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-pass-always.c +0 -0
  374. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-ping-pong.c +0 -0
  375. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-pipe-bind-error.c +0 -0
  376. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-pipe-close-stdout-read-stdin.c +0 -0
  377. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-pipe-connect-error.c +0 -0
  378. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-pipe-connect-multiple.c +0 -0
  379. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-pipe-connect-prepare.c +0 -0
  380. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-pipe-getsockname.c +0 -0
  381. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-pipe-pending-instances.c +0 -0
  382. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-pipe-sendmsg.c +0 -0
  383. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-pipe-server-close.c +0 -0
  384. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-pipe-set-fchmod.c +0 -0
  385. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-pipe-set-non-blocking.c +0 -0
  386. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-platform-output.c +0 -0
  387. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-poll-close-doesnt-corrupt-stack.c +0 -0
  388. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-poll-close.c +0 -0
  389. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-poll-closesocket.c +0 -0
  390. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-poll-multiple-handles.c +0 -0
  391. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-poll-oob.c +0 -0
  392. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-poll.c +0 -0
  393. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-process-priority.c +0 -0
  394. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-process-title-threadsafe.c +0 -0
  395. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-process-title.c +0 -0
  396. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-queue-foreach-delete.c +0 -0
  397. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-random.c +0 -0
  398. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-readable-on-eof.c +0 -0
  399. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-ref.c +0 -0
  400. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-run-nowait.c +0 -0
  401. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-run-once.c +0 -0
  402. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-semaphore.c +0 -0
  403. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-shutdown-close.c +0 -0
  404. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-shutdown-eof.c +0 -0
  405. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-shutdown-simultaneous.c +0 -0
  406. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-shutdown-twice.c +0 -0
  407. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-signal-multiple-loops.c +0 -0
  408. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-signal-pending-on-close.c +0 -0
  409. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-signal.c +0 -0
  410. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-socket-buffer-size.c +0 -0
  411. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-spawn.c +0 -0
  412. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-stdio-over-pipes.c +0 -0
  413. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-strscpy.c +0 -0
  414. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-strtok.c +0 -0
  415. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-tcp-alloc-cb-fail.c +0 -0
  416. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-tcp-bind-error.c +0 -0
  417. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-tcp-bind6-error.c +0 -0
  418. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-tcp-close-accept.c +0 -0
  419. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-tcp-close-after-read-timeout.c +0 -0
  420. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-tcp-close-reset.c +0 -0
  421. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-tcp-close-while-connecting.c +0 -0
  422. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-tcp-close.c +0 -0
  423. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-tcp-connect-error-after-write.c +0 -0
  424. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-tcp-connect-error.c +0 -0
  425. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-tcp-connect-timeout.c +0 -0
  426. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-tcp-connect6-error.c +0 -0
  427. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-tcp-create-socket-early.c +0 -0
  428. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-tcp-flags.c +0 -0
  429. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-tcp-oob.c +0 -0
  430. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-tcp-open.c +0 -0
  431. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-tcp-read-stop-start.c +0 -0
  432. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-tcp-read-stop.c +0 -0
  433. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-tcp-reuseport.c +0 -0
  434. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-tcp-rst.c +0 -0
  435. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-tcp-shutdown-after-write.c +0 -0
  436. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-tcp-try-write-error.c +0 -0
  437. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-tcp-try-write.c +0 -0
  438. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-tcp-unexpected-read.c +0 -0
  439. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-tcp-write-after-connect.c +0 -0
  440. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-tcp-write-fail.c +0 -0
  441. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-tcp-write-in-a-row.c +0 -0
  442. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-tcp-write-queue-order.c +0 -0
  443. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-tcp-write-to-half-open-connection.c +0 -0
  444. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-tcp-writealot.c +0 -0
  445. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-test-macros.c +0 -0
  446. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-thread-affinity.c +0 -0
  447. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-thread-equal.c +0 -0
  448. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-thread-name.c +0 -0
  449. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-thread-priority.c +0 -0
  450. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-thread.c +0 -0
  451. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-threadpool-cancel.c +0 -0
  452. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-threadpool.c +0 -0
  453. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-timer-again.c +0 -0
  454. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-timer-from-check.c +0 -0
  455. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-timer.c +0 -0
  456. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-tmpdir.c +0 -0
  457. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-tty-duplicate-key.c +0 -0
  458. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-tty-escape-sequence-processing.c +0 -0
  459. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-tty.c +0 -0
  460. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-udp-alloc-cb-fail.c +0 -0
  461. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-udp-bind.c +0 -0
  462. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-udp-connect.c +0 -0
  463. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-udp-connect6.c +0 -0
  464. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-udp-create-socket-early.c +0 -0
  465. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-udp-dgram-too-big.c +0 -0
  466. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-udp-ipv6.c +0 -0
  467. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-udp-mmsg.c +0 -0
  468. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-udp-multicast-interface.c +0 -0
  469. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-udp-multicast-interface6.c +0 -0
  470. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-udp-multicast-join.c +0 -0
  471. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-udp-multicast-join6.c +0 -0
  472. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-udp-multicast-ttl.c +0 -0
  473. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-udp-open.c +0 -0
  474. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-udp-options.c +0 -0
  475. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-udp-recv-in-a-row.c +0 -0
  476. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-udp-reuseport.c +0 -0
  477. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-udp-send-and-recv.c +0 -0
  478. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-udp-send-hang-loop.c +0 -0
  479. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-udp-send-immediate.c +0 -0
  480. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-udp-send-unreachable.c +0 -0
  481. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-udp-sendmmsg-error.c +0 -0
  482. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-udp-try-send.c +0 -0
  483. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-uname.c +0 -0
  484. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-walk-handles.c +0 -0
  485. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/test/test-watcher-cross-stop.c +0 -0
  486. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/tools/make_dist_html.py +0 -0
  487. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/tools/vswhere_usability_wrapper.cmd +0 -0
  488. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/tsansupp.txt +0 -0
  489. {zuvloop-0.0.3 → zuvloop-0.0.4}/vendor/libuv/uv_win_longpath.manifest +0 -0
  490. {zuvloop-0.0.3 → zuvloop-0.0.4}/zig/c.zig +0 -0
  491. {zuvloop-0.0.3 → zuvloop-0.0.4}/zig/collections.zig +0 -0
  492. {zuvloop-0.0.3 → zuvloop-0.0.4}/zig/module.zig +0 -0
  493. {zuvloop-0.0.3 → zuvloop-0.0.4}/zig/poller.zig +0 -0
  494. {zuvloop-0.0.3 → zuvloop-0.0.4}/zig/py.zig +0 -0
  495. {zuvloop-0.0.3 → zuvloop-0.0.4}/zig/timer.zig +0 -0
  496. {zuvloop-0.0.3 → zuvloop-0.0.4}/zig/tshandle.zig +0 -0
  497. {zuvloop-0.0.3 → zuvloop-0.0.4}/zig/uv.zig +0 -0
  498. {zuvloop-0.0.3 → zuvloop-0.0.4}/zuvloop/__init__.py +0 -0
  499. {zuvloop-0.0.3 → zuvloop-0.0.4}/zuvloop/_runner.py +0 -0
  500. {zuvloop-0.0.3 → zuvloop-0.0.4}/zuvloop/_sendfile.py +0 -0
  501. {zuvloop-0.0.3 → zuvloop-0.0.4}/zuvloop/_server.py +0 -0
  502. {zuvloop-0.0.3 → zuvloop-0.0.4}/zuvloop/_sockets.py +0 -0
  503. {zuvloop-0.0.3 → zuvloop-0.0.4}/zuvloop/_zuvloop.pyi +0 -0
  504. {zuvloop-0.0.3 → zuvloop-0.0.4}/zuvloop/py.typed +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: zuvloop
3
- Version: 0.0.3
3
+ Version: 0.0.4
4
4
  Summary: A libuv event loop for asyncio, written in Zig.
5
5
  Project-URL: Source, https://github.com/Kludex/zuvloop
6
6
  Author-email: Marcelo Trylesinski <marcelotryle@gmail.com>
@@ -211,6 +211,8 @@ $ uv pip install -e . --group dev
211
211
  $ uv run pytest
212
212
  $ uv run mypy
213
213
  $ uv run ruff check
214
+ $ uv run ruff format --check
215
+ $ ./scripts/check-zig # requires ZLint 0.9.1 on PATH
214
216
  $ uv run --group bench python benchmarks/run.py
215
217
  ```
216
218
 
@@ -221,7 +223,7 @@ $ python scripts/build.py
221
223
  ```
222
224
 
223
225
  `vendor/libuv` is an unmodified upstream release tarball; see `vendor/README.md`. Update it with
224
- `./vendor/update-libuv.sh <version>`.
226
+ `./vendor/update-libuv.sh <version> <sha256>`.
225
227
 
226
228
  ## License
227
229
 
@@ -187,6 +187,8 @@ $ uv pip install -e . --group dev
187
187
  $ uv run pytest
188
188
  $ uv run mypy
189
189
  $ uv run ruff check
190
+ $ uv run ruff format --check
191
+ $ ./scripts/check-zig # requires ZLint 0.9.1 on PATH
190
192
  $ uv run --group bench python benchmarks/run.py
191
193
  ```
192
194
 
@@ -197,7 +199,7 @@ $ python scripts/build.py
197
199
  ```
198
200
 
199
201
  `vendor/libuv` is an unmodified upstream release tarball; see `vendor/README.md`. Update it with
200
- `./vendor/update-libuv.sh <version>`.
202
+ `./vendor/update-libuv.sh <version> <sha256>`.
201
203
 
202
204
  ## License
203
205
 
@@ -3,7 +3,7 @@
3
3
  # invokes the native compiler, so a future version resolved from a lower bound
4
4
  # could execute unreviewed code into the wheels the publish job trusts. The
5
5
  # compiler is pinned for the same reason. Bump both deliberately.
6
- requires = ["hatchling", "hatch-vcs", "hatch-ziglang==0.2.1", "ziglang==0.16.0"]
6
+ requires = ["hatchling", "hatch-vcs==0.5.0", "hatch-ziglang==0.2.1", "ziglang==0.16.0"]
7
7
  build-backend = "hatchling.build"
8
8
 
9
9
  [project]
@@ -0,0 +1,17 @@
1
+ # Vendored dependencies
2
+
3
+ ## libuv
4
+
5
+ - Version: **1.51.0**
6
+ - Source: <https://dist.libuv.org/dist/v1.51.0/libuv-v1.51.0.tar.gz>
7
+ - SHA-256: `5f0557b90b1106de71951a3c3931de5e0430d78da1d9a10287ebc7a3f78ef8eb`
8
+
9
+ The tree under `libuv/` is the upstream release tarball, extracted verbatim. **Never edit it.**
10
+ Everything zuvloop adds lives in `zig/`, and `build.zig` compiles the vendored sources with the same
11
+ defines and file lists as upstream's `CMakeLists.txt`.
12
+
13
+ A weekly workflow checks for a new signed release, verifies its signer against
14
+ `libuv-maintainer-keys.txt`, tests every supported target, and opens an update pull request. For a
15
+ manual update, verify the checksum through an independent channel, then run
16
+ `./vendor/update-libuv.sh <version> <sha256>` and re-check the file lists at the top of `build.zig`
17
+ against the new `CMakeLists.txt`.
@@ -0,0 +1,12 @@
1
+ # Full fingerprint and libuv git tag containing the public key.
2
+ # Keep this trust root in sync with https://github.com/libuv/libuv/blob/v1.x/MAINTAINERS.md.
3
+ D77B1E34243FBAF05F8E9CC34F55C8C846AB89B9 pubkey-bnoordhuis
4
+ 94AE36675C464D64BAFA68DD7434390BDBE9B9C5 pubkey-cjihrig
5
+ 57353E0DBDAAA7E839B66A1AFF47D5E4AD8B4FDC pubkey-cjihrig-kb
6
+ AEAD0A4B686767751A0E4AEF34A25FB128246514 pubkey-vtjnash
7
+ CFBB9CA9A5BEAFD70E2B3C5A79A67C55A3679C8B pubkey2022-vtjnash
8
+ 5804F9998A922AFBA39847A0718350906134887F github:erw7
9
+ C82FA3AE1CBEDC6BE46B9360C43CEC45C17AB93C pubkey-richardlau
10
+ 612F0EAD9401622379DF4402F28C3C8DA33C03BE pubkey-santigimeno
11
+ FDF519364458319FA8233DC9410E5553AE9BC059 pubkey-saghul
12
+ AEFC279A0C9306767E5829A1251CA676820DC7F3 pubkey-trevnorris
@@ -0,0 +1,38 @@
1
+ #!/usr/bin/env bash
2
+ # Replace vendor/libuv with a pristine upstream release tarball.
3
+ set -euo pipefail
4
+
5
+ version="${1:?usage: update-libuv.sh <version> <sha256>, e.g. 1.51.0 5f0557...}"
6
+ checksum="${2:?supply the SHA-256 published for libuv ${version}}"
7
+ if [[ ! "$version" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
8
+ echo "invalid libuv version: $version" >&2
9
+ exit 2
10
+ fi
11
+ if [[ ! "$checksum" =~ ^[[:xdigit:]]{64}$ ]]; then
12
+ echo "invalid SHA-256: $checksum" >&2
13
+ exit 2
14
+ fi
15
+ here="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
16
+ url="https://dist.libuv.org/dist/v${version}/libuv-v${version}.tar.gz"
17
+
18
+ tmp="$(mktemp -d)"
19
+ trap 'rm -rf "$tmp"' EXIT
20
+
21
+ curl -fsSL "$url" -o "$tmp/libuv.tar.gz"
22
+ printf '%s %s\n' "$checksum" "$tmp/libuv.tar.gz" | shasum -a 256 -c -
23
+ tar xzf "$tmp/libuv.tar.gz" -C "$tmp"
24
+ rm -rf "$here/libuv"
25
+ mv "$tmp/libuv-v${version}" "$here/libuv"
26
+
27
+ sed -i.bak -E "s/\*\*[0-9]+\.[0-9]+\.[0-9]+\*\*/**${version}**/; s|dist/v[0-9]+\.[0-9]+\.[0-9]+/libuv-v[0-9]+\.[0-9]+\.[0-9]+|dist/v${version}/libuv-v${version}|g; s|SHA-256: \`[[:xdigit:]]{64}\`|SHA-256: \`${checksum}\`|" "$here/README.md"
28
+ if ! grep -Fq -- "- Version: **${version}**" "$here/README.md" ||
29
+ ! grep -Fq -- "dist/v${version}/libuv-v${version}.tar.gz" "$here/README.md" ||
30
+ ! grep -Fq -- "SHA-256: \`${checksum}\`" "$here/README.md"; then
31
+ mv "$here/README.md.bak" "$here/README.md"
32
+ echo "failed to update vendor/README.md; check its format" >&2
33
+ exit 1
34
+ fi
35
+ rm -f "$here/README.md.bak"
36
+
37
+ echo "vendored libuv ${version} from ${url}"
38
+ echo "now diff vendor/libuv/CMakeLists.txt against the source lists in build.zig"
@@ -35,6 +35,7 @@ fn tupleItem(t: *py.Object, i: c.Py_ssize_t) py.Error!*py.Object {
35
35
  pub fn fromPython(family: c_int, address: *py.Object, out: *Storage) py.Error!c_int {
36
36
  out.* = .{};
37
37
  if (family == AF_UNIX) {
38
+ // SAFETY: each accepted address type assigns path, and every other type returns.
38
39
  var path: [*c]const u8 = undefined;
39
40
  var len: c.Py_ssize_t = 0;
40
41
  if (c.PyUnicode_Check(address) != 0) {
@@ -146,9 +147,9 @@ pub fn same(a: *const posix.sockaddr, a_len: c_int, b: *const posix.sockaddr, b_
146
147
  const x: *const posix.sockaddr.in6 = @ptrCast(@alignCast(a));
147
148
  const y: *const posix.sockaddr.in6 = @ptrCast(@alignCast(b));
148
149
  if (x.port != y.port or !std.mem.eql(u8, &x.addr, &y.addr)) return false;
149
- // asyncio compares tuples, so it wants the scope stated rather than
150
- // treating a zero as a wildcard.
151
- return x.scope_id == y.scope_id;
150
+ // asyncio compares the complete tuples, so both ancillary fields must
151
+ // be stated exactly rather than treating zero as a wildcard.
152
+ return x.flowinfo == y.flowinfo and x.scope_id == y.scope_id;
152
153
  }
153
154
  return false;
154
155
  }
@@ -392,6 +392,7 @@ fn sendto(self_obj: *py.Object, args: []const ?*py.Object, nargs: usize, kwnames
392
392
  return py.errValue("sendto() requires an address on an unconnected transport");
393
393
  }
394
394
 
395
+ // SAFETY: PyObject_GetBuffer initializes view or returns an error.
395
396
  var view: c.Py_buffer = undefined;
396
397
  if (c.PyObject_GetBuffer(args[0].?, &view, c.PyBUF_SIMPLE) < 0) return py.Error.Python;
397
398
  defer c.PyBuffer_Release(&view);
@@ -596,12 +597,13 @@ pub fn makeDatagram(self_obj: *py.Object, args: []const ?*py.Object) py.Error!*p
596
597
  self.flags |= OPEN;
597
598
  uv.setData(self.udp(), self);
598
599
 
599
- if (uv.uv_udp_open(self.udp(), fd) < 0) {
600
+ const status = uv.uv_udp_open(self.udp(), fd);
601
+ if (status < 0) {
600
602
  // libuv never took the descriptor, so the caller still owns it.
601
603
  self.flags &= ~OPEN;
602
604
  py.incref(obj);
603
605
  uv.uv_close(uv.asHandle(self.udp()), onOpenFailed);
604
- return py.errUv(uv.uv_udp_open(self.udp(), fd));
606
+ return py.errUv(status);
605
607
  }
606
608
 
607
609
  py.incref(obj);
@@ -704,11 +706,11 @@ var methods = [_]c.PyMethodDef{
704
706
  };
705
707
 
706
708
  var slots = [_]c.PyType_Slot{
707
- .{ .slot = c.Py_tp_dealloc, .pfunc = @constCast(@ptrCast(&dealloc)) },
708
- .{ .slot = c.Py_tp_traverse, .pfunc = @constCast(@ptrCast(&traverse)) },
709
- .{ .slot = c.Py_tp_clear, .pfunc = @constCast(@ptrCast(&clear_)) },
709
+ .{ .slot = c.Py_tp_dealloc, .pfunc = @ptrCast(@constCast(&dealloc)) },
710
+ .{ .slot = c.Py_tp_traverse, .pfunc = @ptrCast(@constCast(&traverse)) },
711
+ .{ .slot = c.Py_tp_clear, .pfunc = @ptrCast(@constCast(&clear_)) },
710
712
  .{ .slot = c.Py_tp_methods, .pfunc = @ptrCast(&methods) },
711
- .{ .slot = c.Py_tp_doc, .pfunc = @constCast(@ptrCast("A libuv-backed datagram transport.")) },
713
+ .{ .slot = c.Py_tp_doc, .pfunc = @ptrCast(@constCast("A libuv-backed datagram transport.")) },
712
714
  .{ .slot = 0, .pfunc = null },
713
715
  };
714
716
 
@@ -36,7 +36,9 @@ const Request = struct {
36
36
  prev: ?*Request = null,
37
37
  next: ?*Request = null,
38
38
  hints: std.c.addrinfo = std.mem.zeroes(std.c.addrinfo),
39
+ // SAFETY: request construction fills this array before libuv receives it.
39
40
  host: [max_host]u8 = undefined,
41
+ // SAFETY: request construction fills this array before libuv receives it.
40
42
  service: [32]u8 = undefined,
41
43
 
42
44
  inline fn addrReq(self: *Request) *uv.GetAddrInfo {
@@ -117,6 +119,7 @@ pub fn traverse(st: *loopmod.State, visitproc: c.visitproc, arg: ?*anyopaque) c_
117
119
  fn copyZ(dst: []u8, value: *py.Object, what: [:0]const u8) py.Error!?[*:0]const u8 {
118
120
  if (py.isNone(value)) return null;
119
121
  var len: c.Py_ssize_t = 0;
122
+ // SAFETY: each accepted Python type assigns src, and every other type returns.
120
123
  var src: [*c]const u8 = undefined;
121
124
  if (c.PyUnicode_Check(value) != 0) {
122
125
  src = c.PyUnicode_AsUTF8AndSize(value, &len) orelse return py.Error.Python;
@@ -368,6 +371,8 @@ fn resolveLiteral(hints: *const std.c.addrinfo, host: ?[*:0]const u8, service: ?
368
371
  port = std.fmt.parseInt(u16, text, 10) catch return null;
369
372
  }
370
373
 
374
+ // SAFETY: inet_pton initializes the address and the successful branch fills
375
+ // the remaining sockaddr fields before storage is read.
371
376
  var storage: addr.Storage = undefined;
372
377
  const family = hints.family;
373
378
  if (family == std.c.AF.INET or family == std.c.AF.UNSPEC) {
@@ -17,6 +17,7 @@ const inline_args = 3;
17
17
  const arg_alloc = std.heap.c_allocator;
18
18
 
19
19
  pub const CANCELLED: u32 = 1 << 0;
20
+ const RUNNING: u32 = 1 << 1;
20
21
 
21
22
  pub const Handle = extern struct {
22
23
  ob_base: c.PyObject,
@@ -86,6 +87,14 @@ pub fn create(
86
87
  pub fn run(self: *Handle) void {
87
88
  if (self.isCancelled()) return;
88
89
  const callback = self.callback orelse return;
90
+ self.flags |= RUNNING;
91
+ defer {
92
+ self.flags &= ~RUNNING;
93
+ if (self.isCancelled()) {
94
+ clearArgs(self);
95
+ py.clear(&self.callback);
96
+ }
97
+ }
89
98
  invoke(@ptrCast(self), self.loop, callback, self.argv(), self.nargs, self.context.?);
90
99
  }
91
100
 
@@ -168,8 +177,12 @@ fn cancel(self_obj: *py.Object) py.Error!*py.Object {
168
177
  const self: *Handle = @ptrCast(@alignCast(self_obj));
169
178
  if (!self.isCancelled()) {
170
179
  self.flags |= CANCELLED;
171
- clearArgs(self);
172
- py.clear(&self.callback);
180
+ // Vectorcall borrows these references. A callback may cancel its own
181
+ // handle, so release them when run() regains control instead.
182
+ if (self.flags & RUNNING == 0) {
183
+ clearArgs(self);
184
+ py.clear(&self.callback);
185
+ }
173
186
  }
174
187
  return py.noneRef();
175
188
  }
@@ -179,7 +192,6 @@ fn cancelled(self_obj: *py.Object) py.Error!*py.Object {
179
192
  return py.boolRef(self.isCancelled());
180
193
  }
181
194
 
182
-
183
195
  fn getCallback(self_obj: ?*py.Object, _: ?*anyopaque) callconv(.c) ?*py.Object {
184
196
  const self: *Handle = @ptrCast(@alignCast(self_obj.?));
185
197
  return py.newref(self.callback orelse py.none());
@@ -243,7 +255,6 @@ var handle_spec = c.PyType_Spec{
243
255
  .slots = &handle_slots,
244
256
  };
245
257
 
246
-
247
258
  pub fn register(module: *py.Object) py.Error!void {
248
259
  handle_type = @ptrCast(c.PyType_FromModuleAndSpec(module, &handle_spec, null) orelse return py.Error.Python);
249
260
  if (c.PyModule_AddObjectRef(module, "Handle", @ptrCast(handle_type)) < 0) return py.Error.Python;
@@ -904,7 +904,7 @@ fn dealloc(obj: ?*py.Object) callconv(.c) void {
904
904
  if (needs_close) {
905
905
  st.ready.deinit();
906
906
  st.timers.deinit();
907
- }
907
+ }
908
908
  // The flush list owns one Python reference per transport regardless of
909
909
  // how the loop reached deallocation, including partially completed
910
910
  // explicit close paths.
@@ -951,8 +951,12 @@ fn traverse(obj: ?*py.Object, visitproc: c.visitproc, arg: ?*anyopaque) callconv
951
951
  if (r != 0) return r;
952
952
  transport = owned.owner_next;
953
953
  }
954
- r = dns.traverse(st, visitproc, arg);
955
- if (r != 0) return r;
954
+ // Once close hands resolver requests to the native reaper, their
955
+ // futures are gone and the request list mutates without the GIL.
956
+ if (!isReaping(st)) {
957
+ r = dns.traverse(st, visitproc, arg);
958
+ if (r != 0) return r;
959
+ }
956
960
  r = pollermod.traverse(st, visitproc, arg);
957
961
  if (r != 0) return r;
958
962
  }
@@ -347,11 +347,11 @@ var methods = [_]c.PyMethodDef{
347
347
  };
348
348
 
349
349
  var slots = [_]c.PyType_Slot{
350
- .{ .slot = c.Py_tp_dealloc, .pfunc = @constCast(@ptrCast(&dealloc)) },
351
- .{ .slot = c.Py_tp_traverse, .pfunc = @constCast(@ptrCast(&traverse)) },
352
- .{ .slot = c.Py_tp_clear, .pfunc = @constCast(@ptrCast(&clear_)) },
350
+ .{ .slot = c.Py_tp_dealloc, .pfunc = @ptrCast(@constCast(&dealloc)) },
351
+ .{ .slot = c.Py_tp_traverse, .pfunc = @ptrCast(@constCast(&traverse)) },
352
+ .{ .slot = c.Py_tp_clear, .pfunc = @ptrCast(@constCast(&clear_)) },
353
353
  .{ .slot = c.Py_tp_methods, .pfunc = @ptrCast(&methods) },
354
- .{ .slot = c.Py_tp_doc, .pfunc = @constCast(@ptrCast("A libuv-backed child process.")) },
354
+ .{ .slot = c.Py_tp_doc, .pfunc = @ptrCast(@constCast("A libuv-backed child process.")) },
355
355
  .{ .slot = 0, .pfunc = null },
356
356
  };
357
357
 
@@ -136,12 +136,12 @@ pub const Transport = extern struct {
136
136
 
137
137
  var handle_offset: usize = 0;
138
138
 
139
- /// A queued write: the libuv request, the buffer views keeping the caller's
140
- /// memory alive, and the vector libuv reads from - all in one allocation.
139
+ /// A queued write: the libuv request, immutable buffer views, and the vector
140
+ /// libuv reads from - all in one allocation.
141
141
  ///
142
- /// Retaining views rather than copying is what makes a large `write()` free:
143
- /// the exporter stays alive (and, for a bytearray, locked against resizing)
144
- /// until libuv reports the write complete.
142
+ /// An exact `bytes` object is retained without copying. Every other exporter is
143
+ /// snapshotted first, so its view owns immutable bytes rather than caller memory;
144
+ /// either way the backing object stays alive until libuv reports completion.
145
145
  ///
146
146
  /// The request does not take another Python reference to `transport`. The
147
147
  /// loop-owned handle reference remains alive until `onClosed`, and libuv runs
@@ -178,6 +178,23 @@ fn releaseViews(views: []c.Py_buffer) void {
178
178
  for (views) |*view| c.PyBuffer_Release(view);
179
179
  }
180
180
 
181
+ /// Hold immutable bytes directly; snapshot every other exporter before write()
182
+ /// returns so queued I/O cannot observe later mutations by the caller.
183
+ fn acquireWriteView(data: *py.Object, view: *c.Py_buffer) py.Error!void {
184
+ if (c.PyBytes_CheckExact(data) != 0) {
185
+ if (c.PyObject_GetBuffer(data, view, c.PyBUF_SIMPLE) < 0) return py.Error.Python;
186
+ return;
187
+ }
188
+
189
+ // SAFETY: PyObject_GetBuffer initializes source or returns an error.
190
+ var source: c.Py_buffer = undefined;
191
+ if (c.PyObject_GetBuffer(data, &source, c.PyBUF_SIMPLE) < 0) return py.Error.Python;
192
+ defer c.PyBuffer_Release(&source);
193
+ const snapshot = c.PyBytes_FromStringAndSize(@ptrCast(source.buf), source.len) orelse return py.Error.Python;
194
+ defer py.decref(snapshot);
195
+ if (c.PyObject_GetBuffer(snapshot, view, c.PyBUF_SIMPLE) < 0) return py.Error.Python;
196
+ }
197
+
181
198
  // ---------------------------------------------------------------------------
182
199
  // protocol dispatch
183
200
 
@@ -550,9 +567,13 @@ fn queueWrite(self: *Transport, bufs: []const uv.Buf, views: []c.Py_buffer) py.E
550
567
  /// Whether a write may proceed, releasing `views` if it may not.
551
568
  ///
552
569
  /// A close only drops the data; raising would turn an ordinary shutdown race
553
- /// into an exception. `write_eof()` is the caller's mistake and each entry point
554
- /// rejects it earlier, so an empty write is an error too.
570
+ /// into an exception. `write_eof()` is the caller's mistake, and must be checked
571
+ /// here too because acquiring an iterable or buffer can reenter the transport.
555
572
  fn acceptsWrite(self: *Transport, views: []c.Py_buffer) py.Error!bool {
573
+ if (self.flags & EOF_WRITTEN != 0) {
574
+ releaseViews(views);
575
+ return py.errRuntime("Cannot write after write_eof()");
576
+ }
556
577
  if (self.flags & (CONN_LOST | CLOSING) != 0) {
557
578
  releaseViews(views);
558
579
  return false;
@@ -875,8 +896,9 @@ pub fn startReadingMethod(self_obj: *py.Object) py.Error!*py.Object {
875
896
 
876
897
  fn write(self_obj: *py.Object, data: *py.Object) py.Error!*py.Object {
877
898
  const self = asTransport(self_obj);
899
+ // SAFETY: acquireWriteView initializes the only element or returns an error.
878
900
  var views = [_]c.Py_buffer{undefined};
879
- if (c.PyObject_GetBuffer(data, &views[0], c.PyBUF_SIMPLE) < 0) return py.Error.Python;
901
+ try acquireWriteView(data, &views[0]);
880
902
  if (self.flags & EOF_WRITTEN != 0) {
881
903
  c.PyBuffer_Release(&views[0]);
882
904
  return py.errRuntime("Cannot call write() after write_eof()");
@@ -912,12 +934,12 @@ fn writelines(self_obj: *py.Object, data: *py.Object) py.Error!*py.Object {
912
934
  return py.Error.Python;
913
935
  };
914
936
  // The buffer view keeps the exporter alive, so the item reference can go.
915
- const acquired = c.PyObject_GetBuffer(item, &views[filled], c.PyBUF_SIMPLE);
916
- py.decref(item);
917
- if (acquired < 0) {
937
+ acquireWriteView(item, &views[filled]) catch {
938
+ py.decref(item);
918
939
  releaseViews(views[0..filled]);
919
940
  return py.Error.Python;
920
- }
941
+ };
942
+ py.decref(item);
921
943
  bufs[filled] = .{ .base = @ptrCast(views[filled].buf), .len = @intCast(views[filled].len) };
922
944
  }
923
945
  try submitWrite(self, bufs, views);
@@ -12,6 +12,7 @@ import weakref
12
12
  from asyncio import events as _events
13
13
  from collections.abc import Callable, Coroutine
14
14
  from contextvars import Context
15
+ from dataclasses import dataclass
15
16
  from functools import partial
16
17
  from typing import Any
17
18
 
@@ -26,6 +27,27 @@ from ._instrumentation import (
26
27
  _ExceptionHandler = Callable[[asyncio.AbstractEventLoop, dict[str, Any]], object]
27
28
 
28
29
 
30
+ # Signal dispositions and the wakeup fd are process-global. Tokens let delayed
31
+ # finalization tell whether another loop has replaced the state it installed.
32
+ @dataclass(eq=False, slots=True)
33
+ class SignalOwner:
34
+ finalized: bool = False
35
+
36
+ def is_finalized(self) -> bool:
37
+ return self.finalized
38
+
39
+
40
+ @dataclass(frozen=True, slots=True)
41
+ class WakeupState:
42
+ fd: int
43
+ owner: SignalOwner | None
44
+ was_attached: bool
45
+
46
+
47
+ _signal_owners: dict[int, SignalOwner] = {}
48
+ _wakeup_fd_owner: SignalOwner | None = None
49
+
50
+
29
51
  # The native methods are stricter than typeshed's AbstractEventLoop, which
30
52
  # types several of them with TypeVarTuples this class cannot reproduce.
31
53
  class LoopBase(_zuvloop.Loop, asyncio.AbstractEventLoop): # type: ignore[misc]
@@ -53,6 +75,7 @@ class LoopBase(_zuvloop.Loop, asyncio.AbstractEventLoop): # type: ignore[misc]
53
75
  # Which `sock_*` call owns the watcher currently on each (fd, write).
54
76
  self._sock_watchers: dict[tuple[int, bool], object] = {}
55
77
  self._wakeup_fd_attached = False
78
+ self._signal_owner = SignalOwner()
56
79
  self._instrumentation = Instrumentation()
57
80
  self._monitoring_armed = False
58
81
  self._metrics_armed = False
@@ -71,7 +94,12 @@ class LoopBase(_zuvloop.Loop, asyncio.AbstractEventLoop): # type: ignore[misc]
71
94
  wakeup_fd = self._csock.fileno()
72
95
  try:
73
96
  self._defer_close(
74
- partial(_finish_deferred_signal_cleanup, tuple(self._signal_handlers), wakeup_fd)
97
+ partial(
98
+ _finish_deferred_signal_cleanup,
99
+ tuple(self._signal_handlers),
100
+ wakeup_fd,
101
+ self._signal_owner,
102
+ )
75
103
  )
76
104
  except BaseException: # pragma: no cover - CPython pending-call queue exhaustion
77
105
  try:
@@ -106,9 +134,9 @@ class LoopBase(_zuvloop.Loop, asyncio.AbstractEventLoop): # type: ignore[misc]
106
134
  sys.set_asyncgen_hooks(firstiter=self._asyncgen_firstiter, finalizer=self._asyncgen_finalizer)
107
135
  self._monitoring_armed = instrumentation_provider_installed()
108
136
  self._metrics_armed = metrics_provider_installed()
109
- self._set_slow_callback_monitoring(self._monitoring_armed)
110
- self._start_metrics(self.metrics_interval, self._on_sample)
111
137
  try:
138
+ self._set_slow_callback_monitoring(self._monitoring_armed)
139
+ self._start_metrics(self.metrics_interval, self._on_sample)
112
140
  self._run()
113
141
  finally:
114
142
  self._set_slow_callback_monitoring(False)
@@ -302,12 +330,56 @@ class LoopBase(_zuvloop.Loop, asyncio.AbstractEventLoop): # type: ignore[misc]
302
330
  self._ssock.close()
303
331
  self._csock.close()
304
332
 
305
- def _attach_wakeup_fd(self) -> None:
333
+ def _attach_wakeup_fd(self) -> WakeupState | None:
306
334
  # Only the main thread may own the wakeup fd, and only it runs Python
307
335
  # signal handlers - so a loop on any other thread simply skips this.
308
336
  if threading.current_thread() is threading.main_thread() and self._signal_handlers:
309
- signal.set_wakeup_fd(self._csock.fileno())
337
+ global _wakeup_fd_owner
338
+ previous_owner = _wakeup_fd_owner
339
+ previous_attached = self._wakeup_fd_attached
340
+ # Publish the provisional token before the syscall. A pending old
341
+ # cleanup can run as soon as the C call returns; it must already see
342
+ # that the descriptor has changed hands.
343
+ _wakeup_fd_owner = self._signal_owner
344
+ try:
345
+ previous_fd = signal.set_wakeup_fd(self._csock.fileno())
346
+ except OSError:
347
+ if previous_owner is None or not previous_owner.is_finalized():
348
+ _wakeup_fd_owner = previous_owner
349
+ else:
350
+ # A skipped stale cleanup may have closed its descriptor;
351
+ # never put that invalid owner back.
352
+ signal.set_wakeup_fd(-1)
353
+ _wakeup_fd_owner = None
354
+ raise
310
355
  self._wakeup_fd_attached = True
356
+ return WakeupState(previous_fd, previous_owner, previous_attached)
357
+ return None
358
+
359
+ def _restore_wakeup_fd(self, previous: WakeupState | None) -> None:
360
+ if previous is None:
361
+ return
362
+ global _wakeup_fd_owner
363
+ # Stale cleanup skips a replacement token, so this transaction remains
364
+ # the wakeup owner until it either commits or restores this snapshot.
365
+ assert _wakeup_fd_owner is self._signal_owner
366
+ abandon = previous.owner is not None and previous.owner.is_finalized()
367
+ try:
368
+ signal.set_wakeup_fd(-1 if abandon else previous.fd)
369
+ except OSError: # pragma: no cover - fd closed between check and syscall
370
+ # Finalization may close fd after the check but before the syscall.
371
+ signal.set_wakeup_fd(-1)
372
+ abandon = True
373
+ _wakeup_fd_owner = None if abandon else previous.owner
374
+ self._wakeup_fd_attached = False if abandon else previous.was_attached
375
+ # Revalidate after publishing: cleanup can run between any two Python
376
+ # operations above. If it did, never leave its closed fd reinstalled.
377
+ if ( # pragma: no cover - defensive recheck after deferred cleanup
378
+ previous.owner is not None and previous.owner.is_finalized() and _wakeup_fd_owner is previous.owner
379
+ ):
380
+ signal.set_wakeup_fd(-1)
381
+ _wakeup_fd_owner = None
382
+ self._wakeup_fd_attached = False
311
383
 
312
384
  def _detach_wakeup_fd(self) -> None:
313
385
  # Registered handlers must keep the fd active between separate calls
@@ -318,7 +390,10 @@ class LoopBase(_zuvloop.Loop, asyncio.AbstractEventLoop): # type: ignore[misc]
318
390
  and self._wakeup_fd_attached
319
391
  and not self._signal_handlers
320
392
  ):
321
- signal.set_wakeup_fd(-1)
393
+ global _wakeup_fd_owner
394
+ if _wakeup_fd_owner is self._signal_owner:
395
+ signal.set_wakeup_fd(-1)
396
+ _wakeup_fd_owner = None
322
397
  self._wakeup_fd_attached = False
323
398
 
324
399
  def _add_reader(self, fd: int, callback: Callable[..., object], *args: object) -> None:
@@ -343,7 +418,13 @@ class LoopBase(_zuvloop.Loop, asyncio.AbstractEventLoop): # type: ignore[misc]
343
418
  """
344
419
  try:
345
420
  while True:
346
- for signum in sock.recv(4096):
421
+ data = sock.recv(4096)
422
+ if not data:
423
+ # EOF remains level-triggered readable forever. Stop
424
+ # watching this dead pipe or the loop will spin on it.
425
+ self.remove_reader(sock.fileno())
426
+ break
427
+ for signum in data:
347
428
  self._dispatch_signal(signum)
348
429
  except BlockingIOError, InterruptedError:
349
430
  pass
@@ -360,12 +441,18 @@ def _stop_when_done(future: asyncio.Future[Any]) -> None:
360
441
  asyncio.futures._get_loop(future).stop() # type: ignore[attr-defined]
361
442
 
362
443
 
363
- def _finish_deferred_signal_cleanup(signals: tuple[int, ...], wakeup_fd: int) -> None:
364
- signal.set_wakeup_fd(-1)
444
+ def _finish_deferred_signal_cleanup(signals: tuple[int, ...], wakeup_fd: int, owner: SignalOwner) -> None:
445
+ global _wakeup_fd_owner
446
+ owner.finalized = True
447
+ if _wakeup_fd_owner is owner:
448
+ signal.set_wakeup_fd(-1)
449
+ _wakeup_fd_owner = None
365
450
  try:
366
451
  for sig in signals:
367
- handler = signal.default_int_handler if sig == signal.SIGINT else signal.SIG_DFL
368
- signal.signal(sig, handler)
452
+ if _signal_owners.get(sig) is owner:
453
+ del _signal_owners[sig]
454
+ handler = signal.default_int_handler if sig == signal.SIGINT else signal.SIG_DFL
455
+ signal.signal(sig, handler)
369
456
  finally:
370
457
  os.close(wakeup_fd)
371
458
 
@@ -913,7 +913,7 @@ class _SubprocessTransport(base_subprocess.BaseSubprocessTransport):
913
913
  assert self._proc is not None
914
914
  try:
915
915
  self._proc.send_signal(signal_number)
916
- except ProcessLookupError:
916
+ except ProcessLookupError: # pragma: no cover - pid exit race
917
917
  pass
918
918
 
919
919
  def terminate(self) -> None:
@@ -99,7 +99,7 @@ def capture_call_graph(handle: object = None) -> str | None:
99
99
  task = getattr(getattr(handle, "_callback", None), "__self__", None)
100
100
  if not isinstance(task, asyncio.Task):
101
101
  task = asyncio.current_task()
102
- if task is None:
102
+ if task is None or task.done():
103
103
  return None
104
104
  return asyncio.format_call_graph(task)
105
105