uWSGI 2.0.26__tar.gz → 2.0.27__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 (695) hide show
  1. {uwsgi-2.0.26 → uwsgi-2.0.27}/.github/workflows/test.yml +7 -3
  2. {uwsgi-2.0.26 → uwsgi-2.0.27}/PKG-INFO +1 -1
  3. uwsgi-2.0.27/buildconf/integration-tests.ini +4 -0
  4. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/init.c +1 -1
  5. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/loop.c +1 -0
  6. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/master_utils.c +6 -0
  7. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/uwsgi.c +24 -8
  8. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/php/common.h +2 -0
  9. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/php/php_plugin.c +16 -0
  10. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/pypy/pypy_setup.py +88 -48
  11. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/python/python_plugin.c +29 -15
  12. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/python/pyutils.c +6 -6
  13. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/python/uwsgi_python.h +15 -7
  14. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/pyuwsgi/pyuwsgi.c +2 -7
  15. {uwsgi-2.0.26 → uwsgi-2.0.27}/setup.py +1 -0
  16. uwsgi-2.0.27/t/php/config.ini +13 -0
  17. uwsgi-2.0.27/t/pypy/config.ini +7 -0
  18. uwsgi-2.0.27/t/python/helloapp.py +3 -0
  19. uwsgi-2.0.27/t/runner +144 -0
  20. {uwsgi-2.0.26 → uwsgi-2.0.27}/uwsgi.gemspec +1 -1
  21. {uwsgi-2.0.26 → uwsgi-2.0.27}/uwsgi.h +4 -0
  22. {uwsgi-2.0.26 → uwsgi-2.0.27}/uwsgiconfig.py +1 -1
  23. uwsgi-2.0.26/t/runner +0 -82
  24. {uwsgi-2.0.26 → uwsgi-2.0.27}/.github/workflows/compile-test.yml +0 -0
  25. {uwsgi-2.0.26 → uwsgi-2.0.27}/.gitignore +0 -0
  26. {uwsgi-2.0.26 → uwsgi-2.0.27}/CONTRIBUTORS +0 -0
  27. {uwsgi-2.0.26 → uwsgi-2.0.27}/INSTALL +0 -0
  28. {uwsgi-2.0.26 → uwsgi-2.0.27}/LICENSE +0 -0
  29. {uwsgi-2.0.26 → uwsgi-2.0.27}/Makefile +0 -0
  30. {uwsgi-2.0.26 → uwsgi-2.0.27}/README +0 -0
  31. {uwsgi-2.0.26 → uwsgi-2.0.27}/apache2/mod_Ruwsgi.c +0 -0
  32. {uwsgi-2.0.26 → uwsgi-2.0.27}/apache2/mod_proxy_uwsgi.c +0 -0
  33. {uwsgi-2.0.26 → uwsgi-2.0.27}/apache2/mod_uwsgi.c +0 -0
  34. {uwsgi-2.0.26 → uwsgi-2.0.27}/attach.py +0 -0
  35. {uwsgi-2.0.26 → uwsgi-2.0.27}/bin/uwsgi +0 -0
  36. {uwsgi-2.0.26 → uwsgi-2.0.27}/buildconf/all.ini +0 -0
  37. {uwsgi-2.0.26 → uwsgi-2.0.27}/buildconf/asyncio.ini +0 -0
  38. {uwsgi-2.0.26 → uwsgi-2.0.27}/buildconf/base.ini +0 -0
  39. {uwsgi-2.0.26 → uwsgi-2.0.27}/buildconf/cgi.ini +0 -0
  40. {uwsgi-2.0.26 → uwsgi-2.0.27}/buildconf/core.ini +0 -0
  41. {uwsgi-2.0.26 → uwsgi-2.0.27}/buildconf/coroae.ini +0 -0
  42. {uwsgi-2.0.26 → uwsgi-2.0.27}/buildconf/coverity.ini +0 -0
  43. {uwsgi-2.0.26 → uwsgi-2.0.27}/buildconf/default.ini +0 -0
  44. {uwsgi-2.0.26 → uwsgi-2.0.27}/buildconf/django.ini +0 -0
  45. {uwsgi-2.0.26 → uwsgi-2.0.27}/buildconf/embedded.ini +0 -0
  46. {uwsgi-2.0.26 → uwsgi-2.0.27}/buildconf/erlang.ini +0 -0
  47. {uwsgi-2.0.26 → uwsgi-2.0.27}/buildconf/gccgo.ini +0 -0
  48. {uwsgi-2.0.26 → uwsgi-2.0.27}/buildconf/gevent.ini +0 -0
  49. {uwsgi-2.0.26 → uwsgi-2.0.27}/buildconf/glusterfs.ini +0 -0
  50. {uwsgi-2.0.26 → uwsgi-2.0.27}/buildconf/gridfs.ini +0 -0
  51. {uwsgi-2.0.26 → uwsgi-2.0.27}/buildconf/jwsgi.ini +0 -0
  52. {uwsgi-2.0.26 → uwsgi-2.0.27}/buildconf/lib.ini +0 -0
  53. {uwsgi-2.0.26 → uwsgi-2.0.27}/buildconf/lua.ini +0 -0
  54. {uwsgi-2.0.26 → uwsgi-2.0.27}/buildconf/luap.ini +0 -0
  55. {uwsgi-2.0.26 → uwsgi-2.0.27}/buildconf/minimal.ini +0 -0
  56. {uwsgi-2.0.26 → uwsgi-2.0.27}/buildconf/modular.ini +0 -0
  57. {uwsgi-2.0.26 → uwsgi-2.0.27}/buildconf/mono.ini +0 -0
  58. {uwsgi-2.0.26 → uwsgi-2.0.27}/buildconf/nolang.ini +0 -0
  59. {uwsgi-2.0.26 → uwsgi-2.0.27}/buildconf/package.ini +0 -0
  60. {uwsgi-2.0.26 → uwsgi-2.0.27}/buildconf/php.ini +0 -0
  61. {uwsgi-2.0.26 → uwsgi-2.0.27}/buildconf/plonly.ini +0 -0
  62. {uwsgi-2.0.26 → uwsgi-2.0.27}/buildconf/ppa.ini +0 -0
  63. {uwsgi-2.0.26 → uwsgi-2.0.27}/buildconf/psgi.ini +0 -0
  64. {uwsgi-2.0.26 → uwsgi-2.0.27}/buildconf/pyerl.ini +0 -0
  65. {uwsgi-2.0.26 → uwsgi-2.0.27}/buildconf/pylua.ini +0 -0
  66. {uwsgi-2.0.26 → uwsgi-2.0.27}/buildconf/pyonly.ini +0 -0
  67. {uwsgi-2.0.26 → uwsgi-2.0.27}/buildconf/pypy.ini +0 -0
  68. {uwsgi-2.0.26 → uwsgi-2.0.27}/buildconf/pypyonly.ini +0 -0
  69. {uwsgi-2.0.26 → uwsgi-2.0.27}/buildconf/pyring.ini +0 -0
  70. {uwsgi-2.0.26 → uwsgi-2.0.27}/buildconf/pyuwsgi.ini +0 -0
  71. {uwsgi-2.0.26 → uwsgi-2.0.27}/buildconf/pyuwsginossl.ini +0 -0
  72. {uwsgi-2.0.26 → uwsgi-2.0.27}/buildconf/rack.ini +0 -0
  73. {uwsgi-2.0.26 → uwsgi-2.0.27}/buildconf/rados.ini +0 -0
  74. {uwsgi-2.0.26 → uwsgi-2.0.27}/buildconf/rbonly.ini +0 -0
  75. {uwsgi-2.0.26 → uwsgi-2.0.27}/buildconf/ring.ini +0 -0
  76. {uwsgi-2.0.26 → uwsgi-2.0.27}/buildconf/ruby2.ini +0 -0
  77. {uwsgi-2.0.26 → uwsgi-2.0.27}/buildconf/servlet.ini +0 -0
  78. {uwsgi-2.0.26 → uwsgi-2.0.27}/buildconf/travis.ini +0 -0
  79. {uwsgi-2.0.26 → uwsgi-2.0.27}/buildconf/unbit.ini +0 -0
  80. {uwsgi-2.0.26 → uwsgi-2.0.27}/buildconf/unbitstaff.ini +0 -0
  81. {uwsgi-2.0.26 → uwsgi-2.0.27}/buildconf/unittest.ini +0 -0
  82. {uwsgi-2.0.26 → uwsgi-2.0.27}/buildconf/uwsgi.it.ini +0 -0
  83. {uwsgi-2.0.26 → uwsgi-2.0.27}/buildconf/v8.ini +0 -0
  84. {uwsgi-2.0.26 → uwsgi-2.0.27}/contrib/Uwsgi.pm +0 -0
  85. {uwsgi-2.0.26 → uwsgi-2.0.27}/contrib/binder.pl +0 -0
  86. {uwsgi-2.0.26 → uwsgi-2.0.27}/contrib/centos_init_script +0 -0
  87. {uwsgi-2.0.26 → uwsgi-2.0.27}/contrib/cgi_python.c +0 -0
  88. {uwsgi-2.0.26 → uwsgi-2.0.27}/contrib/cryptologger.rb +0 -0
  89. {uwsgi-2.0.26 → uwsgi-2.0.27}/contrib/emperormon.ru +0 -0
  90. {uwsgi-2.0.26 → uwsgi-2.0.27}/contrib/fdconf.pl +0 -0
  91. {uwsgi-2.0.26 → uwsgi-2.0.27}/contrib/graphite_uwsgi.py +0 -0
  92. {uwsgi-2.0.26 → uwsgi-2.0.27}/contrib/launchd/it.unbit.uwsgi.emperor.plist +0 -0
  93. {uwsgi-2.0.26 → uwsgi-2.0.27}/contrib/launchd/it.unbit.uwsgi.plist +0 -0
  94. {uwsgi-2.0.26 → uwsgi-2.0.27}/contrib/loadapp.pl +0 -0
  95. {uwsgi-2.0.26 → uwsgi-2.0.27}/contrib/pypy/uwsgi_pypy_greenlets.py +0 -0
  96. {uwsgi-2.0.26 → uwsgi-2.0.27}/contrib/pyuwsgi.py +0 -0
  97. {uwsgi-2.0.26 → uwsgi-2.0.27}/contrib/runuwsgi.py +0 -0
  98. {uwsgi-2.0.26 → uwsgi-2.0.27}/contrib/securesubscribe.pl +0 -0
  99. {uwsgi-2.0.26 → uwsgi-2.0.27}/contrib/spoolqueue/producer.py +0 -0
  100. {uwsgi-2.0.26 → uwsgi-2.0.27}/contrib/spoolqueue/tasks.py +0 -0
  101. {uwsgi-2.0.26 → uwsgi-2.0.27}/contrib/spoolqueue/tasksconsumer.py +0 -0
  102. {uwsgi-2.0.26 → uwsgi-2.0.27}/contrib/subscribe.pl +0 -0
  103. {uwsgi-2.0.26 → uwsgi-2.0.27}/contrib/twuwsgi.py +0 -0
  104. {uwsgi-2.0.26 → uwsgi-2.0.27}/contrib/upstart/emperor.conf +0 -0
  105. {uwsgi-2.0.26 → uwsgi-2.0.27}/contrib/upstart/uwsgi.conf +0 -0
  106. {uwsgi-2.0.26 → uwsgi-2.0.27}/contrib/upython +0 -0
  107. {uwsgi-2.0.26 → uwsgi-2.0.27}/contrib/urack.rb +0 -0
  108. {uwsgi-2.0.26 → uwsgi-2.0.27}/contrib/uwsgi-cache-monitor.py +0 -0
  109. {uwsgi-2.0.26 → uwsgi-2.0.27}/contrib/uwsgi.erl +0 -0
  110. {uwsgi-2.0.26 → uwsgi-2.0.27}/contrib/uwsgi.java +0 -0
  111. {uwsgi-2.0.26 → uwsgi-2.0.27}/contrib/uwsgi.rb +0 -0
  112. {uwsgi-2.0.26 → uwsgi-2.0.27}/contrib/uwsgi_client.c +0 -0
  113. {uwsgi-2.0.26 → uwsgi-2.0.27}/contrib/uwsgi_dynamic_client.c +0 -0
  114. {uwsgi-2.0.26 → uwsgi-2.0.27}/contrib/uwsgisubscribers.ru +0 -0
  115. {uwsgi-2.0.26 → uwsgi-2.0.27}/contrib/xinetd_uwsgi +0 -0
  116. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/alarm.c +0 -0
  117. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/async.c +0 -0
  118. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/buffer.c +0 -0
  119. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/cache.c +0 -0
  120. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/chunked.c +0 -0
  121. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/clang_fake.c +0 -0
  122. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/clock.c +0 -0
  123. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/config.c +0 -0
  124. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/cookie.c +0 -0
  125. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/cron.c +0 -0
  126. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/daemons.c +0 -0
  127. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/emperor.c +0 -0
  128. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/errors.c +0 -0
  129. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/event.c +0 -0
  130. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/exceptions.c +0 -0
  131. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/fifo.c +0 -0
  132. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/fsmon.c +0 -0
  133. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/gateway.c +0 -0
  134. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/hash.c +0 -0
  135. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/hooks.c +0 -0
  136. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/ini.c +0 -0
  137. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/io.c +0 -0
  138. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/json.c +0 -0
  139. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/legion.c +0 -0
  140. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/lock.c +0 -0
  141. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/logging. +0 -0
  142. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/logging.c +0 -0
  143. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/master.c +0 -0
  144. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/master_checks.c +0 -0
  145. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/master_events.c +0 -0
  146. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/metrics.c +0 -0
  147. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/mount.c +0 -0
  148. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/mule.c +0 -0
  149. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/notify.c +0 -0
  150. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/offload.c +0 -0
  151. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/plugins.c +0 -0
  152. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/plugins_builder.c +0 -0
  153. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/progress.c +0 -0
  154. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/protocol.c +0 -0
  155. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/querystring.c +0 -0
  156. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/queue.c +0 -0
  157. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/rb_timers.c +0 -0
  158. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/reader.c +0 -0
  159. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/regexp.c +0 -0
  160. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/routing.c +0 -0
  161. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/rpc.c +0 -0
  162. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/sendfile.c +0 -0
  163. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/setup_utils.c +0 -0
  164. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/sharedarea.c +0 -0
  165. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/signal.c +0 -0
  166. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/skel.c +0 -0
  167. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/snmp.c +0 -0
  168. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/socket.c +0 -0
  169. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/spooler.c +0 -0
  170. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/ssl.c +0 -0
  171. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/static.c +0 -0
  172. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/stats.c +0 -0
  173. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/storage.c +0 -0
  174. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/strings.c +0 -0
  175. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/subscription.c +0 -0
  176. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/timebomb.c +0 -0
  177. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/transformations.c +0 -0
  178. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/utils.c +0 -0
  179. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/websockets.c +0 -0
  180. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/writer.c +0 -0
  181. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/xmlconf.c +0 -0
  182. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/yaml.c +0 -0
  183. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/zeus.c +0 -0
  184. {uwsgi-2.0.26 → uwsgi-2.0.27}/core/zlib.c +0 -0
  185. {uwsgi-2.0.26 → uwsgi-2.0.27}/examples/bootstrap.py +0 -0
  186. {uwsgi-2.0.26 → uwsgi-2.0.27}/examples/bootstrap2.py +0 -0
  187. {uwsgi-2.0.26 → uwsgi-2.0.27}/examples/bootstrap3.py +0 -0
  188. {uwsgi-2.0.26 → uwsgi-2.0.27}/examples/bootstrap4.py +0 -0
  189. {uwsgi-2.0.26 → uwsgi-2.0.27}/examples/bootstrap5.py +0 -0
  190. {uwsgi-2.0.26 → uwsgi-2.0.27}/examples/config.lua +0 -0
  191. {uwsgi-2.0.26 → uwsgi-2.0.27}/examples/config.ru +0 -0
  192. {uwsgi-2.0.26 → uwsgi-2.0.27}/examples/config17.ru +0 -0
  193. {uwsgi-2.0.26 → uwsgi-2.0.27}/examples/config2.lua +0 -0
  194. {uwsgi-2.0.26 → uwsgi-2.0.27}/examples/config2.ru +0 -0
  195. {uwsgi-2.0.26 → uwsgi-2.0.27}/examples/config30.ru +0 -0
  196. {uwsgi-2.0.26 → uwsgi-2.0.27}/examples/corostream.pl +0 -0
  197. {uwsgi-2.0.26 → uwsgi-2.0.27}/examples/debug.ini +0 -0
  198. {uwsgi-2.0.26 → uwsgi-2.0.27}/examples/fibers.ru +0 -0
  199. {uwsgi-2.0.26 → uwsgi-2.0.27}/examples/fibers.yml +0 -0
  200. {uwsgi-2.0.26 → uwsgi-2.0.27}/examples/flaskpost.py +0 -0
  201. {uwsgi-2.0.26 → uwsgi-2.0.27}/examples/heavytest.ini +0 -0
  202. {uwsgi-2.0.26 → uwsgi-2.0.27}/examples/heavytest.py +0 -0
  203. {uwsgi-2.0.26 → uwsgi-2.0.27}/examples/info_uwsgi.php +0 -0
  204. {uwsgi-2.0.26 → uwsgi-2.0.27}/examples/logic.ini +0 -0
  205. {uwsgi-2.0.26 → uwsgi-2.0.27}/examples/mega.xml +0 -0
  206. {uwsgi-2.0.26 → uwsgi-2.0.27}/examples/mjpeg_stream.py +0 -0
  207. {uwsgi-2.0.26 → uwsgi-2.0.27}/examples/mojoapp.pl +0 -0
  208. {uwsgi-2.0.26 → uwsgi-2.0.27}/examples/multi.ini +0 -0
  209. {uwsgi-2.0.26 → uwsgi-2.0.27}/examples/multi.xml +0 -0
  210. {uwsgi-2.0.26 → uwsgi-2.0.27}/examples/multiapp.py +0 -0
  211. {uwsgi-2.0.26 → uwsgi-2.0.27}/examples/protected.ini +0 -0
  212. {uwsgi-2.0.26 → uwsgi-2.0.27}/examples/router.lua +0 -0
  213. {uwsgi-2.0.26 → uwsgi-2.0.27}/examples/simple_app.py +0 -0
  214. {uwsgi-2.0.26 → uwsgi-2.0.27}/examples/simple_app_wsgi2.py +0 -0
  215. {uwsgi-2.0.26 → uwsgi-2.0.27}/examples/simple_logger.py +0 -0
  216. {uwsgi-2.0.26 → uwsgi-2.0.27}/examples/sites.xml +0 -0
  217. {uwsgi-2.0.26 → uwsgi-2.0.27}/examples/sputnik.ws +0 -0
  218. {uwsgi-2.0.26 → uwsgi-2.0.27}/examples/staticfilesnmp.py +0 -0
  219. {uwsgi-2.0.26 → uwsgi-2.0.27}/examples/taskqueue.py +0 -0
  220. {uwsgi-2.0.26 → uwsgi-2.0.27}/examples/uwsgi.xml +0 -0
  221. {uwsgi-2.0.26 → uwsgi-2.0.27}/examples/uwsgirouter.py +0 -0
  222. {uwsgi-2.0.26 → uwsgi-2.0.27}/examples/uwsgirouter2.py +0 -0
  223. {uwsgi-2.0.26 → uwsgi-2.0.27}/examples/uwsgirouter3.py +0 -0
  224. {uwsgi-2.0.26 → uwsgi-2.0.27}/examples/uwsgirouter4.py +0 -0
  225. {uwsgi-2.0.26 → uwsgi-2.0.27}/examples/uwsgirouter5.py +0 -0
  226. {uwsgi-2.0.26 → uwsgi-2.0.27}/examples/uwsgistatus.py +0 -0
  227. {uwsgi-2.0.26 → uwsgi-2.0.27}/examples/welcome.ini +0 -0
  228. {uwsgi-2.0.26 → uwsgi-2.0.27}/examples/welcome.py +0 -0
  229. {uwsgi-2.0.26 → uwsgi-2.0.27}/examples/welcome3.py +0 -0
  230. {uwsgi-2.0.26 → uwsgi-2.0.27}/examples/werkzeug.js +0 -0
  231. {uwsgi-2.0.26 → uwsgi-2.0.27}/examples/werkzeug.yml +0 -0
  232. {uwsgi-2.0.26 → uwsgi-2.0.27}/examples/werkzeug_strict.yml +0 -0
  233. {uwsgi-2.0.26 → uwsgi-2.0.27}/examples/xmlindex-html.xsl +0 -0
  234. {uwsgi-2.0.26 → uwsgi-2.0.27}/examples/xmlindex.ini +0 -0
  235. {uwsgi-2.0.26 → uwsgi-2.0.27}/examples/zmqgevent.ini +0 -0
  236. {uwsgi-2.0.26 → uwsgi-2.0.27}/ext/uwsgi/extconf.rb +0 -0
  237. {uwsgi-2.0.26 → uwsgi-2.0.27}/install.sh +0 -0
  238. {uwsgi-2.0.26 → uwsgi-2.0.27}/lib/linux_ns.c +0 -0
  239. {uwsgi-2.0.26 → uwsgi-2.0.27}/lib/netlink.c +0 -0
  240. {uwsgi-2.0.26 → uwsgi-2.0.27}/lib/sun_fixes.c +0 -0
  241. {uwsgi-2.0.26 → uwsgi-2.0.27}/logo_uWSGI.png +0 -0
  242. {uwsgi-2.0.26 → uwsgi-2.0.27}/logo_uWSGI.svg +0 -0
  243. {uwsgi-2.0.26 → uwsgi-2.0.27}/mongrel2-uwsgi.conf +0 -0
  244. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/airbrake/airbrake_plugin.c +0 -0
  245. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/airbrake/uwsgiplugin.py +0 -0
  246. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/alarm_curl/alarm_curl_plugin.c +0 -0
  247. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/alarm_curl/uwsgiplugin.py +0 -0
  248. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/alarm_speech/alarm_speech.m +0 -0
  249. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/alarm_speech/uwsgiplugin.py +0 -0
  250. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/alarm_xmpp/alarm_xmpp_plugin.c +0 -0
  251. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/alarm_xmpp/gloox.cc +0 -0
  252. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/alarm_xmpp/uwsgiplugin.py +0 -0
  253. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/asyncio/asyncio.c +0 -0
  254. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/asyncio/uwsgiplugin.py +0 -0
  255. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/cache/cache.c +0 -0
  256. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/cache/uwsgiplugin.py +0 -0
  257. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/carbon/carbon.c +0 -0
  258. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/carbon/uwsgiplugin.py +0 -0
  259. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/cgi/cgi_plugin.c +0 -0
  260. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/cgi/uwsgiplugin.py +0 -0
  261. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/cheaper_backlog2/cheaper_backlog2.c +0 -0
  262. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/cheaper_backlog2/uwsgiplugin.py +0 -0
  263. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/cheaper_busyness/cheaper_busyness.c +0 -0
  264. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/cheaper_busyness/uwsgiplugin.py +0 -0
  265. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/clock_monotonic/clock_monotonic.c +0 -0
  266. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/clock_monotonic/uwsgiplugin.py +0 -0
  267. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/clock_realtime/clock_realtime.c +0 -0
  268. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/clock_realtime/uwsgiplugin.py +0 -0
  269. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/corerouter/corerouter.c +0 -0
  270. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/corerouter/cr.h +0 -0
  271. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/corerouter/cr_common.c +0 -0
  272. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/corerouter/cr_map.c +0 -0
  273. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/corerouter/uwsgiplugin.py +0 -0
  274. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/coroae/coroae.c +0 -0
  275. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/coroae/uwsgiplugin.py +0 -0
  276. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/cplusplus/base.cc +0 -0
  277. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/cplusplus/plugin.c +0 -0
  278. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/cplusplus/uwsgiplugin.py +0 -0
  279. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/curl_cron/curl_cron.c +0 -0
  280. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/curl_cron/uwsgiplugin.py +0 -0
  281. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/dumbloop/dumb.c +0 -0
  282. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/dumbloop/uwsgiplugin.py +0 -0
  283. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/dummy/dummy.c +0 -0
  284. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/dummy/uwsgiplugin.py +0 -0
  285. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/echo/echo_plugin.c +0 -0
  286. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/echo/uwsgiplugin.py +0 -0
  287. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/emperor_amqp/amqp.c +0 -0
  288. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/emperor_amqp/emperor_amqp.c +0 -0
  289. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/emperor_amqp/uwsgiplugin.py +0 -0
  290. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/emperor_mongodb/emperor_mongodb.cc +0 -0
  291. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/emperor_mongodb/plugin.c +0 -0
  292. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/emperor_mongodb/uwsgiplugin.py +0 -0
  293. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/emperor_pg/emperor_pg.c +0 -0
  294. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/emperor_pg/uwsgiplugin.py +0 -0
  295. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/emperor_zeromq/emperor_zeromq.c +0 -0
  296. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/emperor_zeromq/uwsgiplugin.py +0 -0
  297. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/example/example_plugin.c +0 -0
  298. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/example/uwsgiplugin.py +0 -0
  299. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/exception_log/exception_log.c +0 -0
  300. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/exception_log/uwsgiplugin.py +0 -0
  301. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/fastrouter/fastrouter.c +0 -0
  302. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/fastrouter/uwsgiplugin.py +0 -0
  303. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/fiber/fiber.c +0 -0
  304. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/fiber/uwsgiplugin.py +0 -0
  305. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/forkptyrouter/forkptyrouter.c +0 -0
  306. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/forkptyrouter/uwsgiplugin.py +0 -0
  307. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/gccgo/gccgo_plugin.c +0 -0
  308. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/gccgo/uwsgi.go +0 -0
  309. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/gccgo/uwsgiplugin.py +0 -0
  310. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/geoip/geoip.c +0 -0
  311. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/geoip/uwsgiplugin.py +0 -0
  312. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/gevent/gevent.c +0 -0
  313. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/gevent/gevent.h +0 -0
  314. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/gevent/hooks.c +0 -0
  315. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/gevent/uwsgiplugin.py +0 -0
  316. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/glusterfs/glusterfs.c +0 -0
  317. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/glusterfs/uwsgiplugin.py +0 -0
  318. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/graylog2/graylog2_plugin.c +0 -0
  319. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/graylog2/uwsgiplugin.py +0 -0
  320. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/greenlet/greenlet.c +0 -0
  321. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/greenlet/uwsgiplugin.py +0 -0
  322. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/gridfs/gridfs.cc +0 -0
  323. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/gridfs/plugin.c +0 -0
  324. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/gridfs/uwsgiplugin.py +0 -0
  325. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/http/common.h +0 -0
  326. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/http/http.c +0 -0
  327. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/http/https.c +0 -0
  328. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/http/keepalive.c +0 -0
  329. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/http/spdy3.c +0 -0
  330. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/http/spdy3.h +0 -0
  331. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/http/uwsgiplugin.py +0 -0
  332. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/jvm/jvm.h +0 -0
  333. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/jvm/jvm_plugin.c +0 -0
  334. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/jvm/uwsgi.java +0 -0
  335. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/jvm/uwsgiplugin.py +0 -0
  336. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/jwsgi/jwsgi_plugin.c +0 -0
  337. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/jwsgi/uwsgiplugin.py +0 -0
  338. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/ldap/ldap.c +0 -0
  339. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/ldap/uwsgiplugin.py +0 -0
  340. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/legion_cache_fetch/legion_cache_fetch.c +0 -0
  341. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/legion_cache_fetch/uwsgiplugin.py +0 -0
  342. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/libffi/libffi.c +0 -0
  343. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/libffi/uwsgiplugin.py +0 -0
  344. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/libtcc/libtcc.c +0 -0
  345. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/libtcc/uwsgiplugin.py +0 -0
  346. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/logcrypto/logcrypto.c +0 -0
  347. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/logcrypto/uwsgiplugin.py +0 -0
  348. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/logfile/logfile.c +0 -0
  349. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/logfile/uwsgiplugin.py +0 -0
  350. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/logpipe/logpipe.c +0 -0
  351. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/logpipe/uwsgiplugin.py +0 -0
  352. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/logsocket/logsocket_plugin.c +0 -0
  353. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/logsocket/uwsgiplugin.py +0 -0
  354. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/logzmq/plugin.c +0 -0
  355. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/logzmq/uwsgiplugin.py +0 -0
  356. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/lua/lua_plugin.c +0 -0
  357. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/lua/uwsgiplugin.py +0 -0
  358. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/matheval/math.c +0 -0
  359. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/matheval/uwsgiplugin.py +0 -0
  360. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/mongodb/plugin.c +0 -0
  361. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/mongodb/uwsgiplugin.py +0 -0
  362. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/mongodblog/mongodblog_plugin.c +0 -0
  363. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/mongodblog/uwsgiplugin.py +0 -0
  364. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/mongrel2/mongrel2.c +0 -0
  365. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/mongrel2/uwsgiplugin.py +0 -0
  366. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/mono/mono_plugin.c +0 -0
  367. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/mono/uwsgi.cs +0 -0
  368. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/mono/uwsgiplugin.py +0 -0
  369. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/msgpack/msgpack.c +0 -0
  370. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/msgpack/uwsgiplugin.py +0 -0
  371. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/nagios/nagios.c +0 -0
  372. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/nagios/uwsgiplugin.py +0 -0
  373. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/notfound/notfound.c +0 -0
  374. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/notfound/uwsgiplugin.py +0 -0
  375. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/objc_gc/objc_gc.m +0 -0
  376. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/objc_gc/uwsgiplugin.py +0 -0
  377. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/pam/pam.c +0 -0
  378. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/pam/uwsgiplugin.py +0 -0
  379. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/php/session.c +0 -0
  380. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/php/uwsgiplugin.py +0 -0
  381. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/ping/ping_plugin.c +0 -0
  382. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/ping/uwsgiplugin.py +0 -0
  383. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/psgi/psgi.h +0 -0
  384. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/psgi/psgi_loader.c +0 -0
  385. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/psgi/psgi_plugin.c +0 -0
  386. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/psgi/psgi_response.c +0 -0
  387. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/psgi/uwsgi_plmodule.c +0 -0
  388. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/psgi/uwsgiplugin.py +0 -0
  389. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/pty/pty.c +0 -0
  390. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/pty/uwsgiplugin.py +0 -0
  391. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/pypy/README +0 -0
  392. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/pypy/pypy_plugin.c +0 -0
  393. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/pypy/uwsgiplugin.py +0 -0
  394. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/python/gil.c +0 -0
  395. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/python/profiler.c +0 -0
  396. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/python/pump_subhandler.c +0 -0
  397. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/python/pyloader.c +0 -0
  398. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/python/raw.c +0 -0
  399. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/python/symimporter.c +0 -0
  400. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/python/tracebacker.c +0 -0
  401. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/python/uwsgi_pymodule.c +0 -0
  402. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/python/uwsgiplugin.py +0 -0
  403. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/python/web3_subhandler.c +0 -0
  404. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/python/wsgi_handlers.c +0 -0
  405. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/python/wsgi_headers.c +0 -0
  406. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/python/wsgi_subhandler.c +0 -0
  407. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/pyuwsgi/uwsgiplugin.py +0 -0
  408. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/rack/rack_api.c +0 -0
  409. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/rack/rack_plugin.c +0 -0
  410. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/rack/uwsgi_rack.h +0 -0
  411. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/rack/uwsgiplugin.py +0 -0
  412. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/rados/rados.c +0 -0
  413. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/rados/uwsgiplugin.py +0 -0
  414. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/rawrouter/rawrouter.c +0 -0
  415. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/rawrouter/uwsgiplugin.py +0 -0
  416. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/rbthreads/rbthreads.c +0 -0
  417. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/rbthreads/uwsgiplugin.py +0 -0
  418. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/redislog/redislog_plugin.c +0 -0
  419. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/redislog/uwsgiplugin.py +0 -0
  420. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/ring/ring_plugin.c +0 -0
  421. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/ring/uwsgiplugin.py +0 -0
  422. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/router_access/router_access.c +0 -0
  423. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/router_access/uwsgiplugin.py +0 -0
  424. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/router_basicauth/router_basicauth.c +0 -0
  425. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/router_basicauth/uwsgiplugin.py +0 -0
  426. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/router_cache/router_cache.c +0 -0
  427. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/router_cache/uwsgiplugin.py +0 -0
  428. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/router_expires/expires.c +0 -0
  429. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/router_expires/uwsgiplugin.py +0 -0
  430. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/router_hash/router_hash.c +0 -0
  431. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/router_hash/uwsgiplugin.py +0 -0
  432. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/router_http/router_http.c +0 -0
  433. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/router_http/uwsgiplugin.py +0 -0
  434. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/router_memcached/router_memcached.c +0 -0
  435. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/router_memcached/uwsgiplugin.py +0 -0
  436. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/router_metrics/plugin.c +0 -0
  437. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/router_metrics/uwsgiplugin.py +0 -0
  438. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/router_radius/radius.c +0 -0
  439. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/router_radius/uwsgiplugin.py +0 -0
  440. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/router_redirect/router_redirect.c +0 -0
  441. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/router_redirect/uwsgiplugin.py +0 -0
  442. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/router_redis/router_redis.c +0 -0
  443. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/router_redis/uwsgiplugin.py +0 -0
  444. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/router_rewrite/router_rewrite.c +0 -0
  445. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/router_rewrite/uwsgiplugin.py +0 -0
  446. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/router_spnego/router_spnego.c +0 -0
  447. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/router_spnego/uwsgiplugin.py +0 -0
  448. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/router_static/router_static.c +0 -0
  449. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/router_static/uwsgiplugin.py +0 -0
  450. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/router_uwsgi/router_uwsgi.c +0 -0
  451. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/router_uwsgi/uwsgiplugin.py +0 -0
  452. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/router_xmldir/router_xmldir.c +0 -0
  453. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/router_xmldir/uwsgiplugin.py +0 -0
  454. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/rpc/rpc_plugin.c +0 -0
  455. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/rpc/uwsgiplugin.py +0 -0
  456. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/rrdtool/rrdtool.c +0 -0
  457. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/rrdtool/uwsgiplugin.py +0 -0
  458. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/rsyslog/rsyslog_plugin.c +0 -0
  459. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/rsyslog/uwsgiplugin.py +0 -0
  460. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/ruby19/uwsgiplugin.py +0 -0
  461. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/servlet/servlet_plugin.c +0 -0
  462. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/servlet/uwsgi_servlet.java +0 -0
  463. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/servlet/uwsgiplugin.py +0 -0
  464. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/signal/signal_plugin.c +0 -0
  465. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/signal/uwsgiplugin.py +0 -0
  466. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/spooler/spooler_plugin.c +0 -0
  467. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/spooler/uwsgiplugin.py +0 -0
  468. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/sqlite3/plugin.c +0 -0
  469. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/sqlite3/uwsgiplugin.py +0 -0
  470. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/ssi/ssi.c +0 -0
  471. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/ssi/uwsgiplugin.py +0 -0
  472. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/sslrouter/sslrouter.c +0 -0
  473. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/sslrouter/uwsgiplugin.py +0 -0
  474. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/stackless/stackless.c +0 -0
  475. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/stackless/uwsgiplugin.py +0 -0
  476. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/stats_pusher_file/plugin.c +0 -0
  477. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/stats_pusher_file/uwsgiplugin.py +0 -0
  478. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/stats_pusher_mongodb/plugin.c +0 -0
  479. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/stats_pusher_mongodb/stats_pusher_mongodb.cc +0 -0
  480. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/stats_pusher_mongodb/uwsgiplugin.py +0 -0
  481. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/stats_pusher_socket/plugin.c +0 -0
  482. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/stats_pusher_socket/uwsgiplugin.py +0 -0
  483. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/stats_pusher_statsd/plugin.c +0 -0
  484. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/stats_pusher_statsd/uwsgiplugin.py +0 -0
  485. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/symcall/symcall_plugin.c +0 -0
  486. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/symcall/uwsgiplugin.py +0 -0
  487. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/syslog/syslog_plugin.c +0 -0
  488. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/syslog/uwsgiplugin.py +0 -0
  489. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/systemd_logger/systemd_logger.c +0 -0
  490. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/systemd_logger/uwsgiplugin.py +0 -0
  491. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/tornado/tornado.c +0 -0
  492. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/tornado/uwsgiplugin.py +0 -0
  493. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/transformation_chunked/chunked.c +0 -0
  494. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/transformation_chunked/uwsgiplugin.py +0 -0
  495. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/transformation_gzip/gzip.c +0 -0
  496. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/transformation_gzip/uwsgiplugin.py +0 -0
  497. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/transformation_offload/offload.c +0 -0
  498. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/transformation_offload/uwsgiplugin.py +0 -0
  499. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/transformation_template/tt.c +0 -0
  500. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/transformation_template/uwsgiplugin.py +0 -0
  501. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/transformation_tofile/tofile.c +0 -0
  502. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/transformation_tofile/uwsgiplugin.py +0 -0
  503. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/transformation_toupper/toupper.c +0 -0
  504. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/transformation_toupper/uwsgiplugin.py +0 -0
  505. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/tuntap/common.c +0 -0
  506. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/tuntap/common.h +0 -0
  507. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/tuntap/firewall.c +0 -0
  508. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/tuntap/tuntap.c +0 -0
  509. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/tuntap/uwsgiplugin.py +0 -0
  510. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/ugreen/ugreen.c +0 -0
  511. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/ugreen/uwsgiplugin.py +0 -0
  512. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/v8/plugin.c +0 -0
  513. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/v8/uwsgiplugin.py +0 -0
  514. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/v8/v8_commonjs.cc +0 -0
  515. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/v8/v8_jsgi.cc +0 -0
  516. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/v8/v8_uwsgi.cc +0 -0
  517. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/v8/v8_uwsgi.h +0 -0
  518. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/webdav/uwsgiplugin.py +0 -0
  519. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/webdav/webdav.c +0 -0
  520. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/xattr/uwsgiplugin.py +0 -0
  521. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/xattr/xattr.c +0 -0
  522. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/xslt/uwsgiplugin.py +0 -0
  523. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/xslt/xslt.c +0 -0
  524. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/zabbix/plugin.c +0 -0
  525. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/zabbix/uwsgiplugin.py +0 -0
  526. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/zergpool/uwsgiplugin.py +0 -0
  527. {uwsgi-2.0.26 → uwsgi-2.0.27}/plugins/zergpool/zergpool.c +0 -0
  528. {uwsgi-2.0.26 → uwsgi-2.0.27}/proto/BUILD +0 -0
  529. {uwsgi-2.0.26 → uwsgi-2.0.27}/proto/base.c +0 -0
  530. {uwsgi-2.0.26 → uwsgi-2.0.27}/proto/fastcgi.c +0 -0
  531. {uwsgi-2.0.26 → uwsgi-2.0.27}/proto/http.c +0 -0
  532. {uwsgi-2.0.26 → uwsgi-2.0.27}/proto/puwsgi.c +0 -0
  533. {uwsgi-2.0.26 → uwsgi-2.0.27}/proto/scgi.c +0 -0
  534. {uwsgi-2.0.26 → uwsgi-2.0.27}/proto/uwsgi.c +0 -0
  535. {uwsgi-2.0.26 → uwsgi-2.0.27}/setup.cpyext.py +0 -0
  536. {uwsgi-2.0.26 → uwsgi-2.0.27}/setup.pyuwsgi.py +0 -0
  537. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/cachebitmap.ini +0 -0
  538. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/cachebitmap.py +0 -0
  539. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/cachetest.py +0 -0
  540. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/clojure/myapp.clj +0 -0
  541. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/core/apps/read_body_and_send.pl +0 -0
  542. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/core/read_body_and_send.pl +0 -0
  543. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/core/url_sanitize.pl +0 -0
  544. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/go/cachetest.go +0 -0
  545. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/go/complextest.go +0 -0
  546. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/go/uploadtest.go +0 -0
  547. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/java/rpc.java +0 -0
  548. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/lua/basic.lua +0 -0
  549. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/mono/cache.aspx +0 -0
  550. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/mules/mulebrain.py +0 -0
  551. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/mules/reload.py +0 -0
  552. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/mules/signal_management.py +0 -0
  553. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/perl/active_workers_signal.pl +0 -0
  554. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/perl/apps/input_with_offset.pl +0 -0
  555. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/perl/test.psgi +0 -0
  556. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/perl/test_benchmark.pl +0 -0
  557. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/perl/test_harakiri.psgi +0 -0
  558. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/perl/test_hello.psgi +0 -0
  559. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/perl/test_input_with_offset.pl +0 -0
  560. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/perl/test_post.psgi +0 -0
  561. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/perl/test_sleepy.psgi +0 -0
  562. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/perl/test_streaming.psgi +0 -0
  563. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/pypy/t_continulet1.py +0 -0
  564. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/pypy/t_continulet2.py +0 -0
  565. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/python/forcecl.py +0 -0
  566. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/python/manage_script_name/manage_script_name_test.ini +0 -0
  567. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/python/manage_script_name/test_manage_script_name.py +0 -0
  568. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/python/manage_script_name/useless_app.py +0 -0
  569. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/python/spooler_decorators/spooler_decorator_test.ini +0 -0
  570. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/python/spooler_decorators/spooler_decorator_tests.py +0 -0
  571. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/python/spooler_decorators/spooler_handlers.py +0 -0
  572. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/python/testba.py +0 -0
  573. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/ring/README.md +0 -0
  574. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/ring/config.ini +0 -0
  575. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/ring/project.clj +0 -0
  576. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/ring/src/uwsgi/ring/tests/app.clj +0 -0
  577. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/ring/src/uwsgi/ring/tests/basic.clj +0 -0
  578. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/ring/src/uwsgi/ring/tests/body.clj +0 -0
  579. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/ring/src/uwsgi/ring/tests/simple.clj +0 -0
  580. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/ring/src/uwsgi/ring/tests/upload.clj +0 -0
  581. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/routing/auth.ini +0 -0
  582. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/routing/errorlimiter.ini +0 -0
  583. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/routing/limiter.ini +0 -0
  584. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/sharedarea/bigranges.ini +0 -0
  585. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/sharedarea/bigranges.py +0 -0
  586. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/sharedarea/sharedarea_incdec.ini +0 -0
  587. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/sharedarea/sharedarea_incdec.py +0 -0
  588. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/spooler/read.py +0 -0
  589. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/spooler/reload.py +0 -0
  590. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/spooler/spooldir/.gitignore +0 -0
  591. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/static/config.ini +0 -0
  592. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/webdav/carddav.ini +0 -0
  593. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/xslt/cd.xml +0 -0
  594. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/xslt/cd.xml.xslt +0 -0
  595. {uwsgi-2.0.26 → uwsgi-2.0.27}/t/xslt/routex.ini +0 -0
  596. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/Responder.pm +0 -0
  597. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/__init__.py +0 -0
  598. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/badthread.py +0 -0
  599. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/badwrites.py +0 -0
  600. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/cpubound_async.py +0 -0
  601. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/cpubound_green.py +0 -0
  602. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/cpubound_stackless.py +0 -0
  603. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/deadlocks/main.py +0 -0
  604. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/deadlocks/master-nothreads.ini +0 -0
  605. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/deadlocks/master-singleinterpreter-threads-10workers.ini +0 -0
  606. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/deadlocks/master-singleinterpreter-threads-1worker.ini +0 -0
  607. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/deadlocks/master-threads-10workers.ini +0 -0
  608. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/deadlocks/master-threads-1worker.ini +0 -0
  609. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/deadlocks/nomaster-threads-10workers.ini +0 -0
  610. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/deadlocks/nomaster-threads-1worker.ini +0 -0
  611. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/deadlocks/sitecustomize.py +0 -0
  612. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/decoratortest.py +0 -0
  613. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/fileserve_async.py +0 -0
  614. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/gevent_spool.py +0 -0
  615. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/gh-deadlocks.sh +0 -0
  616. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/gh-python.sh +0 -0
  617. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/gh-rack.sh +0 -0
  618. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/gh-shared.sh +0 -0
  619. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/grunter.py +0 -0
  620. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/harakiri.py +0 -0
  621. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/iobound_async.py +0 -0
  622. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/iobound_async_unix.py +0 -0
  623. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/iobound_green.py +0 -0
  624. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/logger.py +0 -0
  625. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/mako_ugreen.py +0 -0
  626. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/mulefunc.py +0 -0
  627. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/multiapp.txt +0 -0
  628. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/myadmin.py +0 -0
  629. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/pgbound_async.py +0 -0
  630. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/picazzo.py +0 -0
  631. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/psycogreen_green.py +0 -0
  632. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/psycopg2_green.py +0 -0
  633. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/pump.py +0 -0
  634. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/queue.py +0 -0
  635. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/refcount.py +0 -0
  636. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/rpc.lua +0 -0
  637. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/rpc.py +0 -0
  638. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/runningthread.py +0 -0
  639. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/sendchunked.py +0 -0
  640. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/sharedarea.py +0 -0
  641. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/sig.lua +0 -0
  642. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/signals.py +0 -0
  643. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/sigwait.py +0 -0
  644. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/sleeping_async.py +0 -0
  645. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/sleeping_green.py +0 -0
  646. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/sleepthreadasync.py +0 -0
  647. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/slow.py +0 -0
  648. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/spoolme.py +0 -0
  649. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/static/test.txt +0 -0
  650. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/static/test2.txt +0 -0
  651. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/staticfile.py +0 -0
  652. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/streamer.psgi +0 -0
  653. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/t/static.pl +0 -0
  654. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/templates/queue.html +0 -0
  655. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/testapp.py +0 -0
  656. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/testfilewrapper.py +0 -0
  657. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/testgevent.py +0 -0
  658. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/testpy3.py +0 -0
  659. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/testrpc.py +0 -0
  660. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/testsignals.py +0 -0
  661. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/testworkers.py +0 -0
  662. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/testyieldnone.py +0 -0
  663. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/threads.py +0 -0
  664. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/threads_atexit.py +0 -0
  665. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/threads_heavy.py +0 -0
  666. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/travis.sh +0 -0
  667. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/ugevent.py +0 -0
  668. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/web3.py +0 -0
  669. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/websockets.py +0 -0
  670. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/websockets_chat.pl +0 -0
  671. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/websockets_chat.py +0 -0
  672. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/websockets_chat_async.py +0 -0
  673. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/websockets_chat_asyncio.py +0 -0
  674. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/websockets_echo.lua +0 -0
  675. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/websockets_echo.pl +0 -0
  676. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/websockets_echo.py +0 -0
  677. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/websockets_echo.ru +0 -0
  678. {uwsgi-2.0.26 → uwsgi-2.0.27}/tests/werkzeug_app.py +0 -0
  679. {uwsgi-2.0.26 → uwsgi-2.0.27}/unittest/Makefile +0 -0
  680. {uwsgi-2.0.26 → uwsgi-2.0.27}/unittest/check_core.c +0 -0
  681. {uwsgi-2.0.26 → uwsgi-2.0.27}/unittest/check_regexp.c +0 -0
  682. {uwsgi-2.0.26 → uwsgi-2.0.27}/uwsgi_main.c +0 -0
  683. {uwsgi-2.0.26 → uwsgi-2.0.27}/uwsgidecorators.py +0 -0
  684. {uwsgi-2.0.26 → uwsgi-2.0.27}/uwsgidsl.rb +0 -0
  685. {uwsgi-2.0.26 → uwsgi-2.0.27}/valgrind/README +0 -0
  686. {uwsgi-2.0.26 → uwsgi-2.0.27}/valgrind/valgrind-generate-sups.sh +0 -0
  687. {uwsgi-2.0.26 → uwsgi-2.0.27}/vassals/broodlord.ini +0 -0
  688. {uwsgi-2.0.26 → uwsgi-2.0.27}/vassals/cc.ini +0 -0
  689. {uwsgi-2.0.26 → uwsgi-2.0.27}/vassals/multi.xml +0 -0
  690. {uwsgi-2.0.26 → uwsgi-2.0.27}/vhosttest/flask001/app1.py +0 -0
  691. {uwsgi-2.0.26 → uwsgi-2.0.27}/vhosttest/flask002/app2.py +0 -0
  692. {uwsgi-2.0.26 → uwsgi-2.0.27}/vhosttest/flask003/app3.py +0 -0
  693. {uwsgi-2.0.26 → uwsgi-2.0.27}/vhosttest/flask004/app4.py +0 -0
  694. {uwsgi-2.0.26 → uwsgi-2.0.27}/vhosttest/flask005/app5.py +0 -0
  695. {uwsgi-2.0.26 → uwsgi-2.0.27}/vhosttest/nginx.conf +0 -0
@@ -22,14 +22,18 @@ jobs:
22
22
  run: make unittests
23
23
 
24
24
  test:
25
- runs-on: ubuntu-20.04
25
+ runs-on: ubuntu-22.04
26
26
  steps:
27
27
  - name: Install dependencies
28
28
  run: |
29
29
  sudo apt update -qq
30
30
  sudo apt install --no-install-recommends -qqyf \
31
- libpcre2-dev libjansson-dev libcap2-dev
31
+ libpcre2-dev libjansson-dev libcap2-dev \
32
+ php-dev libphp-embed libargon2-dev libsodium-dev \
33
+ pypy3
32
34
  - uses: actions/checkout@v4
35
+ - name: Set env
36
+ run: echo "PROFILE=integration-tests" >> $GITHUB_ENV
33
37
  - name: Run integration tests
34
38
  run: make all tests
35
39
 
@@ -37,7 +41,7 @@ jobs:
37
41
  runs-on: ubuntu-20.04
38
42
  strategy:
39
43
  matrix:
40
- python-version: ["2.7", "3.6", "3.7", "3.8", "3.9", "3.10", "3.11", "3.12"]
44
+ python-version: ["2.7", "3.6", "3.7", "3.8", "3.9", "3.10", "3.11", "3.12", "3.13"]
41
45
  test-suite: [python, deadlocks]
42
46
  steps:
43
47
  - name: Add deadnakes ppa
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 1.0
2
2
  Name: uWSGI
3
- Version: 2.0.26
3
+ Version: 2.0.27
4
4
  Summary: The uWSGI server
5
5
  Home-page: https://uwsgi-docs.readthedocs.io/en/latest/
6
6
  Author: Unbit
@@ -0,0 +1,4 @@
1
+ [uwsgi]
2
+ inherit = base
3
+ main_plugin =
4
+ plugins = python,php,pypy
@@ -432,8 +432,8 @@ void sanitize_args() {
432
432
  uwsgi.cores = uwsgi.async;
433
433
  }
434
434
 
435
+ uwsgi.has_threads = 1;
435
436
  if (uwsgi.threads > 1) {
436
- uwsgi.has_threads = 1;
437
437
  uwsgi.cores = uwsgi.threads;
438
438
  }
439
439
 
@@ -127,6 +127,7 @@ void *simple_loop_run(void *arg1) {
127
127
  int main_queue = event_queue_init();
128
128
 
129
129
  uwsgi_add_sockets_to_queue(main_queue, core_id);
130
+ event_queue_add_fd_read(main_queue, uwsgi.loop_stop_pipe[0]);
130
131
 
131
132
  if (uwsgi.signal_socket > -1) {
132
133
  event_queue_add_fd_read(main_queue, uwsgi.signal_socket);
@@ -54,6 +54,12 @@ void uwsgi_destroy_processes() {
54
54
 
55
55
  uwsgi_detach_daemons();
56
56
 
57
+ for (i = 1; i <= uwsgi.numproc; i++) {
58
+ if (uwsgi.workers[i].pid > 0) {
59
+ waitpid(uwsgi.workers[i].pid, &waitpid_status, 0);
60
+ }
61
+ }
62
+
57
63
  for (i = 0; i < ushared->gateways_cnt; i++) {
58
64
  if (ushared->gateways[i].pid > 0) {
59
65
  kill(ushared->gateways[i].pid, SIGKILL);
@@ -197,7 +197,7 @@ static struct uwsgi_option uwsgi_base_options[] = {
197
197
  {"freebind", no_argument, 0, "put socket in freebind mode", uwsgi_opt_true, &uwsgi.freebind, 0},
198
198
  #endif
199
199
  {"map-socket", required_argument, 0, "map sockets to specific workers", uwsgi_opt_add_string_list, &uwsgi.map_socket, 0},
200
- {"enable-threads", no_argument, 'T', "enable threads", uwsgi_opt_true, &uwsgi.has_threads, 0},
200
+ {"enable-threads", no_argument, 'T', "enable threads (stub option this is true by default)", uwsgi_opt_true, &uwsgi.has_threads, 0},
201
201
  {"no-threads-wait", no_argument, 0, "do not wait for threads cancellation on quit/reload", uwsgi_opt_true, &uwsgi.no_threads_wait, 0},
202
202
 
203
203
  {"auto-procname", no_argument, 0, "automatically set processes name to something meaningful", uwsgi_opt_true, &uwsgi.auto_procname, 0},
@@ -1224,16 +1224,17 @@ void gracefully_kill(int signum) {
1224
1224
 
1225
1225
  uwsgi_log("Gracefully killing worker %d (pid: %d)...\n", uwsgi.mywid, uwsgi.mypid);
1226
1226
  uwsgi.workers[uwsgi.mywid].manage_next_request = 0;
1227
+
1227
1228
  if (uwsgi.threads > 1) {
1228
- struct wsgi_request *wsgi_req = current_wsgi_req();
1229
- wait_for_threads();
1230
- if (!uwsgi.workers[uwsgi.mywid].cores[wsgi_req->async_id].in_request) {
1231
- if (uwsgi.workers[uwsgi.mywid].shutdown_sockets)
1232
- uwsgi_shutdown_all_sockets();
1233
- exit(UWSGI_RELOAD_CODE);
1229
+ // Stop event_queue_wait() in other threads.
1230
+ // We use loop_stop_pipe only in threaded workers to avoid
1231
+ // unintensional behavior changes in single threaded workers.
1232
+ int fd;
1233
+ if ((fd = uwsgi.loop_stop_pipe[1]) > 0) {
1234
+ close(fd);
1235
+ uwsgi.loop_stop_pipe[1] = 0;
1234
1236
  }
1235
1237
  return;
1236
- // never here
1237
1238
  }
1238
1239
 
1239
1240
  // still not found a way to gracefully reload in async mode
@@ -1265,6 +1266,17 @@ static void simple_goodbye_cruel_world() {
1265
1266
  // Avoid showing same message from all threads.
1266
1267
  uwsgi_log("...The work of process %d is done. Seeya!\n", getpid());
1267
1268
  }
1269
+
1270
+ if (uwsgi.threads > 1) {
1271
+ // Stop event_queue_wait() in other threads.
1272
+ // We use loop_stop_pipe only in threaded workers to avoid
1273
+ // unintensional behavior changes in single threaded workers.
1274
+ int fd;
1275
+ if ((fd = uwsgi.loop_stop_pipe[1]) > 0) {
1276
+ close(fd);
1277
+ uwsgi.loop_stop_pipe[1] = 0;
1278
+ }
1279
+ }
1268
1280
  }
1269
1281
 
1270
1282
  void goodbye_cruel_world() {
@@ -3539,6 +3551,10 @@ void uwsgi_ignition() {
3539
3551
  exit(1);
3540
3552
  }
3541
3553
  }
3554
+ if (pipe(&uwsgi.loop_stop_pipe[0])) {
3555
+ uwsgi_error("pipe()")
3556
+ exit(1);
3557
+ }
3542
3558
 
3543
3559
  // mark the worker as "accepting" (this is a mark used by chain reloading)
3544
3560
  uwsgi.workers[uwsgi.mywid].accepting = 1;
@@ -7,5 +7,7 @@
7
7
 
8
8
  #include "ext/session/php_session.h"
9
9
 
10
+ #include "ext/standard/head.h"
11
+
10
12
  #include <uwsgi.h>
11
13
 
@@ -489,6 +489,21 @@ PHP_FUNCTION(uwsgi_signal) {
489
489
  RETURN_NULL();
490
490
  }
491
491
 
492
+ PHP_FUNCTION(uwsgi_disconnect) {
493
+
494
+ struct wsgi_request *wsgi_req = (struct wsgi_request *) SG(server_context);
495
+
496
+ php_output_end_all();
497
+ php_header();
498
+
499
+ uwsgi_disconnect(wsgi_req);
500
+
501
+ php_output_set_status(PHP_OUTPUT_DISABLED);
502
+
503
+ RETURN_NULL();
504
+ }
505
+
506
+
492
507
  ZEND_BEGIN_ARG_INFO_EX(arginfo_void, 0, 0, 0)
493
508
  ZEND_END_ARG_INFO()
494
509
 
@@ -507,6 +522,7 @@ zend_function_entry uwsgi_php_functions[] = {
507
522
  PHP_FE(uwsgi_cache_del, arginfo_void)
508
523
  PHP_FE(uwsgi_cache_clear, arginfo_void)
509
524
  PHP_FE(uwsgi_cache_exists, arginfo_void)
525
+ PHP_FE(uwsgi_disconnect, arginfo_void)
510
526
  { NULL, NULL, NULL},
511
527
  };
512
528
 
@@ -1,7 +1,7 @@
1
1
  import sys
2
2
  import os
3
3
  sys.path.insert(0, '.')
4
- sys.path.extend(os.environ.get('PYTHONPATH','').split(os.pathsep))
4
+ sys.path.extend(os.environ.get('PYTHONPATH', '').split(os.pathsep))
5
5
  import imp
6
6
  import traceback
7
7
 
@@ -48,15 +48,15 @@ uwsgi_cdef = []
48
48
  uwsgi_defines = []
49
49
  uwsgi_cflags = ffi.string(lib0.uwsgi_get_cflags()).split()
50
50
  for cflag in uwsgi_cflags:
51
- if cflag.startswith('-D'):
52
- line = cflag[2:]
51
+ if cflag.startswith(b'-D'):
52
+ line = cflag[2:].decode()
53
53
  if '=' in line:
54
54
  (key, value) = line.split('=', 1)
55
55
  uwsgi_cdef.append('#define %s ...' % key)
56
- uwsgi_defines.append('#define %s %s' % (key, value.replace('\\"','"').replace('""','"')))
56
+ uwsgi_defines.append('#define %s %s' % (key, value.replace('\\"','"').replace('""','"')))
57
57
  else:
58
58
  uwsgi_cdef.append('#define %s ...' % line)
59
- uwsgi_defines.append('#define %s 1' % line)
59
+ uwsgi_defines.append('#define %s 1' % line)
60
60
  uwsgi_dot_h = ffi.string(lib0.uwsgi_get_dot_h())
61
61
 
62
62
  # uwsgi definitions
@@ -166,16 +166,27 @@ struct uwsgi_server {
166
166
  struct uwsgi_plugin *p[];
167
167
  ...;
168
168
  };
169
- struct uwsgi_server uwsgi;
169
+ extern struct uwsgi_server uwsgi;
170
170
 
171
- struct uwsgi_plugin pypy_plugin;
171
+ extern struct uwsgi_plugin pypy_plugin;
172
172
 
173
- const char *uwsgi_pypy_version;
173
+ extern const char *uwsgi_pypy_version;
174
174
 
175
175
  char *uwsgi_binary_path();
176
176
 
177
177
  void *uwsgi_malloc(size_t);
178
178
 
179
+ struct uwsgi_logvar {
180
+ char key[256];
181
+ uint8_t keylen;
182
+ char val[256];
183
+ uint8_t vallen;
184
+ struct uwsgi_logvar *next;
185
+ };
186
+
187
+ struct uwsgi_logvar *uwsgi_logvar_get(struct wsgi_request *, char *, uint8_t);
188
+ void uwsgi_logvar_add(struct wsgi_request *, char *, uint8_t, char *, uint8_t);
189
+
179
190
  int uwsgi_response_prepare_headers(struct wsgi_request *, char *, size_t);
180
191
  int uwsgi_response_add_header(struct wsgi_request *, char *, uint16_t, char *, uint16_t);
181
192
  int uwsgi_response_write_body_do(struct wsgi_request *, char *, size_t);
@@ -237,7 +248,7 @@ void uwsgi_disconnect(struct wsgi_request *);
237
248
 
238
249
  int uwsgi_ready_fd(struct wsgi_request *);
239
250
 
240
- void set_user_harakiri(int);
251
+ void set_user_harakiri(struct wsgi_request *, int);
241
252
 
242
253
  int uwsgi_metric_set(char *, char *, int64_t);
243
254
  int uwsgi_metric_inc(char *, char *, int64_t);
@@ -260,14 +271,13 @@ const char *uwsgi_pypy_version = UWSGI_VERSION;
260
271
  extern struct uwsgi_server uwsgi;
261
272
  extern struct uwsgi_plugin pypy_plugin;
262
273
  %s
263
- ''' % ('\n'.join(uwsgi_defines), uwsgi_dot_h, hooks)
274
+ ''' % ('\n'.join(uwsgi_defines), uwsgi_dot_h.decode(), hooks)
264
275
 
265
276
  ffi.cdef(cdefines)
266
277
  lib = ffi.verify(cverify)
267
278
  libc = ffi.dlopen(None)
268
279
 
269
280
 
270
-
271
281
  """
272
282
  this is a global object point the the WSGI callable
273
283
  it sucks, i will fix it in the near future...
@@ -276,7 +286,7 @@ wsgi_application = None
276
286
 
277
287
  # fix argv if needed
278
288
  if len(sys.argv) == 0:
279
- sys.argv.insert(0, ffi.string(lib.uwsgi_binary_path()))
289
+ sys.argv.insert(0, ffi.string(lib.uwsgi_binary_path()).decode())
280
290
 
281
291
  """
282
292
  execute source, we expose it as cffi callback to avoid deadlocks
@@ -293,7 +303,7 @@ load a wsgi module
293
303
  @ffi.callback("void(char *)")
294
304
  def uwsgi_pypy_loader(module):
295
305
  global wsgi_application
296
- m = ffi.string(module)
306
+ m = ffi.string(module).decode()
297
307
  c = 'application'
298
308
  if ':' in m:
299
309
  m, c = m.split(':')
@@ -311,7 +321,7 @@ def uwsgi_pypy_file_loader(filename):
311
321
  global wsgi_application
312
322
  w = ffi.string(filename)
313
323
  c = 'application'
314
- mod = imp.load_source('uwsgi_file_wsgi', w)
324
+ mod = imp.load_source('uwsgi_file_wsgi', w.decode())
315
325
  wsgi_application = getattr(mod, c)
316
326
 
317
327
  """
@@ -320,7 +330,7 @@ load a .ini paste app
320
330
  @ffi.callback("void(char *)")
321
331
  def uwsgi_pypy_paste_loader(config):
322
332
  global wsgi_application
323
- c = ffi.string(config)
333
+ c = ffi.string(config).decode()
324
334
  if c.startswith('config:'):
325
335
  c = c[7:]
326
336
  if c[0] != '/':
@@ -329,7 +339,7 @@ def uwsgi_pypy_paste_loader(config):
329
339
  from logging.config import fileConfig
330
340
  fileConfig(c)
331
341
  except ImportError:
332
- print "PyPy WARNING: unable to load logging.config"
342
+ print("PyPy WARNING: unable to load logging.config")
333
343
  from paste.deploy import loadapp
334
344
  wsgi_application = loadapp('config:%s' % c)
335
345
 
@@ -347,9 +357,9 @@ add an item to the pythonpath
347
357
  """
348
358
  @ffi.callback("void(char *)")
349
359
  def uwsgi_pypy_pythonpath(item):
350
- path = ffi.string(item)
360
+ path = ffi.string(item).decode()
351
361
  sys.path.append(path)
352
- print "added %s to pythonpath" % path
362
+ print("added %s to pythonpath" % path)
353
363
 
354
364
 
355
365
  """
@@ -443,15 +453,17 @@ def uwsgi_pypy_wsgi_handler(wsgi_req):
443
453
  def start_response(status, headers, exc_info=None):
444
454
  if exc_info:
445
455
  traceback.print_exception(*exc_info)
456
+ status = status.encode()
446
457
  lib.uwsgi_response_prepare_headers(wsgi_req, ffi.new("char[]", status), len(status))
447
458
  for hh in headers:
459
+ hh = (hh[0].encode(), hh[1].encode())
448
460
  lib.uwsgi_response_add_header(wsgi_req, ffi.new("char[]", hh[0]), len(hh[0]), ffi.new("char[]", hh[1]), len(hh[1]))
449
461
  return writer
450
462
 
451
463
  environ = {}
452
464
  iov = wsgi_req.hvec
453
465
  for i in range(0, wsgi_req.var_cnt, 2):
454
- environ[ffi.string(ffi.cast("char*", iov[i].iov_base), iov[i].iov_len)] = ffi.string(ffi.cast("char*", iov[i+1].iov_base), iov[i+1].iov_len)
466
+ environ[ffi.string(ffi.cast("char*", iov[i].iov_base), iov[i].iov_len).decode()] = ffi.string(ffi.cast("char*", iov[i+1].iov_base), iov[i+1].iov_len).decode()
455
467
 
456
468
  environ['wsgi.version'] = (1, 0)
457
469
  scheme = 'http'
@@ -568,8 +580,8 @@ uwsgi.rpc = uwsgi_pypy_rpc
568
580
 
569
581
  def uwsgi_pypy_call(func, *args):
570
582
  node = None
571
- if '@' in func:
572
- (func, node) = func.split('@')
583
+ if b'@' in func:
584
+ (func, node) = func.split(b'@')
573
585
  return uwsgi_pypy_rpc(node, func, *args)
574
586
  uwsgi.call = uwsgi_pypy_call
575
587
 
@@ -708,7 +720,7 @@ uwsgi.suspend()
708
720
  def uwsgi_pypy_suspend():
709
721
  wsgi_req = uwsgi_pypy_current_wsgi_req()
710
722
  if lib.uwsgi.schedule_to_main:
711
- lib.uwsgi.schedule_to_main(wsgi_req);
723
+ lib.uwsgi.schedule_to_main(wsgi_req)
712
724
  uwsgi.suspend = uwsgi_pypy_suspend
713
725
 
714
726
  """
@@ -723,7 +735,7 @@ def uwsgi_pypy_workers():
723
735
  worker['requests'] = lib.uwsgi.workers[i].requests
724
736
  worker['delta_requests'] = lib.uwsgi.workers[i].delta_requests
725
737
  worker['signals'] = lib.uwsgi.workers[i].signals
726
- worker['exceptions'] = lib.uwsgi_worker_exceptions(i);
738
+ worker['exceptions'] = lib.uwsgi_worker_exceptions(i)
727
739
  worker['apps'] = []
728
740
  if lib.uwsgi.workers[i].cheaped:
729
741
  worker['status'] == 'cheap'
@@ -750,8 +762,8 @@ uwsgi.async_sleep(timeout)
750
762
  """
751
763
  def uwsgi_pypy_async_sleep(timeout):
752
764
  if timeout > 0:
753
- wsgi_req = uwsgi_pypy_current_wsgi_req();
754
- lib.async_add_timeout(wsgi_req, timeout);
765
+ wsgi_req = uwsgi_pypy_current_wsgi_req()
766
+ lib.async_add_timeout(wsgi_req, timeout)
755
767
  uwsgi.async_sleep = uwsgi_pypy_async_sleep
756
768
 
757
769
  """
@@ -770,7 +782,7 @@ uwsgi.connection_fd = lambda: uwsgi_pypy_current_wsgi_req().fd
770
782
  uwsgi.wait_fd_read(fd, timeout=0)
771
783
  """
772
784
  def uwsgi_pypy_wait_fd_read(fd, timeout=0):
773
- wsgi_req = uwsgi_pypy_current_wsgi_req();
785
+ wsgi_req = uwsgi_pypy_current_wsgi_req()
774
786
  if lib.async_add_fd_read(wsgi_req, fd, timeout) < 0:
775
787
  raise Exception("unable to add fd %d to the event queue" % fd)
776
788
  uwsgi.wait_fd_read = uwsgi_pypy_wait_fd_read
@@ -779,7 +791,7 @@ uwsgi.wait_fd_read = uwsgi_pypy_wait_fd_read
779
791
  uwsgi.wait_fd_write(fd, timeout=0)
780
792
  """
781
793
  def uwsgi_pypy_wait_fd_write(fd, timeout=0):
782
- wsgi_req = uwsgi_pypy_current_wsgi_req();
794
+ wsgi_req = uwsgi_pypy_current_wsgi_req()
783
795
  if lib.async_add_fd_write(wsgi_req, fd, timeout) < 0:
784
796
  raise Exception("unable to add fd %d to the event queue" % fd)
785
797
  uwsgi.wait_fd_write = uwsgi_pypy_wait_fd_write
@@ -788,7 +800,7 @@ uwsgi.wait_fd_write = uwsgi_pypy_wait_fd_write
788
800
  uwsgi.ready_fd()
789
801
  """
790
802
  def uwsgi_pypy_ready_fd():
791
- wsgi_req = uwsgi_pypy_current_wsgi_req();
803
+ wsgi_req = uwsgi_pypy_current_wsgi_req()
792
804
  return lib.uwsgi_ready_fd(wsgi_req)
793
805
  uwsgi.ready_fd = uwsgi_pypy_ready_fd
794
806
 
@@ -800,7 +812,7 @@ def uwsgi_pypy_send(*args):
800
812
  if len(args) == 0:
801
813
  raise ValueError("uwsgi.send() takes at least 1 argument")
802
814
  elif len(args) == 1:
803
- wsgi_req = uwsgi_pypy_current_wsgi_req();
815
+ wsgi_req = uwsgi_pypy_current_wsgi_req()
804
816
  fd = wsgi_req.fd
805
817
  data = args[0]
806
818
  else:
@@ -819,7 +831,7 @@ def uwsgi_pypy_recv(*args):
819
831
  if len(args) == 0:
820
832
  raise ValueError("uwsgi.recv() takes at least 1 argument")
821
833
  elif len(args) == 1:
822
- wsgi_req = uwsgi_pypy_current_wsgi_req();
834
+ wsgi_req = uwsgi_pypy_current_wsgi_req()
823
835
  fd = wsgi_req.fd
824
836
  l = args[0]
825
837
  else:
@@ -846,8 +858,8 @@ uwsgi.disconnect = lambda: lib.uwsgi_disconnect(uwsgi_pypy_current_wsgi_req())
846
858
  uwsgi.websocket_recv()
847
859
  """
848
860
  def uwsgi_pypy_websocket_recv():
849
- wsgi_req = uwsgi_pypy_current_wsgi_req();
850
- ub = lib.uwsgi_websocket_recv(wsgi_req);
861
+ wsgi_req = uwsgi_pypy_current_wsgi_req()
862
+ ub = lib.uwsgi_websocket_recv(wsgi_req)
851
863
  if ub == ffi.NULL:
852
864
  raise IOError("unable to receive websocket message")
853
865
  ret = ffi.buffer(ub.buf, ub.pos)[:]
@@ -859,8 +871,8 @@ uwsgi.websocket_recv = uwsgi_pypy_websocket_recv
859
871
  uwsgi.websocket_recv_nb()
860
872
  """
861
873
  def uwsgi_pypy_websocket_recv_nb():
862
- wsgi_req = uwsgi_pypy_current_wsgi_req();
863
- ub = lib.uwsgi_websocket_recv_nb(wsgi_req);
874
+ wsgi_req = uwsgi_pypy_current_wsgi_req()
875
+ ub = lib.uwsgi_websocket_recv_nb(wsgi_req)
864
876
  if ub == ffi.NULL:
865
877
  raise IOError("unable to receive websocket message")
866
878
  ret = ffi.buffer(ub.buf, ub.pos)[:]
@@ -872,7 +884,7 @@ uwsgi.websocket_recv_nb = uwsgi_pypy_websocket_recv_nb
872
884
  uwsgi.websocket_handshake(key, origin)
873
885
  """
874
886
  def uwsgi_pypy_websocket_handshake(key='', origin='', proto=''):
875
- wsgi_req = uwsgi_pypy_current_wsgi_req();
887
+ wsgi_req = uwsgi_pypy_current_wsgi_req()
876
888
  c_key = ffi.new('char[]', key)
877
889
  c_origin = ffi.new('char[]', origin)
878
890
  c_proto = ffi.new('char[]', proto)
@@ -884,7 +896,7 @@ uwsgi.websocket_handshake = uwsgi_pypy_websocket_handshake
884
896
  uwsgi.websocket_send(msg)
885
897
  """
886
898
  def uwsgi_pypy_websocket_send(msg):
887
- wsgi_req = uwsgi_pypy_current_wsgi_req();
899
+ wsgi_req = uwsgi_pypy_current_wsgi_req()
888
900
  if lib.uwsgi_websocket_send(wsgi_req, ffi.new('char[]', msg), len(msg)) < 0:
889
901
  raise IOError("unable to send websocket message")
890
902
  uwsgi.websocket_send = uwsgi_pypy_websocket_send
@@ -893,7 +905,7 @@ uwsgi.websocket_send = uwsgi_pypy_websocket_send
893
905
  uwsgi.chunked_read(timeout=0)
894
906
  """
895
907
  def uwsgi_pypy_chunked_read(timeout=0):
896
- wsgi_req = uwsgi_pypy_current_wsgi_req();
908
+ wsgi_req = uwsgi_pypy_current_wsgi_req()
897
909
  rlen = ffi.new("size_t*")
898
910
  chunk = lib.uwsgi_chunked_read(wsgi_req, rlen, timeout, 0)
899
911
  if chunk == ffi.NULL:
@@ -905,7 +917,7 @@ uwsgi.chunked_read = uwsgi_pypy_chunked_read
905
917
  uwsgi.chunked_read_nb()
906
918
  """
907
919
  def uwsgi_pypy_chunked_read_nb():
908
- wsgi_req = uwsgi_pypy_current_wsgi_req();
920
+ wsgi_req = uwsgi_pypy_current_wsgi_req()
909
921
  rlen = ffi.new("size_t*")
910
922
  chunk = lib.uwsgi_chunked_read(wsgi_req, rlen, 0, 1)
911
923
  if chunk == ffi.NULL:
@@ -915,14 +927,42 @@ def uwsgi_pypy_chunked_read_nb():
915
927
  return ffi.buffer(chunk, rlen[0])[:]
916
928
  uwsgi.chunked_read_nb = uwsgi_pypy_chunked_read_nb
917
929
 
918
- """
919
- uwsgi.set_user_harakiri(sec)
920
- """
921
- uwsgi.set_user_harakiri = lambda x: lib.set_user_harakiri(x)
930
+
931
+ def uwsgi_pypy_set_user_harakiri(x):
932
+ """
933
+ uwsgi.set_user_harakiri(sec)
934
+ """
935
+ wsgi_req = uwsgi_pypy_current_wsgi_req()
936
+ lib.set_user_harakiri(wsgi_req, x)
937
+ uwsgi.set_user_harakiri = uwsgi_pypy_set_user_harakiri
938
+
939
+
940
+ def uwsgi_pypy_get_logvar(key):
941
+ """
942
+ uwsgi.get_logvar(key)
943
+ """
944
+ wsgi_req = uwsgi_pypy_current_wsgi_req()
945
+ c_key = ffi.new('char[]', key)
946
+ lv = lib.uwsgi_logvar_get(wsgi_req, c_key, len(key))
947
+ if lv:
948
+ return ffi.string(lv.val[0:lv.vallen])
949
+ return None
950
+ uwsgi.get_logvar = uwsgi_pypy_get_logvar
951
+
952
+
953
+ def uwsgi_pypy_set_logvar(key, val):
954
+ """
955
+ uwsgi.set_logvar(key, value)
956
+ """
957
+ wsgi_req = uwsgi_pypy_current_wsgi_req()
958
+ c_key = ffi.new('char[]', key)
959
+ c_val = ffi.new('char[]', val)
960
+ lib.uwsgi_logvar_add(wsgi_req, c_key, len(key), c_val, len(val))
961
+ uwsgi.set_logvar = uwsgi_pypy_set_logvar
922
962
 
923
963
 
924
- print "Initialized PyPy with Python", sys.version
925
- print "PyPy Home:", sys.prefix
964
+ print("Initialized PyPy with Python %s" % sys.version)
965
+ print("PyPy Home: %s" % sys.prefix)
926
966
 
927
967
 
928
968
  """
@@ -939,7 +979,7 @@ def uwsgi_pypy_continulet_wrapper(cont):
939
979
  @ffi.callback("void()")
940
980
  def uwsgi_pypy_continulet_schedule():
941
981
  id = lib.uwsgi.wsgi_req.async_id
942
- modifier1 = lib.uwsgi.wsgi_req.uh.modifier1;
982
+ modifier1 = lib.uwsgi.wsgi_req.uh.modifier1
943
983
 
944
984
  # generate a new continulet
945
985
  if not lib.uwsgi.wsgi_req.suspended:
@@ -961,7 +1001,7 @@ def uwsgi_pypy_continulet_schedule():
961
1001
  @ffi.callback("void(struct wsgi_request *)")
962
1002
  def uwsgi_pypy_continulet_switch(wsgi_req):
963
1003
  id = wsgi_req.async_id
964
- modifier1 = wsgi_req.uh.modifier1;
1004
+ modifier1 = wsgi_req.uh.modifier1
965
1005
 
966
1006
  # this is called in the current continulet
967
1007
  if lib.uwsgi.p[modifier1].suspend:
@@ -977,8 +1017,8 @@ def uwsgi_pypy_continulet_switch(wsgi_req):
977
1017
  lib.uwsgi.wsgi_req = wsgi_req
978
1018
 
979
1019
  def uwsgi_pypy_setup_continulets():
980
- if lib.uwsgi.async <= 1:
1020
+ if lib.uwsgi["async"] < 1:
981
1021
  raise Exception("pypy continulets require async mode !!!")
982
1022
  lib.uwsgi.schedule_to_main = uwsgi_pypy_continulet_switch
983
1023
  lib.uwsgi.schedule_to_req = uwsgi_pypy_continulet_schedule
984
- print "*** PyPy Continulets engine loaded ***"
1024
+ print("*** PyPy Continulets engine loaded ***")
@@ -424,7 +424,7 @@ void uwsgi_python_post_fork() {
424
424
  // reset python signal flags so child processes can trap signals
425
425
  // Necessary if uwsgi fork hooks not called to update interpreter state
426
426
  if (!up.call_uwsgi_fork_hooks && up.call_osafterfork) {
427
- #ifdef HAS_NOT_PyOS_AfterFork_Child
427
+ #ifdef HAS_NOT_PYOS_FORK_STABLE_API
428
428
  PyOS_AfterFork();
429
429
  #else
430
430
  PyOS_AfterFork_Child();
@@ -1332,11 +1332,10 @@ void uwsgi_python_pre_uwsgi_fork() {
1332
1332
  // Acquire the gil and import lock before forking in order to avoid
1333
1333
  // deadlocks in workers
1334
1334
  UWSGI_GET_GIL
1335
- #if defined UWSGI_PY312
1336
- PyInterpreterState *interp = PyInterpreterState_Get();
1337
- _PyImport_AcquireLock(interp);
1338
- #else
1335
+ #ifdef HAS_NOT_PYOS_FORK_STABLE_API
1339
1336
  _PyImport_AcquireLock();
1337
+ #else
1338
+ PyOS_BeforeFork();
1340
1339
  #endif
1341
1340
  }
1342
1341
  }
@@ -1349,17 +1348,16 @@ void uwsgi_python_post_uwsgi_fork(int step) {
1349
1348
  if (uwsgi.has_threads) {
1350
1349
  if (step == 0) {
1351
1350
  // Release locks within master process
1352
- #if defined UWSGI_PY312
1353
- PyInterpreterState *interp = PyInterpreterState_Get();
1354
- _PyImport_ReleaseLock(interp);
1355
- #else
1351
+ #ifdef HAS_NOT_PYOS_FORK_STABLE_API
1356
1352
  _PyImport_ReleaseLock();
1353
+ #else
1354
+ PyOS_AfterFork_Parent();
1357
1355
  #endif
1358
1356
  UWSGI_RELEASE_GIL
1359
1357
  }
1360
1358
  else {
1361
1359
  // Ensure thread state and locks are cleaned up in child process
1362
- #ifdef HAS_NOT_PyOS_AfterFork_Child
1360
+ #ifdef HAS_NOT_PYOS_FORK_STABLE_API
1363
1361
  PyOS_AfterFork();
1364
1362
  #else
1365
1363
  PyOS_AfterFork_Child();
@@ -1610,7 +1608,11 @@ void uwsgi_python_suspend(struct wsgi_request *wsgi_req) {
1610
1608
  PyGILState_Release(pgst);
1611
1609
 
1612
1610
  if (wsgi_req) {
1613
- #ifdef UWSGI_PY312
1611
+ #ifdef UWSGI_PY313
1612
+ up.current_c_recursion_remaining[wsgi_req->async_id] = tstate->c_recursion_remaining;
1613
+ up.current_py_recursion_remaining[wsgi_req->async_id] = tstate->py_recursion_remaining;
1614
+ up.current_frame[wsgi_req->async_id] = tstate->current_frame;
1615
+ #elif defined UWSGI_PY312
1614
1616
  up.current_c_recursion_remaining[wsgi_req->async_id] = tstate->c_recursion_remaining;
1615
1617
  up.current_py_recursion_remaining[wsgi_req->async_id] = tstate->py_recursion_remaining;
1616
1618
  up.current_frame[wsgi_req->async_id] = tstate->cframe;
@@ -1623,7 +1625,11 @@ void uwsgi_python_suspend(struct wsgi_request *wsgi_req) {
1623
1625
  #endif
1624
1626
  }
1625
1627
  else {
1626
- #ifdef UWSGI_PY312
1628
+ #ifdef UWSGI_PY313
1629
+ up.current_main_c_recursion_remaining = tstate->c_recursion_remaining;
1630
+ up.current_main_py_recursion_remaining = tstate->py_recursion_remaining;
1631
+ up.current_main_frame = tstate->current_frame;
1632
+ #elif defined UWSGI_PY312
1627
1633
  up.current_main_c_recursion_remaining = tstate->c_recursion_remaining;
1628
1634
  up.current_main_py_recursion_remaining = tstate->py_recursion_remaining;
1629
1635
  up.current_main_frame = tstate->cframe;
@@ -1863,7 +1869,11 @@ void uwsgi_python_resume(struct wsgi_request *wsgi_req) {
1863
1869
  PyGILState_Release(pgst);
1864
1870
 
1865
1871
  if (wsgi_req) {
1866
- #ifdef UWSGI_PY312
1872
+ #ifdef UWSGI_PY313
1873
+ tstate->c_recursion_remaining = up.current_c_recursion_remaining[wsgi_req->async_id];
1874
+ tstate->py_recursion_remaining = up.current_py_recursion_remaining[wsgi_req->async_id];
1875
+ tstate->current_frame = up.current_frame[wsgi_req->async_id];
1876
+ #elif defined UWSGI_PY312
1867
1877
  tstate->c_recursion_remaining = up.current_c_recursion_remaining[wsgi_req->async_id];
1868
1878
  tstate->py_recursion_remaining = up.current_py_recursion_remaining[wsgi_req->async_id];
1869
1879
  tstate->cframe = up.current_frame[wsgi_req->async_id];
@@ -1876,7 +1886,11 @@ void uwsgi_python_resume(struct wsgi_request *wsgi_req) {
1876
1886
  #endif
1877
1887
  }
1878
1888
  else {
1879
- #ifdef UWSGI_PY312
1889
+ #ifdef UWSGI_PY313
1890
+ tstate->c_recursion_remaining = up.current_main_c_recursion_remaining;
1891
+ tstate->py_recursion_remaining = up.current_main_py_recursion_remaining;
1892
+ tstate->current_frame = up.current_main_frame;
1893
+ #elif defined UWSGI_PY312
1880
1894
  tstate->c_recursion_remaining = up.current_main_c_recursion_remaining;
1881
1895
  tstate->py_recursion_remaining = up.current_main_py_recursion_remaining;
1882
1896
  tstate->cframe = up.current_main_frame;
@@ -2090,7 +2104,7 @@ static int uwsgi_python_worker() {
2090
2104
  // ensure signals can be used again from python
2091
2105
  // Necessary if fork hooks have been not used to update interpreter state
2092
2106
  if (!up.call_osafterfork && !up.call_uwsgi_fork_hooks)
2093
- #ifdef HAS_NOT_PyOS_AfterFork_Child
2107
+ #ifdef HAS_NOT_PYOS_FORK_STABLE_API
2094
2108
  PyOS_AfterFork();
2095
2109
  #else
2096
2110
  PyOS_AfterFork_Child();
@@ -83,12 +83,12 @@ struct uwsgi_buffer *uwsgi_python_backtrace(struct wsgi_request *wsgi_req) {
83
83
  ub = uwsgi_buffer_new(4096);
84
84
  Py_ssize_t i;
85
85
  // we have to build a uwsgi array with 5 items (4 are taken from the python tb)
86
- for(i=0;i< PyList_Size(result);i++) {
87
- PyObject *t = PyList_GetItem(result, i);
88
- PyObject *tb_filename = PyTuple_GetItem(t, 0);
89
- PyObject *tb_lineno = PyTuple_GetItem(t, 1);
90
- PyObject *tb_function = PyTuple_GetItem(t, 2);
91
- PyObject *tb_text = PyTuple_GetItem(t, 3);
86
+ for(i=0;i< PySequence_Size(result);i++) {
87
+ PyObject *t = PySequence_GetItem(result, i);
88
+ PyObject *tb_filename = PySequence_GetItem(t, 0);
89
+ PyObject *tb_lineno = PySequence_GetItem(t, 1);
90
+ PyObject *tb_function = PySequence_GetItem(t, 2);
91
+ PyObject *tb_text = PySequence_GetItem(t, 3);
92
92
 
93
93
  int64_t line_no = PyInt_AsLong(tb_lineno);
94
94
  #ifdef PYTHREE