uWSGI 2.0.24__tar.gz → 2.0.25__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 (685) hide show
  1. {uwsgi-2.0.24 → uwsgi-2.0.25}/.github/workflows/compile-test.yml +6 -6
  2. {uwsgi-2.0.24 → uwsgi-2.0.25}/.github/workflows/test.yml +1 -1
  3. {uwsgi-2.0.24 → uwsgi-2.0.25}/PKG-INFO +1 -1
  4. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/alarm.c +6 -5
  5. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/config.c +1 -1
  6. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/logging.c +7 -7
  7. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/loop.c +3 -3
  8. uwsgi-2.0.25/core/regexp.c +178 -0
  9. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/routing.c +25 -16
  10. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/ssl.c +4 -4
  11. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/static.c +10 -10
  12. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/utils.c +6 -28
  13. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/uwsgi.c +33 -60
  14. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/glusterfs/glusterfs.c +1 -1
  15. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/php/php_plugin.c +8 -4
  16. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/python/python_plugin.c +3 -1
  17. uwsgi-2.0.25/tests/threads_atexit.py +44 -0
  18. uwsgi-2.0.25/tests/threads_heavy.py +29 -0
  19. {uwsgi-2.0.24 → uwsgi-2.0.25}/uwsgi.gemspec +1 -1
  20. {uwsgi-2.0.24 → uwsgi-2.0.25}/uwsgi.h +36 -23
  21. {uwsgi-2.0.24 → uwsgi-2.0.25}/uwsgiconfig.py +25 -26
  22. {uwsgi-2.0.24 → uwsgi-2.0.25}/valgrind/valgrind-generate-sups.sh +4 -2
  23. uwsgi-2.0.24/core/regexp.c +0 -110
  24. {uwsgi-2.0.24 → uwsgi-2.0.25}/.gitignore +0 -0
  25. {uwsgi-2.0.24 → uwsgi-2.0.25}/CONTRIBUTORS +0 -0
  26. {uwsgi-2.0.24 → uwsgi-2.0.25}/INSTALL +0 -0
  27. {uwsgi-2.0.24 → uwsgi-2.0.25}/LICENSE +0 -0
  28. {uwsgi-2.0.24 → uwsgi-2.0.25}/Makefile +0 -0
  29. {uwsgi-2.0.24 → uwsgi-2.0.25}/README +0 -0
  30. {uwsgi-2.0.24 → uwsgi-2.0.25}/apache2/mod_Ruwsgi.c +0 -0
  31. {uwsgi-2.0.24 → uwsgi-2.0.25}/apache2/mod_proxy_uwsgi.c +0 -0
  32. {uwsgi-2.0.24 → uwsgi-2.0.25}/apache2/mod_uwsgi.c +0 -0
  33. {uwsgi-2.0.24 → uwsgi-2.0.25}/attach.py +0 -0
  34. {uwsgi-2.0.24 → uwsgi-2.0.25}/bin/uwsgi +0 -0
  35. {uwsgi-2.0.24 → uwsgi-2.0.25}/buildconf/all.ini +0 -0
  36. {uwsgi-2.0.24 → uwsgi-2.0.25}/buildconf/asyncio.ini +0 -0
  37. {uwsgi-2.0.24 → uwsgi-2.0.25}/buildconf/base.ini +0 -0
  38. {uwsgi-2.0.24 → uwsgi-2.0.25}/buildconf/cgi.ini +0 -0
  39. {uwsgi-2.0.24 → uwsgi-2.0.25}/buildconf/core.ini +0 -0
  40. {uwsgi-2.0.24 → uwsgi-2.0.25}/buildconf/coroae.ini +0 -0
  41. {uwsgi-2.0.24 → uwsgi-2.0.25}/buildconf/coverity.ini +0 -0
  42. {uwsgi-2.0.24 → uwsgi-2.0.25}/buildconf/default.ini +0 -0
  43. {uwsgi-2.0.24 → uwsgi-2.0.25}/buildconf/django.ini +0 -0
  44. {uwsgi-2.0.24 → uwsgi-2.0.25}/buildconf/embedded.ini +0 -0
  45. {uwsgi-2.0.24 → uwsgi-2.0.25}/buildconf/erlang.ini +0 -0
  46. {uwsgi-2.0.24 → uwsgi-2.0.25}/buildconf/gccgo.ini +0 -0
  47. {uwsgi-2.0.24 → uwsgi-2.0.25}/buildconf/gevent.ini +0 -0
  48. {uwsgi-2.0.24 → uwsgi-2.0.25}/buildconf/glusterfs.ini +0 -0
  49. {uwsgi-2.0.24 → uwsgi-2.0.25}/buildconf/gridfs.ini +0 -0
  50. {uwsgi-2.0.24 → uwsgi-2.0.25}/buildconf/jwsgi.ini +0 -0
  51. {uwsgi-2.0.24 → uwsgi-2.0.25}/buildconf/lib.ini +0 -0
  52. {uwsgi-2.0.24 → uwsgi-2.0.25}/buildconf/lua.ini +0 -0
  53. {uwsgi-2.0.24 → uwsgi-2.0.25}/buildconf/luap.ini +0 -0
  54. {uwsgi-2.0.24 → uwsgi-2.0.25}/buildconf/minimal.ini +0 -0
  55. {uwsgi-2.0.24 → uwsgi-2.0.25}/buildconf/modular.ini +0 -0
  56. {uwsgi-2.0.24 → uwsgi-2.0.25}/buildconf/mono.ini +0 -0
  57. {uwsgi-2.0.24 → uwsgi-2.0.25}/buildconf/nolang.ini +0 -0
  58. {uwsgi-2.0.24 → uwsgi-2.0.25}/buildconf/package.ini +0 -0
  59. {uwsgi-2.0.24 → uwsgi-2.0.25}/buildconf/php.ini +0 -0
  60. {uwsgi-2.0.24 → uwsgi-2.0.25}/buildconf/plonly.ini +0 -0
  61. {uwsgi-2.0.24 → uwsgi-2.0.25}/buildconf/ppa.ini +0 -0
  62. {uwsgi-2.0.24 → uwsgi-2.0.25}/buildconf/psgi.ini +0 -0
  63. {uwsgi-2.0.24 → uwsgi-2.0.25}/buildconf/pyerl.ini +0 -0
  64. {uwsgi-2.0.24 → uwsgi-2.0.25}/buildconf/pylua.ini +0 -0
  65. {uwsgi-2.0.24 → uwsgi-2.0.25}/buildconf/pyonly.ini +0 -0
  66. {uwsgi-2.0.24 → uwsgi-2.0.25}/buildconf/pypy.ini +0 -0
  67. {uwsgi-2.0.24 → uwsgi-2.0.25}/buildconf/pypyonly.ini +0 -0
  68. {uwsgi-2.0.24 → uwsgi-2.0.25}/buildconf/pyring.ini +0 -0
  69. {uwsgi-2.0.24 → uwsgi-2.0.25}/buildconf/pyuwsgi.ini +0 -0
  70. {uwsgi-2.0.24 → uwsgi-2.0.25}/buildconf/pyuwsginossl.ini +0 -0
  71. {uwsgi-2.0.24 → uwsgi-2.0.25}/buildconf/rack.ini +0 -0
  72. {uwsgi-2.0.24 → uwsgi-2.0.25}/buildconf/rados.ini +0 -0
  73. {uwsgi-2.0.24 → uwsgi-2.0.25}/buildconf/rbonly.ini +0 -0
  74. {uwsgi-2.0.24 → uwsgi-2.0.25}/buildconf/ring.ini +0 -0
  75. {uwsgi-2.0.24 → uwsgi-2.0.25}/buildconf/ruby2.ini +0 -0
  76. {uwsgi-2.0.24 → uwsgi-2.0.25}/buildconf/servlet.ini +0 -0
  77. {uwsgi-2.0.24 → uwsgi-2.0.25}/buildconf/travis.ini +0 -0
  78. {uwsgi-2.0.24 → uwsgi-2.0.25}/buildconf/unbit.ini +0 -0
  79. {uwsgi-2.0.24 → uwsgi-2.0.25}/buildconf/unbitstaff.ini +0 -0
  80. {uwsgi-2.0.24 → uwsgi-2.0.25}/buildconf/uwsgi.it.ini +0 -0
  81. {uwsgi-2.0.24 → uwsgi-2.0.25}/buildconf/v8.ini +0 -0
  82. {uwsgi-2.0.24 → uwsgi-2.0.25}/contrib/Uwsgi.pm +0 -0
  83. {uwsgi-2.0.24 → uwsgi-2.0.25}/contrib/binder.pl +0 -0
  84. {uwsgi-2.0.24 → uwsgi-2.0.25}/contrib/centos_init_script +0 -0
  85. {uwsgi-2.0.24 → uwsgi-2.0.25}/contrib/cgi_python.c +0 -0
  86. {uwsgi-2.0.24 → uwsgi-2.0.25}/contrib/cryptologger.rb +0 -0
  87. {uwsgi-2.0.24 → uwsgi-2.0.25}/contrib/emperormon.ru +0 -0
  88. {uwsgi-2.0.24 → uwsgi-2.0.25}/contrib/fdconf.pl +0 -0
  89. {uwsgi-2.0.24 → uwsgi-2.0.25}/contrib/graphite_uwsgi.py +0 -0
  90. {uwsgi-2.0.24 → uwsgi-2.0.25}/contrib/launchd/it.unbit.uwsgi.emperor.plist +0 -0
  91. {uwsgi-2.0.24 → uwsgi-2.0.25}/contrib/launchd/it.unbit.uwsgi.plist +0 -0
  92. {uwsgi-2.0.24 → uwsgi-2.0.25}/contrib/loadapp.pl +0 -0
  93. {uwsgi-2.0.24 → uwsgi-2.0.25}/contrib/pypy/uwsgi_pypy_greenlets.py +0 -0
  94. {uwsgi-2.0.24 → uwsgi-2.0.25}/contrib/pyuwsgi.py +0 -0
  95. {uwsgi-2.0.24 → uwsgi-2.0.25}/contrib/runuwsgi.py +0 -0
  96. {uwsgi-2.0.24 → uwsgi-2.0.25}/contrib/securesubscribe.pl +0 -0
  97. {uwsgi-2.0.24 → uwsgi-2.0.25}/contrib/spoolqueue/producer.py +0 -0
  98. {uwsgi-2.0.24 → uwsgi-2.0.25}/contrib/spoolqueue/tasks.py +0 -0
  99. {uwsgi-2.0.24 → uwsgi-2.0.25}/contrib/spoolqueue/tasksconsumer.py +0 -0
  100. {uwsgi-2.0.24 → uwsgi-2.0.25}/contrib/subscribe.pl +0 -0
  101. {uwsgi-2.0.24 → uwsgi-2.0.25}/contrib/twuwsgi.py +0 -0
  102. {uwsgi-2.0.24 → uwsgi-2.0.25}/contrib/upstart/emperor.conf +0 -0
  103. {uwsgi-2.0.24 → uwsgi-2.0.25}/contrib/upstart/uwsgi.conf +0 -0
  104. {uwsgi-2.0.24 → uwsgi-2.0.25}/contrib/upython +0 -0
  105. {uwsgi-2.0.24 → uwsgi-2.0.25}/contrib/urack.rb +0 -0
  106. {uwsgi-2.0.24 → uwsgi-2.0.25}/contrib/uwsgi-cache-monitor.py +0 -0
  107. {uwsgi-2.0.24 → uwsgi-2.0.25}/contrib/uwsgi.erl +0 -0
  108. {uwsgi-2.0.24 → uwsgi-2.0.25}/contrib/uwsgi.java +0 -0
  109. {uwsgi-2.0.24 → uwsgi-2.0.25}/contrib/uwsgi.rb +0 -0
  110. {uwsgi-2.0.24 → uwsgi-2.0.25}/contrib/uwsgi_client.c +0 -0
  111. {uwsgi-2.0.24 → uwsgi-2.0.25}/contrib/uwsgi_dynamic_client.c +0 -0
  112. {uwsgi-2.0.24 → uwsgi-2.0.25}/contrib/uwsgisubscribers.ru +0 -0
  113. {uwsgi-2.0.24 → uwsgi-2.0.25}/contrib/xinetd_uwsgi +0 -0
  114. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/async.c +0 -0
  115. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/buffer.c +0 -0
  116. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/cache.c +0 -0
  117. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/chunked.c +0 -0
  118. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/clang_fake.c +0 -0
  119. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/clock.c +0 -0
  120. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/cookie.c +0 -0
  121. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/cron.c +0 -0
  122. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/daemons.c +0 -0
  123. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/emperor.c +0 -0
  124. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/errors.c +0 -0
  125. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/event.c +0 -0
  126. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/exceptions.c +0 -0
  127. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/fifo.c +0 -0
  128. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/fsmon.c +0 -0
  129. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/gateway.c +0 -0
  130. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/hash.c +0 -0
  131. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/hooks.c +0 -0
  132. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/ini.c +0 -0
  133. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/init.c +0 -0
  134. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/io.c +0 -0
  135. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/json.c +0 -0
  136. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/legion.c +0 -0
  137. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/lock.c +0 -0
  138. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/logging. +0 -0
  139. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/master.c +0 -0
  140. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/master_checks.c +0 -0
  141. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/master_events.c +0 -0
  142. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/master_utils.c +0 -0
  143. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/metrics.c +0 -0
  144. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/mount.c +0 -0
  145. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/mule.c +0 -0
  146. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/notify.c +0 -0
  147. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/offload.c +0 -0
  148. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/plugins.c +0 -0
  149. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/plugins_builder.c +0 -0
  150. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/progress.c +0 -0
  151. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/protocol.c +0 -0
  152. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/querystring.c +0 -0
  153. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/queue.c +0 -0
  154. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/rb_timers.c +0 -0
  155. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/reader.c +0 -0
  156. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/rpc.c +0 -0
  157. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/sendfile.c +0 -0
  158. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/setup_utils.c +0 -0
  159. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/sharedarea.c +0 -0
  160. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/signal.c +0 -0
  161. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/skel.c +0 -0
  162. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/snmp.c +0 -0
  163. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/socket.c +0 -0
  164. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/spooler.c +0 -0
  165. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/stats.c +0 -0
  166. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/storage.c +0 -0
  167. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/strings.c +0 -0
  168. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/subscription.c +0 -0
  169. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/timebomb.c +0 -0
  170. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/transformations.c +0 -0
  171. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/websockets.c +0 -0
  172. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/writer.c +0 -0
  173. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/xmlconf.c +0 -0
  174. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/yaml.c +0 -0
  175. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/zeus.c +0 -0
  176. {uwsgi-2.0.24 → uwsgi-2.0.25}/core/zlib.c +0 -0
  177. {uwsgi-2.0.24 → uwsgi-2.0.25}/examples/bootstrap.py +0 -0
  178. {uwsgi-2.0.24 → uwsgi-2.0.25}/examples/bootstrap2.py +0 -0
  179. {uwsgi-2.0.24 → uwsgi-2.0.25}/examples/bootstrap3.py +0 -0
  180. {uwsgi-2.0.24 → uwsgi-2.0.25}/examples/bootstrap4.py +0 -0
  181. {uwsgi-2.0.24 → uwsgi-2.0.25}/examples/bootstrap5.py +0 -0
  182. {uwsgi-2.0.24 → uwsgi-2.0.25}/examples/config.lua +0 -0
  183. {uwsgi-2.0.24 → uwsgi-2.0.25}/examples/config.ru +0 -0
  184. {uwsgi-2.0.24 → uwsgi-2.0.25}/examples/config17.ru +0 -0
  185. {uwsgi-2.0.24 → uwsgi-2.0.25}/examples/config2.lua +0 -0
  186. {uwsgi-2.0.24 → uwsgi-2.0.25}/examples/config2.ru +0 -0
  187. {uwsgi-2.0.24 → uwsgi-2.0.25}/examples/config30.ru +0 -0
  188. {uwsgi-2.0.24 → uwsgi-2.0.25}/examples/corostream.pl +0 -0
  189. {uwsgi-2.0.24 → uwsgi-2.0.25}/examples/debug.ini +0 -0
  190. {uwsgi-2.0.24 → uwsgi-2.0.25}/examples/fibers.ru +0 -0
  191. {uwsgi-2.0.24 → uwsgi-2.0.25}/examples/fibers.yml +0 -0
  192. {uwsgi-2.0.24 → uwsgi-2.0.25}/examples/flaskpost.py +0 -0
  193. {uwsgi-2.0.24 → uwsgi-2.0.25}/examples/heavytest.ini +0 -0
  194. {uwsgi-2.0.24 → uwsgi-2.0.25}/examples/heavytest.py +0 -0
  195. {uwsgi-2.0.24 → uwsgi-2.0.25}/examples/info_uwsgi.php +0 -0
  196. {uwsgi-2.0.24 → uwsgi-2.0.25}/examples/logic.ini +0 -0
  197. {uwsgi-2.0.24 → uwsgi-2.0.25}/examples/mega.xml +0 -0
  198. {uwsgi-2.0.24 → uwsgi-2.0.25}/examples/mjpeg_stream.py +0 -0
  199. {uwsgi-2.0.24 → uwsgi-2.0.25}/examples/mojoapp.pl +0 -0
  200. {uwsgi-2.0.24 → uwsgi-2.0.25}/examples/multi.ini +0 -0
  201. {uwsgi-2.0.24 → uwsgi-2.0.25}/examples/multi.xml +0 -0
  202. {uwsgi-2.0.24 → uwsgi-2.0.25}/examples/multiapp.py +0 -0
  203. {uwsgi-2.0.24 → uwsgi-2.0.25}/examples/protected.ini +0 -0
  204. {uwsgi-2.0.24 → uwsgi-2.0.25}/examples/router.lua +0 -0
  205. {uwsgi-2.0.24 → uwsgi-2.0.25}/examples/simple_app.py +0 -0
  206. {uwsgi-2.0.24 → uwsgi-2.0.25}/examples/simple_app_wsgi2.py +0 -0
  207. {uwsgi-2.0.24 → uwsgi-2.0.25}/examples/simple_logger.py +0 -0
  208. {uwsgi-2.0.24 → uwsgi-2.0.25}/examples/sites.xml +0 -0
  209. {uwsgi-2.0.24 → uwsgi-2.0.25}/examples/sputnik.ws +0 -0
  210. {uwsgi-2.0.24 → uwsgi-2.0.25}/examples/staticfilesnmp.py +0 -0
  211. {uwsgi-2.0.24 → uwsgi-2.0.25}/examples/taskqueue.py +0 -0
  212. {uwsgi-2.0.24 → uwsgi-2.0.25}/examples/uwsgi.xml +0 -0
  213. {uwsgi-2.0.24 → uwsgi-2.0.25}/examples/uwsgirouter.py +0 -0
  214. {uwsgi-2.0.24 → uwsgi-2.0.25}/examples/uwsgirouter2.py +0 -0
  215. {uwsgi-2.0.24 → uwsgi-2.0.25}/examples/uwsgirouter3.py +0 -0
  216. {uwsgi-2.0.24 → uwsgi-2.0.25}/examples/uwsgirouter4.py +0 -0
  217. {uwsgi-2.0.24 → uwsgi-2.0.25}/examples/uwsgirouter5.py +0 -0
  218. {uwsgi-2.0.24 → uwsgi-2.0.25}/examples/uwsgistatus.py +0 -0
  219. {uwsgi-2.0.24 → uwsgi-2.0.25}/examples/welcome.ini +0 -0
  220. {uwsgi-2.0.24 → uwsgi-2.0.25}/examples/welcome.py +0 -0
  221. {uwsgi-2.0.24 → uwsgi-2.0.25}/examples/welcome3.py +0 -0
  222. {uwsgi-2.0.24 → uwsgi-2.0.25}/examples/werkzeug.js +0 -0
  223. {uwsgi-2.0.24 → uwsgi-2.0.25}/examples/werkzeug.yml +0 -0
  224. {uwsgi-2.0.24 → uwsgi-2.0.25}/examples/werkzeug_strict.yml +0 -0
  225. {uwsgi-2.0.24 → uwsgi-2.0.25}/examples/xmlindex-html.xsl +0 -0
  226. {uwsgi-2.0.24 → uwsgi-2.0.25}/examples/xmlindex.ini +0 -0
  227. {uwsgi-2.0.24 → uwsgi-2.0.25}/examples/zmqgevent.ini +0 -0
  228. {uwsgi-2.0.24 → uwsgi-2.0.25}/ext/uwsgi/extconf.rb +0 -0
  229. {uwsgi-2.0.24 → uwsgi-2.0.25}/install.sh +0 -0
  230. {uwsgi-2.0.24 → uwsgi-2.0.25}/lib/linux_ns.c +0 -0
  231. {uwsgi-2.0.24 → uwsgi-2.0.25}/lib/netlink.c +0 -0
  232. {uwsgi-2.0.24 → uwsgi-2.0.25}/lib/sun_fixes.c +0 -0
  233. {uwsgi-2.0.24 → uwsgi-2.0.25}/logo_uWSGI.png +0 -0
  234. {uwsgi-2.0.24 → uwsgi-2.0.25}/logo_uWSGI.svg +0 -0
  235. {uwsgi-2.0.24 → uwsgi-2.0.25}/mongrel2-uwsgi.conf +0 -0
  236. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/airbrake/airbrake_plugin.c +0 -0
  237. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/airbrake/uwsgiplugin.py +0 -0
  238. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/alarm_curl/alarm_curl_plugin.c +0 -0
  239. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/alarm_curl/uwsgiplugin.py +0 -0
  240. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/alarm_speech/alarm_speech.m +0 -0
  241. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/alarm_speech/uwsgiplugin.py +0 -0
  242. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/alarm_xmpp/alarm_xmpp_plugin.c +0 -0
  243. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/alarm_xmpp/gloox.cc +0 -0
  244. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/alarm_xmpp/uwsgiplugin.py +0 -0
  245. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/asyncio/asyncio.c +0 -0
  246. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/asyncio/uwsgiplugin.py +0 -0
  247. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/cache/cache.c +0 -0
  248. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/cache/uwsgiplugin.py +0 -0
  249. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/carbon/carbon.c +0 -0
  250. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/carbon/uwsgiplugin.py +0 -0
  251. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/cgi/cgi_plugin.c +0 -0
  252. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/cgi/uwsgiplugin.py +0 -0
  253. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/cheaper_backlog2/cheaper_backlog2.c +0 -0
  254. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/cheaper_backlog2/uwsgiplugin.py +0 -0
  255. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/cheaper_busyness/cheaper_busyness.c +0 -0
  256. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/cheaper_busyness/uwsgiplugin.py +0 -0
  257. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/clock_monotonic/clock_monotonic.c +0 -0
  258. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/clock_monotonic/uwsgiplugin.py +0 -0
  259. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/clock_realtime/clock_realtime.c +0 -0
  260. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/clock_realtime/uwsgiplugin.py +0 -0
  261. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/corerouter/corerouter.c +0 -0
  262. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/corerouter/cr.h +0 -0
  263. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/corerouter/cr_common.c +0 -0
  264. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/corerouter/cr_map.c +0 -0
  265. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/corerouter/uwsgiplugin.py +0 -0
  266. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/coroae/coroae.c +0 -0
  267. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/coroae/uwsgiplugin.py +0 -0
  268. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/cplusplus/base.cc +0 -0
  269. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/cplusplus/plugin.c +0 -0
  270. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/cplusplus/uwsgiplugin.py +0 -0
  271. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/curl_cron/curl_cron.c +0 -0
  272. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/curl_cron/uwsgiplugin.py +0 -0
  273. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/dumbloop/dumb.c +0 -0
  274. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/dumbloop/uwsgiplugin.py +0 -0
  275. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/dummy/dummy.c +0 -0
  276. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/dummy/uwsgiplugin.py +0 -0
  277. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/echo/echo_plugin.c +0 -0
  278. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/echo/uwsgiplugin.py +0 -0
  279. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/emperor_amqp/amqp.c +0 -0
  280. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/emperor_amqp/emperor_amqp.c +0 -0
  281. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/emperor_amqp/uwsgiplugin.py +0 -0
  282. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/emperor_mongodb/emperor_mongodb.cc +0 -0
  283. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/emperor_mongodb/plugin.c +0 -0
  284. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/emperor_mongodb/uwsgiplugin.py +0 -0
  285. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/emperor_pg/emperor_pg.c +0 -0
  286. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/emperor_pg/uwsgiplugin.py +0 -0
  287. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/emperor_zeromq/emperor_zeromq.c +0 -0
  288. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/emperor_zeromq/uwsgiplugin.py +0 -0
  289. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/example/example_plugin.c +0 -0
  290. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/example/uwsgiplugin.py +0 -0
  291. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/exception_log/exception_log.c +0 -0
  292. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/exception_log/uwsgiplugin.py +0 -0
  293. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/fastrouter/fastrouter.c +0 -0
  294. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/fastrouter/uwsgiplugin.py +0 -0
  295. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/fiber/fiber.c +0 -0
  296. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/fiber/uwsgiplugin.py +0 -0
  297. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/forkptyrouter/forkptyrouter.c +0 -0
  298. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/forkptyrouter/uwsgiplugin.py +0 -0
  299. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/gccgo/gccgo_plugin.c +0 -0
  300. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/gccgo/uwsgi.go +0 -0
  301. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/gccgo/uwsgiplugin.py +0 -0
  302. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/geoip/geoip.c +0 -0
  303. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/geoip/uwsgiplugin.py +0 -0
  304. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/gevent/gevent.c +0 -0
  305. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/gevent/gevent.h +0 -0
  306. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/gevent/hooks.c +0 -0
  307. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/gevent/uwsgiplugin.py +0 -0
  308. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/glusterfs/uwsgiplugin.py +0 -0
  309. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/graylog2/graylog2_plugin.c +0 -0
  310. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/graylog2/uwsgiplugin.py +0 -0
  311. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/greenlet/greenlet.c +0 -0
  312. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/greenlet/uwsgiplugin.py +0 -0
  313. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/gridfs/gridfs.cc +0 -0
  314. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/gridfs/plugin.c +0 -0
  315. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/gridfs/uwsgiplugin.py +0 -0
  316. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/http/common.h +0 -0
  317. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/http/http.c +0 -0
  318. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/http/https.c +0 -0
  319. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/http/keepalive.c +0 -0
  320. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/http/spdy3.c +0 -0
  321. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/http/spdy3.h +0 -0
  322. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/http/uwsgiplugin.py +0 -0
  323. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/jvm/jvm.h +0 -0
  324. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/jvm/jvm_plugin.c +0 -0
  325. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/jvm/uwsgi.java +0 -0
  326. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/jvm/uwsgiplugin.py +0 -0
  327. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/jwsgi/jwsgi_plugin.c +0 -0
  328. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/jwsgi/uwsgiplugin.py +0 -0
  329. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/ldap/ldap.c +0 -0
  330. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/ldap/uwsgiplugin.py +0 -0
  331. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/legion_cache_fetch/legion_cache_fetch.c +0 -0
  332. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/legion_cache_fetch/uwsgiplugin.py +0 -0
  333. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/libffi/libffi.c +0 -0
  334. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/libffi/uwsgiplugin.py +0 -0
  335. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/libtcc/libtcc.c +0 -0
  336. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/libtcc/uwsgiplugin.py +0 -0
  337. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/logcrypto/logcrypto.c +0 -0
  338. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/logcrypto/uwsgiplugin.py +0 -0
  339. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/logfile/logfile.c +0 -0
  340. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/logfile/uwsgiplugin.py +0 -0
  341. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/logpipe/logpipe.c +0 -0
  342. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/logpipe/uwsgiplugin.py +0 -0
  343. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/logsocket/logsocket_plugin.c +0 -0
  344. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/logsocket/uwsgiplugin.py +0 -0
  345. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/logzmq/plugin.c +0 -0
  346. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/logzmq/uwsgiplugin.py +0 -0
  347. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/lua/lua_plugin.c +0 -0
  348. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/lua/uwsgiplugin.py +0 -0
  349. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/matheval/math.c +0 -0
  350. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/matheval/uwsgiplugin.py +0 -0
  351. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/mongodb/plugin.c +0 -0
  352. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/mongodb/uwsgiplugin.py +0 -0
  353. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/mongodblog/mongodblog_plugin.c +0 -0
  354. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/mongodblog/uwsgiplugin.py +0 -0
  355. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/mongrel2/mongrel2.c +0 -0
  356. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/mongrel2/uwsgiplugin.py +0 -0
  357. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/mono/mono_plugin.c +0 -0
  358. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/mono/uwsgi.cs +0 -0
  359. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/mono/uwsgiplugin.py +0 -0
  360. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/msgpack/msgpack.c +0 -0
  361. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/msgpack/uwsgiplugin.py +0 -0
  362. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/nagios/nagios.c +0 -0
  363. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/nagios/uwsgiplugin.py +0 -0
  364. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/notfound/notfound.c +0 -0
  365. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/notfound/uwsgiplugin.py +0 -0
  366. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/objc_gc/objc_gc.m +0 -0
  367. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/objc_gc/uwsgiplugin.py +0 -0
  368. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/pam/pam.c +0 -0
  369. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/pam/uwsgiplugin.py +0 -0
  370. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/php/common.h +0 -0
  371. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/php/session.c +0 -0
  372. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/php/uwsgiplugin.py +0 -0
  373. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/ping/ping_plugin.c +0 -0
  374. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/ping/uwsgiplugin.py +0 -0
  375. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/psgi/psgi.h +0 -0
  376. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/psgi/psgi_loader.c +0 -0
  377. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/psgi/psgi_plugin.c +0 -0
  378. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/psgi/psgi_response.c +0 -0
  379. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/psgi/uwsgi_plmodule.c +0 -0
  380. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/psgi/uwsgiplugin.py +0 -0
  381. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/pty/pty.c +0 -0
  382. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/pty/uwsgiplugin.py +0 -0
  383. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/pypy/README +0 -0
  384. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/pypy/pypy_plugin.c +0 -0
  385. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/pypy/pypy_setup.py +0 -0
  386. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/pypy/uwsgiplugin.py +0 -0
  387. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/python/gil.c +0 -0
  388. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/python/profiler.c +0 -0
  389. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/python/pump_subhandler.c +0 -0
  390. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/python/pyloader.c +0 -0
  391. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/python/pyutils.c +0 -0
  392. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/python/raw.c +0 -0
  393. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/python/symimporter.c +0 -0
  394. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/python/tracebacker.c +0 -0
  395. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/python/uwsgi_pymodule.c +0 -0
  396. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/python/uwsgi_python.h +0 -0
  397. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/python/uwsgiplugin.py +0 -0
  398. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/python/web3_subhandler.c +0 -0
  399. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/python/wsgi_handlers.c +0 -0
  400. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/python/wsgi_headers.c +0 -0
  401. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/python/wsgi_subhandler.c +0 -0
  402. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/pyuwsgi/pyuwsgi.c +0 -0
  403. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/pyuwsgi/uwsgiplugin.py +0 -0
  404. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/rack/rack_api.c +0 -0
  405. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/rack/rack_plugin.c +0 -0
  406. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/rack/uwsgi_rack.h +0 -0
  407. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/rack/uwsgiplugin.py +0 -0
  408. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/rados/rados.c +0 -0
  409. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/rados/uwsgiplugin.py +0 -0
  410. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/rawrouter/rawrouter.c +0 -0
  411. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/rawrouter/uwsgiplugin.py +0 -0
  412. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/rbthreads/rbthreads.c +0 -0
  413. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/rbthreads/uwsgiplugin.py +0 -0
  414. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/redislog/redislog_plugin.c +0 -0
  415. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/redislog/uwsgiplugin.py +0 -0
  416. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/ring/ring_plugin.c +0 -0
  417. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/ring/uwsgiplugin.py +0 -0
  418. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/router_access/router_access.c +0 -0
  419. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/router_access/uwsgiplugin.py +0 -0
  420. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/router_basicauth/router_basicauth.c +0 -0
  421. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/router_basicauth/uwsgiplugin.py +0 -0
  422. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/router_cache/router_cache.c +0 -0
  423. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/router_cache/uwsgiplugin.py +0 -0
  424. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/router_expires/expires.c +0 -0
  425. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/router_expires/uwsgiplugin.py +0 -0
  426. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/router_hash/router_hash.c +0 -0
  427. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/router_hash/uwsgiplugin.py +0 -0
  428. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/router_http/router_http.c +0 -0
  429. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/router_http/uwsgiplugin.py +0 -0
  430. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/router_memcached/router_memcached.c +0 -0
  431. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/router_memcached/uwsgiplugin.py +0 -0
  432. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/router_metrics/plugin.c +0 -0
  433. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/router_metrics/uwsgiplugin.py +0 -0
  434. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/router_radius/radius.c +0 -0
  435. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/router_radius/uwsgiplugin.py +0 -0
  436. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/router_redirect/router_redirect.c +0 -0
  437. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/router_redirect/uwsgiplugin.py +0 -0
  438. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/router_redis/router_redis.c +0 -0
  439. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/router_redis/uwsgiplugin.py +0 -0
  440. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/router_rewrite/router_rewrite.c +0 -0
  441. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/router_rewrite/uwsgiplugin.py +0 -0
  442. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/router_spnego/router_spnego.c +0 -0
  443. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/router_spnego/uwsgiplugin.py +0 -0
  444. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/router_static/router_static.c +0 -0
  445. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/router_static/uwsgiplugin.py +0 -0
  446. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/router_uwsgi/router_uwsgi.c +0 -0
  447. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/router_uwsgi/uwsgiplugin.py +0 -0
  448. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/router_xmldir/router_xmldir.c +0 -0
  449. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/router_xmldir/uwsgiplugin.py +0 -0
  450. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/rpc/rpc_plugin.c +0 -0
  451. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/rpc/uwsgiplugin.py +0 -0
  452. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/rrdtool/rrdtool.c +0 -0
  453. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/rrdtool/uwsgiplugin.py +0 -0
  454. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/rsyslog/rsyslog_plugin.c +0 -0
  455. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/rsyslog/uwsgiplugin.py +0 -0
  456. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/ruby19/uwsgiplugin.py +0 -0
  457. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/servlet/servlet_plugin.c +0 -0
  458. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/servlet/uwsgi_servlet.java +0 -0
  459. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/servlet/uwsgiplugin.py +0 -0
  460. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/signal/signal_plugin.c +0 -0
  461. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/signal/uwsgiplugin.py +0 -0
  462. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/spooler/spooler_plugin.c +0 -0
  463. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/spooler/uwsgiplugin.py +0 -0
  464. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/sqlite3/plugin.c +0 -0
  465. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/sqlite3/uwsgiplugin.py +0 -0
  466. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/ssi/ssi.c +0 -0
  467. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/ssi/uwsgiplugin.py +0 -0
  468. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/sslrouter/sslrouter.c +0 -0
  469. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/sslrouter/uwsgiplugin.py +0 -0
  470. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/stackless/stackless.c +0 -0
  471. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/stackless/uwsgiplugin.py +0 -0
  472. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/stats_pusher_file/plugin.c +0 -0
  473. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/stats_pusher_file/uwsgiplugin.py +0 -0
  474. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/stats_pusher_mongodb/plugin.c +0 -0
  475. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/stats_pusher_mongodb/stats_pusher_mongodb.cc +0 -0
  476. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/stats_pusher_mongodb/uwsgiplugin.py +0 -0
  477. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/stats_pusher_socket/plugin.c +0 -0
  478. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/stats_pusher_socket/uwsgiplugin.py +0 -0
  479. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/stats_pusher_statsd/plugin.c +0 -0
  480. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/stats_pusher_statsd/uwsgiplugin.py +0 -0
  481. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/symcall/symcall_plugin.c +0 -0
  482. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/symcall/uwsgiplugin.py +0 -0
  483. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/syslog/syslog_plugin.c +0 -0
  484. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/syslog/uwsgiplugin.py +0 -0
  485. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/systemd_logger/systemd_logger.c +0 -0
  486. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/systemd_logger/uwsgiplugin.py +0 -0
  487. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/tornado/tornado.c +0 -0
  488. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/tornado/uwsgiplugin.py +0 -0
  489. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/transformation_chunked/chunked.c +0 -0
  490. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/transformation_chunked/uwsgiplugin.py +0 -0
  491. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/transformation_gzip/gzip.c +0 -0
  492. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/transformation_gzip/uwsgiplugin.py +0 -0
  493. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/transformation_offload/offload.c +0 -0
  494. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/transformation_offload/uwsgiplugin.py +0 -0
  495. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/transformation_template/tt.c +0 -0
  496. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/transformation_template/uwsgiplugin.py +0 -0
  497. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/transformation_tofile/tofile.c +0 -0
  498. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/transformation_tofile/uwsgiplugin.py +0 -0
  499. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/transformation_toupper/toupper.c +0 -0
  500. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/transformation_toupper/uwsgiplugin.py +0 -0
  501. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/tuntap/common.c +0 -0
  502. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/tuntap/common.h +0 -0
  503. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/tuntap/firewall.c +0 -0
  504. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/tuntap/tuntap.c +0 -0
  505. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/tuntap/uwsgiplugin.py +0 -0
  506. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/ugreen/ugreen.c +0 -0
  507. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/ugreen/uwsgiplugin.py +0 -0
  508. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/v8/plugin.c +0 -0
  509. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/v8/uwsgiplugin.py +0 -0
  510. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/v8/v8_commonjs.cc +0 -0
  511. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/v8/v8_jsgi.cc +0 -0
  512. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/v8/v8_uwsgi.cc +0 -0
  513. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/v8/v8_uwsgi.h +0 -0
  514. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/webdav/uwsgiplugin.py +0 -0
  515. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/webdav/webdav.c +0 -0
  516. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/xattr/uwsgiplugin.py +0 -0
  517. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/xattr/xattr.c +0 -0
  518. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/xslt/uwsgiplugin.py +0 -0
  519. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/xslt/xslt.c +0 -0
  520. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/zabbix/plugin.c +0 -0
  521. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/zabbix/uwsgiplugin.py +0 -0
  522. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/zergpool/uwsgiplugin.py +0 -0
  523. {uwsgi-2.0.24 → uwsgi-2.0.25}/plugins/zergpool/zergpool.c +0 -0
  524. {uwsgi-2.0.24 → uwsgi-2.0.25}/proto/BUILD +0 -0
  525. {uwsgi-2.0.24 → uwsgi-2.0.25}/proto/base.c +0 -0
  526. {uwsgi-2.0.24 → uwsgi-2.0.25}/proto/fastcgi.c +0 -0
  527. {uwsgi-2.0.24 → uwsgi-2.0.25}/proto/http.c +0 -0
  528. {uwsgi-2.0.24 → uwsgi-2.0.25}/proto/puwsgi.c +0 -0
  529. {uwsgi-2.0.24 → uwsgi-2.0.25}/proto/scgi.c +0 -0
  530. {uwsgi-2.0.24 → uwsgi-2.0.25}/proto/uwsgi.c +0 -0
  531. {uwsgi-2.0.24 → uwsgi-2.0.25}/setup.cpyext.py +0 -0
  532. {uwsgi-2.0.24 → uwsgi-2.0.25}/setup.py +0 -0
  533. {uwsgi-2.0.24 → uwsgi-2.0.25}/setup.pyuwsgi.py +0 -0
  534. {uwsgi-2.0.24 → uwsgi-2.0.25}/t/cachebitmap.ini +0 -0
  535. {uwsgi-2.0.24 → uwsgi-2.0.25}/t/cachebitmap.py +0 -0
  536. {uwsgi-2.0.24 → uwsgi-2.0.25}/t/cachetest.py +0 -0
  537. {uwsgi-2.0.24 → uwsgi-2.0.25}/t/clojure/myapp.clj +0 -0
  538. {uwsgi-2.0.24 → uwsgi-2.0.25}/t/core/apps/read_body_and_send.pl +0 -0
  539. {uwsgi-2.0.24 → uwsgi-2.0.25}/t/core/read_body_and_send.pl +0 -0
  540. {uwsgi-2.0.24 → uwsgi-2.0.25}/t/core/url_sanitize.pl +0 -0
  541. {uwsgi-2.0.24 → uwsgi-2.0.25}/t/go/cachetest.go +0 -0
  542. {uwsgi-2.0.24 → uwsgi-2.0.25}/t/go/complextest.go +0 -0
  543. {uwsgi-2.0.24 → uwsgi-2.0.25}/t/go/uploadtest.go +0 -0
  544. {uwsgi-2.0.24 → uwsgi-2.0.25}/t/java/rpc.java +0 -0
  545. {uwsgi-2.0.24 → uwsgi-2.0.25}/t/lua/basic.lua +0 -0
  546. {uwsgi-2.0.24 → uwsgi-2.0.25}/t/mono/cache.aspx +0 -0
  547. {uwsgi-2.0.24 → uwsgi-2.0.25}/t/mules/mulebrain.py +0 -0
  548. {uwsgi-2.0.24 → uwsgi-2.0.25}/t/mules/reload.py +0 -0
  549. {uwsgi-2.0.24 → uwsgi-2.0.25}/t/mules/signal_management.py +0 -0
  550. {uwsgi-2.0.24 → uwsgi-2.0.25}/t/perl/active_workers_signal.pl +0 -0
  551. {uwsgi-2.0.24 → uwsgi-2.0.25}/t/perl/apps/input_with_offset.pl +0 -0
  552. {uwsgi-2.0.24 → uwsgi-2.0.25}/t/perl/test.psgi +0 -0
  553. {uwsgi-2.0.24 → uwsgi-2.0.25}/t/perl/test_benchmark.pl +0 -0
  554. {uwsgi-2.0.24 → uwsgi-2.0.25}/t/perl/test_harakiri.psgi +0 -0
  555. {uwsgi-2.0.24 → uwsgi-2.0.25}/t/perl/test_hello.psgi +0 -0
  556. {uwsgi-2.0.24 → uwsgi-2.0.25}/t/perl/test_input_with_offset.pl +0 -0
  557. {uwsgi-2.0.24 → uwsgi-2.0.25}/t/perl/test_post.psgi +0 -0
  558. {uwsgi-2.0.24 → uwsgi-2.0.25}/t/perl/test_sleepy.psgi +0 -0
  559. {uwsgi-2.0.24 → uwsgi-2.0.25}/t/perl/test_streaming.psgi +0 -0
  560. {uwsgi-2.0.24 → uwsgi-2.0.25}/t/pypy/t_continulet1.py +0 -0
  561. {uwsgi-2.0.24 → uwsgi-2.0.25}/t/pypy/t_continulet2.py +0 -0
  562. {uwsgi-2.0.24 → uwsgi-2.0.25}/t/python/forcecl.py +0 -0
  563. {uwsgi-2.0.24 → uwsgi-2.0.25}/t/python/manage_script_name/manage_script_name_test.ini +0 -0
  564. {uwsgi-2.0.24 → uwsgi-2.0.25}/t/python/manage_script_name/test_manage_script_name.py +0 -0
  565. {uwsgi-2.0.24 → uwsgi-2.0.25}/t/python/manage_script_name/useless_app.py +0 -0
  566. {uwsgi-2.0.24 → uwsgi-2.0.25}/t/python/spooler_decorators/spooler_decorator_test.ini +0 -0
  567. {uwsgi-2.0.24 → uwsgi-2.0.25}/t/python/spooler_decorators/spooler_decorator_tests.py +0 -0
  568. {uwsgi-2.0.24 → uwsgi-2.0.25}/t/python/spooler_decorators/spooler_handlers.py +0 -0
  569. {uwsgi-2.0.24 → uwsgi-2.0.25}/t/python/testba.py +0 -0
  570. {uwsgi-2.0.24 → uwsgi-2.0.25}/t/ring/README.md +0 -0
  571. {uwsgi-2.0.24 → uwsgi-2.0.25}/t/ring/config.ini +0 -0
  572. {uwsgi-2.0.24 → uwsgi-2.0.25}/t/ring/project.clj +0 -0
  573. {uwsgi-2.0.24 → uwsgi-2.0.25}/t/ring/src/uwsgi/ring/tests/app.clj +0 -0
  574. {uwsgi-2.0.24 → uwsgi-2.0.25}/t/ring/src/uwsgi/ring/tests/basic.clj +0 -0
  575. {uwsgi-2.0.24 → uwsgi-2.0.25}/t/ring/src/uwsgi/ring/tests/body.clj +0 -0
  576. {uwsgi-2.0.24 → uwsgi-2.0.25}/t/ring/src/uwsgi/ring/tests/simple.clj +0 -0
  577. {uwsgi-2.0.24 → uwsgi-2.0.25}/t/ring/src/uwsgi/ring/tests/upload.clj +0 -0
  578. {uwsgi-2.0.24 → uwsgi-2.0.25}/t/routing/auth.ini +0 -0
  579. {uwsgi-2.0.24 → uwsgi-2.0.25}/t/routing/errorlimiter.ini +0 -0
  580. {uwsgi-2.0.24 → uwsgi-2.0.25}/t/routing/limiter.ini +0 -0
  581. {uwsgi-2.0.24 → uwsgi-2.0.25}/t/sharedarea/bigranges.ini +0 -0
  582. {uwsgi-2.0.24 → uwsgi-2.0.25}/t/sharedarea/bigranges.py +0 -0
  583. {uwsgi-2.0.24 → uwsgi-2.0.25}/t/sharedarea/sharedarea_incdec.ini +0 -0
  584. {uwsgi-2.0.24 → uwsgi-2.0.25}/t/sharedarea/sharedarea_incdec.py +0 -0
  585. {uwsgi-2.0.24 → uwsgi-2.0.25}/t/spooler/read.py +0 -0
  586. {uwsgi-2.0.24 → uwsgi-2.0.25}/t/spooler/reload.py +0 -0
  587. {uwsgi-2.0.24 → uwsgi-2.0.25}/t/spooler/spooldir/.gitignore +0 -0
  588. {uwsgi-2.0.24 → uwsgi-2.0.25}/t/webdav/carddav.ini +0 -0
  589. {uwsgi-2.0.24 → uwsgi-2.0.25}/t/xslt/cd.xml +0 -0
  590. {uwsgi-2.0.24 → uwsgi-2.0.25}/t/xslt/cd.xml.xslt +0 -0
  591. {uwsgi-2.0.24 → uwsgi-2.0.25}/t/xslt/routex.ini +0 -0
  592. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/Responder.pm +0 -0
  593. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/__init__.py +0 -0
  594. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/badthread.py +0 -0
  595. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/badwrites.py +0 -0
  596. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/cpubound_async.py +0 -0
  597. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/cpubound_green.py +0 -0
  598. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/cpubound_stackless.py +0 -0
  599. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/deadlocks/main.py +0 -0
  600. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/deadlocks/master-nothreads.ini +0 -0
  601. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/deadlocks/master-singleinterpreter-threads-10workers.ini +0 -0
  602. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/deadlocks/master-singleinterpreter-threads-1worker.ini +0 -0
  603. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/deadlocks/master-threads-10workers.ini +0 -0
  604. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/deadlocks/master-threads-1worker.ini +0 -0
  605. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/deadlocks/nomaster-threads-10workers.ini +0 -0
  606. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/deadlocks/nomaster-threads-1worker.ini +0 -0
  607. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/deadlocks/sitecustomize.py +0 -0
  608. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/decoratortest.py +0 -0
  609. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/fileserve_async.py +0 -0
  610. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/gevent_spool.py +0 -0
  611. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/gh-deadlocks.sh +0 -0
  612. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/gh-python.sh +0 -0
  613. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/gh-rack.sh +0 -0
  614. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/gh-shared.sh +0 -0
  615. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/grunter.py +0 -0
  616. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/harakiri.py +0 -0
  617. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/iobound_async.py +0 -0
  618. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/iobound_async_unix.py +0 -0
  619. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/iobound_green.py +0 -0
  620. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/logger.py +0 -0
  621. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/mako_ugreen.py +0 -0
  622. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/mulefunc.py +0 -0
  623. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/multiapp.txt +0 -0
  624. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/myadmin.py +0 -0
  625. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/pgbound_async.py +0 -0
  626. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/picazzo.py +0 -0
  627. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/psycogreen_green.py +0 -0
  628. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/psycopg2_green.py +0 -0
  629. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/pump.py +0 -0
  630. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/queue.py +0 -0
  631. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/refcount.py +0 -0
  632. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/rpc.lua +0 -0
  633. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/rpc.py +0 -0
  634. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/runningthread.py +0 -0
  635. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/sendchunked.py +0 -0
  636. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/sharedarea.py +0 -0
  637. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/sig.lua +0 -0
  638. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/signals.py +0 -0
  639. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/sigwait.py +0 -0
  640. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/sleeping_async.py +0 -0
  641. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/sleeping_green.py +0 -0
  642. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/sleepthreadasync.py +0 -0
  643. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/slow.py +0 -0
  644. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/spoolme.py +0 -0
  645. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/static/test.txt +0 -0
  646. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/static/test2.txt +0 -0
  647. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/staticfile.py +0 -0
  648. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/streamer.psgi +0 -0
  649. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/t/static.pl +0 -0
  650. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/templates/queue.html +0 -0
  651. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/testapp.py +0 -0
  652. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/testfilewrapper.py +0 -0
  653. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/testgevent.py +0 -0
  654. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/testpy3.py +0 -0
  655. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/testrpc.py +0 -0
  656. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/testsignals.py +0 -0
  657. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/testworkers.py +0 -0
  658. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/testyieldnone.py +0 -0
  659. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/threads.py +0 -0
  660. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/travis.sh +0 -0
  661. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/ugevent.py +0 -0
  662. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/web3.py +0 -0
  663. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/websockets.py +0 -0
  664. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/websockets_chat.pl +0 -0
  665. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/websockets_chat.py +0 -0
  666. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/websockets_chat_async.py +0 -0
  667. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/websockets_chat_asyncio.py +0 -0
  668. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/websockets_echo.lua +0 -0
  669. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/websockets_echo.pl +0 -0
  670. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/websockets_echo.py +0 -0
  671. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/websockets_echo.ru +0 -0
  672. {uwsgi-2.0.24 → uwsgi-2.0.25}/tests/werkzeug_app.py +0 -0
  673. {uwsgi-2.0.24 → uwsgi-2.0.25}/uwsgi_main.c +0 -0
  674. {uwsgi-2.0.24 → uwsgi-2.0.25}/uwsgidecorators.py +0 -0
  675. {uwsgi-2.0.24 → uwsgi-2.0.25}/uwsgidsl.rb +0 -0
  676. {uwsgi-2.0.24 → uwsgi-2.0.25}/valgrind/README +0 -0
  677. {uwsgi-2.0.24 → uwsgi-2.0.25}/vassals/broodlord.ini +0 -0
  678. {uwsgi-2.0.24 → uwsgi-2.0.25}/vassals/cc.ini +0 -0
  679. {uwsgi-2.0.24 → uwsgi-2.0.25}/vassals/multi.xml +0 -0
  680. {uwsgi-2.0.24 → uwsgi-2.0.25}/vhosttest/flask001/app1.py +0 -0
  681. {uwsgi-2.0.24 → uwsgi-2.0.25}/vhosttest/flask002/app2.py +0 -0
  682. {uwsgi-2.0.24 → uwsgi-2.0.25}/vhosttest/flask003/app3.py +0 -0
  683. {uwsgi-2.0.24 → uwsgi-2.0.25}/vhosttest/flask004/app4.py +0 -0
  684. {uwsgi-2.0.24 → uwsgi-2.0.25}/vhosttest/flask005/app5.py +0 -0
  685. {uwsgi-2.0.24 → uwsgi-2.0.25}/vhosttest/nginx.conf +0 -0
@@ -10,18 +10,18 @@ jobs:
10
10
  build:
11
11
  strategy:
12
12
  matrix:
13
+ libpcre: ["libpcre3-dev", "libpcre2-dev"]
14
+ os: ["ubuntu-20.04", "ubuntu-22.04"]
15
+ cc: [gcc, clang]
13
16
  include:
14
17
  - os: ubuntu-20.04
15
18
  php: "php7.4"
16
19
  php-config: "php-config7.4"
17
- cc: "gcc"
18
- - os: ubuntu-22.04
19
- php: "php8.1"
20
- php-config: "php-config8.1"
21
- cc: "gcc"
22
20
  - os: ubuntu-22.04
23
21
  php: "php8.1"
24
22
  php-config: "php-config8.1"
23
+ exclude:
24
+ - os: ubuntu-20.04
25
25
  cc: "clang"
26
26
 
27
27
  runs-on: ${{ matrix.os }}
@@ -35,7 +35,7 @@ jobs:
35
35
  run: |
36
36
  sudo apt update -qq
37
37
  sudo apt install --no-install-recommends -qqyf python3-dev \
38
- libxml2-dev libpcre3-dev libcap2-dev \
38
+ libxml2-dev ${{ matrix.libpcre }} libcap2-dev \
39
39
  libargon2-0-dev libsodium-dev \
40
40
  ${{ matrix.php }}-dev lib${{ matrix.php }}-embed \
41
41
  liblua5.1-0-dev ruby-dev \
@@ -21,7 +21,7 @@ jobs:
21
21
  run: |
22
22
  sudo apt update -qq
23
23
  sudo apt install --no-install-recommends -qqyf python${{ matrix.python-version }}-dev \
24
- libpcre3-dev libjansson-dev libcap2-dev \
24
+ libpcre2-dev libjansson-dev libcap2-dev \
25
25
  curl check
26
26
  - name: Install distutils
27
27
  if: contains(fromJson('["3.6","3.7","3.8","3.9","3.10","3.11","3.12"]'), matrix.python-version)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 1.0
2
2
  Name: uWSGI
3
- Version: 2.0.24
3
+ Version: 2.0.25
4
4
  Summary: The uWSGI server
5
5
  Home-page: https://uwsgi-docs.readthedocs.io/en/latest/
6
6
  Author: Unbit
@@ -160,7 +160,7 @@ static struct uwsgi_alarm_instance *uwsgi_alarm_get_instance(char *name) {
160
160
  }
161
161
 
162
162
 
163
- #ifdef UWSGI_PCRE
163
+ #if defined(UWSGI_PCRE) || defined(UWSGI_PCRE2)
164
164
  static int uwsgi_alarm_log_add(char *alarms, char *regexp, int negate) {
165
165
 
166
166
  struct uwsgi_alarm_log *old_ual = NULL, *ual = uwsgi.alarm_logs;
@@ -170,7 +170,8 @@ static int uwsgi_alarm_log_add(char *alarms, char *regexp, int negate) {
170
170
  }
171
171
 
172
172
  ual = uwsgi_calloc(sizeof(struct uwsgi_alarm_log));
173
- if (uwsgi_regexp_build(regexp, &ual->pattern, &ual->pattern_extra)) {
173
+ if (uwsgi_regexp_build(regexp, &ual->pattern)) {
174
+ free(ual);
174
175
  return -1;
175
176
  }
176
177
  ual->negate = negate;
@@ -330,7 +331,7 @@ void uwsgi_alarms_init() {
330
331
  usl = usl->next;
331
332
  }
332
333
 
333
- #ifdef UWSGI_PCRE
334
+ #if defined(UWSGI_PCRE) || defined(UWSGI_PCRE2)
334
335
  // then map log-alarm
335
336
  usl = uwsgi.alarm_logs_list;
336
337
  while (usl) {
@@ -376,14 +377,14 @@ void uwsgi_alarm_trigger_uai(struct uwsgi_alarm_instance *uai, char *msg, size_t
376
377
  }
377
378
  }
378
379
 
379
- #ifdef UWSGI_PCRE
380
+ #if defined(UWSGI_PCRE) || defined(UWSGI_PCRE2)
380
381
  // check if a log should raise an alarm
381
382
  void uwsgi_alarm_log_check(char *msg, size_t len) {
382
383
  if (!uwsgi_strncmp(msg, len, "[uwsgi-alarm", 12))
383
384
  return;
384
385
  struct uwsgi_alarm_log *ual = uwsgi.alarm_logs;
385
386
  while (ual) {
386
- if (uwsgi_regexp_match(ual->pattern, ual->pattern_extra, msg, len) >= 0) {
387
+ if (uwsgi_regexp_match(ual->pattern, msg, len) >= 0) {
387
388
  if (!ual->negate) {
388
389
  struct uwsgi_alarm_ll *uall = ual->alarms;
389
390
  while (uall) {
@@ -314,7 +314,7 @@ int uwsgi_logic_opt_if_not_hostname(char *key, char *value) {
314
314
  return 0;
315
315
  }
316
316
 
317
- #ifdef UWSGI_PCRE
317
+ #if defined(UWSGI_PCRE) || defined(UWSGI_PCRE2)
318
318
  int uwsgi_logic_opt_if_hostname_match(char *key, char *value) {
319
319
  if (uwsgi_regexp_match_pattern(uwsgi.logic_opt_data, uwsgi.hostname)) {
320
320
  add_exported_option(key, uwsgi_substitute(value, "%(_)", uwsgi.logic_opt_data), 0);
@@ -414,7 +414,7 @@ void uwsgi_setup_log_master(void) {
414
414
  usl = usl->next;
415
415
  }
416
416
 
417
- #ifdef UWSGI_PCRE
417
+ #if defined(UWSGI_PCRE) || defined(UWSGI_PCRE2)
418
418
  // set logger by its id
419
419
  struct uwsgi_regexp_list *url = uwsgi.log_route;
420
420
  while (url) {
@@ -1398,11 +1398,11 @@ int uwsgi_master_log(void) {
1398
1398
 
1399
1399
  ssize_t rlen = read(uwsgi.shared->worker_log_pipe[0], uwsgi.log_master_buf, uwsgi.log_master_bufsize);
1400
1400
  if (rlen > 0) {
1401
- #ifdef UWSGI_PCRE
1401
+ #if defined(UWSGI_PCRE) || defined(UWSGI_PCRE2)
1402
1402
  uwsgi_alarm_log_check(uwsgi.log_master_buf, rlen);
1403
1403
  struct uwsgi_regexp_list *url = uwsgi.log_drain_rules;
1404
1404
  while (url) {
1405
- if (uwsgi_regexp_match(url->pattern, url->pattern_extra, uwsgi.log_master_buf, rlen) >= 0) {
1405
+ if (uwsgi_regexp_match(url->pattern, uwsgi.log_master_buf, rlen) >= 0) {
1406
1406
  return 0;
1407
1407
  }
1408
1408
  url = url->next;
@@ -1411,7 +1411,7 @@ int uwsgi_master_log(void) {
1411
1411
  int show = 0;
1412
1412
  url = uwsgi.log_filter_rules;
1413
1413
  while (url) {
1414
- if (uwsgi_regexp_match(url->pattern, url->pattern_extra, uwsgi.log_master_buf, rlen) >= 0) {
1414
+ if (uwsgi_regexp_match(url->pattern, uwsgi.log_master_buf, rlen) >= 0) {
1415
1415
  show = 1;
1416
1416
  break;
1417
1417
  }
@@ -1424,7 +1424,7 @@ int uwsgi_master_log(void) {
1424
1424
  url = uwsgi.log_route;
1425
1425
  int finish = 0;
1426
1426
  while (url) {
1427
- if (uwsgi_regexp_match(url->pattern, url->pattern_extra, uwsgi.log_master_buf, rlen) >= 0) {
1427
+ if (uwsgi_regexp_match(url->pattern, uwsgi.log_master_buf, rlen) >= 0) {
1428
1428
  struct uwsgi_logger *ul_route = (struct uwsgi_logger *) url->custom_ptr;
1429
1429
  if (ul_route) {
1430
1430
  uwsgi_log_func_do(uwsgi.requested_log_encoders, ul_route, uwsgi.log_master_buf, rlen);
@@ -1464,11 +1464,11 @@ int uwsgi_master_req_log(void) {
1464
1464
 
1465
1465
  ssize_t rlen = read(uwsgi.shared->worker_req_log_pipe[0], uwsgi.log_master_buf, uwsgi.log_master_bufsize);
1466
1466
  if (rlen > 0) {
1467
- #ifdef UWSGI_PCRE
1467
+ #if defined(UWSGI_PCRE) || defined(UWSGI_PCRE2)
1468
1468
  struct uwsgi_regexp_list *url = uwsgi.log_req_route;
1469
1469
  int finish = 0;
1470
1470
  while (url) {
1471
- if (uwsgi_regexp_match(url->pattern, url->pattern_extra, uwsgi.log_master_buf, rlen) >= 0) {
1471
+ if (uwsgi_regexp_match(url->pattern, uwsgi.log_master_buf, rlen) >= 0) {
1472
1472
  struct uwsgi_logger *ul_route = (struct uwsgi_logger *) url->custom_ptr;
1473
1473
  if (ul_route) {
1474
1474
  uwsgi_log_func_do(uwsgi.requested_log_req_encoders, ul_route, uwsgi.log_master_buf, rlen);
@@ -60,6 +60,9 @@ void *uwsgi_get_loop(char *name) {
60
60
 
61
61
  void simple_loop() {
62
62
  uwsgi_loop_cores_run(simple_loop_run);
63
+ // Other threads may still run. Make sure they will stop.
64
+ uwsgi.workers[uwsgi.mywid].manage_next_request = 0;
65
+
63
66
  if (uwsgi.workers[uwsgi.mywid].shutdown_sockets)
64
67
  uwsgi_shutdown_all_sockets();
65
68
  }
@@ -78,9 +81,6 @@ void uwsgi_setup_thread_req(long core_id, struct wsgi_request *wsgi_req) {
78
81
  int i;
79
82
  sigset_t smask;
80
83
 
81
-
82
- pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, &i);
83
- pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, &i);
84
84
  pthread_setspecific(uwsgi.tur_key, (void *) wsgi_req);
85
85
 
86
86
  if (core_id > 0) {
@@ -0,0 +1,178 @@
1
+ #if defined(UWSGI_PCRE) || defined(UWSGI_PCRE2)
2
+ #include "uwsgi.h"
3
+
4
+ extern struct uwsgi_server uwsgi;
5
+
6
+ void uwsgi_opt_pcre_jit(char *opt, char *value, void *foobar) {
7
+ #if defined(PCRE_STUDY_JIT_COMPILE) && defined(PCRE_CONFIG_JIT)
8
+ int has_jit = 0, ret;
9
+ ret = pcre_config(PCRE_CONFIG_JIT, &has_jit);
10
+ if (ret != 0 || has_jit != 1)
11
+ return;
12
+ uwsgi.pcre_jit = PCRE_STUDY_JIT_COMPILE;
13
+ #elif defined(PCRE2_CONFIG_JIT)
14
+ int has_jit = 0, ret;
15
+ ret = pcre2_config(PCRE2_CONFIG_JIT, &has_jit);
16
+ if (ret != 0)
17
+ return;
18
+ uwsgi.pcre_jit = has_jit;
19
+ #endif
20
+ }
21
+
22
+ int uwsgi_regexp_build(char *re, uwsgi_pcre ** pattern) {
23
+
24
+ #ifdef UWSGI_PCRE2
25
+ int errnbr;
26
+ long unsigned int erroff;
27
+
28
+ *pattern = pcre2_compile((const unsigned char *) re, PCRE2_ZERO_TERMINATED, 0, &errnbr, &erroff, NULL);
29
+ #else
30
+ const char *errstr;
31
+ int erroff;
32
+
33
+ *pattern = uwsgi_malloc(sizeof(uwsgi_pcre));
34
+ (*pattern)->p = pcre_compile((const char *) re, 0, &errstr, &erroff, NULL);
35
+ #endif
36
+ #ifdef UWSGI_PCRE2
37
+ if (!(*pattern)) {
38
+ uwsgi_log("pcre error: code %d at offset %d\n", errnbr, erroff);
39
+ #else
40
+ if (!((*pattern)->p)) {
41
+ uwsgi_log("pcre error: %s at offset %d\n", errstr, erroff);
42
+ #endif
43
+ return -1;
44
+ }
45
+
46
+ #ifdef UWSGI_PCRE2
47
+ if (uwsgi.pcre_jit) {
48
+ errnbr = pcre2_jit_compile(*pattern, PCRE2_JIT_COMPLETE);
49
+ if (errnbr) {
50
+ pcre2_code_free(*pattern);
51
+ uwsgi_log("pcre JIT compile error code %d\n", errnbr);
52
+ return -1;
53
+ }
54
+ #else
55
+ int opt = uwsgi.pcre_jit;
56
+
57
+ (*pattern)->extra = (pcre_extra *) pcre_study((const pcre *) (*pattern)->p, opt, &errstr);
58
+ if ((*pattern)->extra == NULL && errstr != NULL) {
59
+ pcre_free((*pattern)->p);
60
+ free(*pattern);
61
+ uwsgi_log("pcre (study) error: %s\n", errstr);
62
+ return -1;
63
+ #endif
64
+ }
65
+
66
+ return 0;
67
+
68
+ }
69
+
70
+ int uwsgi_regexp_match(uwsgi_pcre *pattern, const char *subject, int length) {
71
+ #ifdef UWSGI_PCRE2
72
+ return pcre2_match(pattern, (const unsigned char *)subject, length, 0, 0, NULL, NULL);
73
+ #else
74
+ return pcre_exec((const pcre *) pattern->p, (const pcre_extra *) pattern->extra, subject, length, 0, 0, NULL, 0);
75
+ #endif
76
+ }
77
+
78
+ int uwsgi_regexp_match_ovec(uwsgi_pcre *pattern, const char *subject, int length, int *ovec, int n) {
79
+
80
+ #ifdef UWSGI_PCRE2
81
+ int rc;
82
+ int i;
83
+ pcre2_match_data *match_data;
84
+ size_t *pcre2_ovec;
85
+
86
+ match_data = pcre2_match_data_create_from_pattern(pattern, NULL);
87
+ rc = pcre2_match(pattern, (const unsigned char *)subject, length, 0, 0, match_data, NULL);
88
+
89
+ /*
90
+ * Quoting PCRE{,2} spec, "The first pair of integers, ovector[0]
91
+ * and ovector[1], identify the portion of the subject string matched
92
+ * by the entire pattern. The next pair is used for the first capturing
93
+ * subpattern, and so on." Therefore, the ovector size is the number of
94
+ * capturing subpatterns (INFO_CAPTURECOUNT), from uwsgi_regexp_ovector(),
95
+ * as matching pairs, plus room for the first pair.
96
+ */
97
+ if (n > 0) {
98
+ // copy pcre2 output vector to uwsgi output vector
99
+ pcre2_ovec = pcre2_get_ovector_pointer(match_data);
100
+ for (i=0;i<(n+1)*2;i++) {
101
+ ovec[i] = pcre2_ovec[i];
102
+ }
103
+ #else
104
+ if (n > 0) {
105
+ return pcre_exec((const pcre *) pattern->p, (const pcre_extra *) pattern->extra, subject, length, 0, 0, ovec, PCRE_OVECTOR_BYTESIZE(n));
106
+ #endif
107
+ }
108
+
109
+ #ifdef UWSGI_PCRE2
110
+ pcre2_match_data_free(match_data);
111
+
112
+ return rc;
113
+ #else
114
+ return pcre_exec((const pcre *) pattern->p, (const pcre_extra *) pattern->extra, subject, length, 0, 0, NULL, 0);
115
+ #endif
116
+ }
117
+
118
+ int uwsgi_regexp_ovector(const uwsgi_pcre *pattern) {
119
+
120
+ int n;
121
+ #ifdef UWSGI_PCRE2
122
+ if (pcre2_pattern_info(pattern, PCRE2_INFO_CAPTURECOUNT, &n))
123
+ #else
124
+ if (pcre_fullinfo((const pcre *) pattern->p, (const pcre_extra *) pattern->extra, PCRE_INFO_CAPTURECOUNT, &n))
125
+ #endif
126
+ return 0;
127
+
128
+ return n;
129
+ }
130
+
131
+ char *uwsgi_regexp_apply_ovec(char *src, int src_n, char *dst, int dst_n, int *ovector, int n) {
132
+
133
+ int i;
134
+ int dollar = 0;
135
+
136
+ size_t dollars = n;
137
+
138
+ for(i=0;i<dst_n;i++) {
139
+ if (dst[i] == '$') {
140
+ dollars++;
141
+ }
142
+ }
143
+
144
+ char *res = uwsgi_malloc(dst_n + (src_n * dollars) + 1);
145
+ char *ptr = res;
146
+
147
+ for (i = 0; i < dst_n; i++) {
148
+ if (dollar) {
149
+ if (isdigit((int) dst[i])) {
150
+ int pos = (dst[i] - 48);
151
+ if (pos <= n) {
152
+ pos = pos * 2;
153
+ memcpy(ptr, src + ovector[pos], ovector[pos + 1] - ovector[pos]);
154
+ ptr += ovector[pos + 1] - ovector[pos];
155
+ }
156
+ }
157
+ else {
158
+ *ptr++ = '$';
159
+ *ptr++ = dst[i];
160
+ }
161
+ dollar = 0;
162
+ }
163
+ else {
164
+ if (dst[i] == '$') {
165
+ dollar = 1;
166
+ }
167
+ else {
168
+ *ptr++ = dst[i];
169
+ }
170
+ }
171
+ }
172
+
173
+ *ptr++ = 0;
174
+
175
+ return res;
176
+ }
177
+
178
+ #endif
@@ -211,7 +211,7 @@ int uwsgi_apply_routes_do(struct uwsgi_route *routes, struct wsgi_request *wsgi_
211
211
  subject = *subject2 ;
212
212
  subject_len = *subject_len2;
213
213
  }
214
- n = uwsgi_regexp_match_ovec(routes->pattern, routes->pattern_extra, subject, subject_len, routes->ovector[wsgi_req->async_id], routes->ovn[wsgi_req->async_id]);
214
+ n = uwsgi_regexp_match_ovec(routes->pattern, subject, subject_len, routes->ovector[wsgi_req->async_id], routes->ovn[wsgi_req->async_id]);
215
215
  }
216
216
  else {
217
217
  int ret = routes->if_func(wsgi_req, routes);
@@ -506,15 +506,15 @@ void uwsgi_fixup_routes(struct uwsgi_route *ur) {
506
506
 
507
507
  // fill them if needed... (this is an optimization for route with a static subject)
508
508
  if (ur->subject && ur->subject_len) {
509
- if (uwsgi_regexp_build(ur->orig_route, &ur->pattern, &ur->pattern_extra)) {
509
+ if (uwsgi_regexp_build(ur->orig_route, &ur->pattern)) {
510
510
  exit(1);
511
511
  }
512
512
 
513
513
  int i;
514
514
  for(i=0;i<uwsgi.cores;i++) {
515
- ur->ovn[i] = uwsgi_regexp_ovector(ur->pattern, ur->pattern_extra);
515
+ ur->ovn[i] = uwsgi_regexp_ovector(ur->pattern);
516
516
  if (ur->ovn[i] > 0) {
517
- ur->ovector[i] = uwsgi_calloc(sizeof(int) * (3 * (ur->ovn[i] + 1)));
517
+ ur->ovector[i] = uwsgi_calloc(sizeof(int) * PCRE_OVECTOR_BYTESIZE(ur->ovn[i]));
518
518
  }
519
519
  }
520
520
  }
@@ -1484,38 +1484,47 @@ static int uwsgi_route_condition_regexp(struct wsgi_request *wsgi_req, struct uw
1484
1484
  ur->condition_ub[wsgi_req->async_id] = uwsgi_routing_translate(wsgi_req, ur, NULL, 0, ur->subject_str, semicolon - ur->subject_str);
1485
1485
  if (!ur->condition_ub[wsgi_req->async_id]) return -1;
1486
1486
 
1487
- pcre *pattern;
1488
- pcre_extra *pattern_extra;
1487
+ uwsgi_pcre *pattern;
1489
1488
  char *re = uwsgi_concat2n(semicolon+1, ur->subject_str_len - ((semicolon+1) - ur->subject_str), "", 0);
1490
- if (uwsgi_regexp_build(re, &pattern, &pattern_extra)) {
1489
+ if (uwsgi_regexp_build(re, &pattern)) {
1491
1490
  free(re);
1492
1491
  return -1;
1493
1492
  }
1494
1493
  free(re);
1495
1494
 
1496
1495
  // a condition has no initialized vectors, let's create them
1497
- ur->ovn[wsgi_req->async_id] = uwsgi_regexp_ovector(pattern, pattern_extra);
1496
+ ur->ovn[wsgi_req->async_id] = uwsgi_regexp_ovector(pattern);
1498
1497
  if (ur->ovn[wsgi_req->async_id] > 0) {
1499
1498
  ur->ovector[wsgi_req->async_id] = uwsgi_calloc(sizeof(int) * (3 * (ur->ovn[wsgi_req->async_id] + 1)));
1500
1499
  }
1501
1500
 
1502
- if (uwsgi_regexp_match_ovec(pattern, pattern_extra, ur->condition_ub[wsgi_req->async_id]->buf, ur->condition_ub[wsgi_req->async_id]->pos, ur->ovector[wsgi_req->async_id], ur->ovn[wsgi_req->async_id] ) >= 0) {
1503
- pcre_free(pattern);
1501
+ if (uwsgi_regexp_match_ovec(pattern, ur->condition_ub[wsgi_req->async_id]->buf, ur->condition_ub[wsgi_req->async_id]->pos, ur->ovector[wsgi_req->async_id], ur->ovn[wsgi_req->async_id] ) >= 0) {
1502
+ #ifdef UWSGI_PCRE2
1503
+ pcre2_code_free(pattern);
1504
+ #else
1505
+ pcre_free(pattern->p);
1504
1506
  #ifdef PCRE_STUDY_JIT_COMPILE
1505
- pcre_free_study(pattern_extra);
1507
+ pcre_free_study(pattern->extra);
1506
1508
  #else
1507
- pcre_free(pattern_extra);
1509
+ pcre_free(pattern->extra);
1510
+ #endif
1511
+ free(pattern);
1508
1512
  #endif
1509
1513
  return 1;
1510
1514
  }
1511
1515
 
1512
- pcre_free(pattern);
1516
+ #ifdef UWSGI_PCRE2
1517
+ pcre2_code_free(pattern);
1518
+ #else
1519
+ pcre_free(pattern->p);
1513
1520
  #ifdef PCRE_STUDY_JIT_COMPILE
1514
- pcre_free_study(pattern_extra);
1521
+ pcre_free_study(pattern->extra);
1515
1522
  #else
1516
- pcre_free(pattern_extra);
1523
+ pcre_free(pattern->extra);
1517
1524
  #endif
1518
- return 0;
1525
+ free(pattern);
1526
+ #endif
1527
+ return 0;
1519
1528
  }
1520
1529
 
1521
1530
  static int uwsgi_route_condition_empty(struct wsgi_request *wsgi_req, struct uwsgi_route *ur) {
@@ -145,10 +145,10 @@ static int uwsgi_sni_cb(SSL *ssl, int *ad, void *arg) {
145
145
 
146
146
  if (uwsgi.subscription_dotsplit) goto end;
147
147
 
148
- #ifdef UWSGI_PCRE
148
+ #if defined(UWSGI_PCRE) || defined(UWSGI_PCRE2)
149
149
  struct uwsgi_regexp_list *url = uwsgi.sni_regexp;
150
150
  while(url) {
151
- if (uwsgi_regexp_match(url->pattern, url->pattern_extra, (char *)servername, servername_len) >= 0) {
151
+ if (uwsgi_regexp_match(url->pattern, (char *)servername, servername_len) >= 0) {
152
152
  SSL_set_SSL_CTX(ssl, url->custom_ptr);
153
153
  return SSL_TLSEXT_ERR_OK;
154
154
  }
@@ -621,7 +621,7 @@ void uwsgi_opt_sni(char *opt, char *value, void *foobar) {
621
621
  return;
622
622
  }
623
623
 
624
- #ifdef UWSGI_PCRE
624
+ #if defined(UWSGI_PCRE) || defined(UWSGI_PCRE2)
625
625
  if (!strcmp(opt, "sni-regexp")) {
626
626
  struct uwsgi_regexp_list *url = uwsgi_regexp_new_list(&uwsgi.sni_regexp, v);
627
627
  url->custom_ptr = ctx;
@@ -630,7 +630,7 @@ void uwsgi_opt_sni(char *opt, char *value, void *foobar) {
630
630
  #endif
631
631
  struct uwsgi_string_list *usl = uwsgi_string_new_list(&uwsgi.sni, v);
632
632
  usl->custom_ptr = ctx;
633
- #ifdef UWSGI_PCRE
633
+ #if defined(UWSGI_PCRE) || defined(UWSGI_PCRE2)
634
634
  }
635
635
  #endif
636
636
 
@@ -35,11 +35,11 @@ int uwsgi_static_want_gzip(struct wsgi_request *wsgi_req, char *filename, size_t
35
35
  usl = usl->next;
36
36
  }
37
37
 
38
- #ifdef UWSGI_PCRE
38
+ #if defined(UWSGI_PCRE) || defined(UWSGI_PCRE2)
39
39
  // check for regexp
40
40
  struct uwsgi_regexp_list *url = uwsgi.static_gzip;
41
41
  while(url) {
42
- if (uwsgi_regexp_match(url->pattern, url->pattern_extra, filename, *filename_len) >= 0) {
42
+ if (uwsgi_regexp_match(url->pattern, filename, *filename_len) >= 0) {
43
43
  goto gzip;
44
44
  }
45
45
  url = url->next;
@@ -216,7 +216,7 @@ int uwsgi_add_expires_type(struct wsgi_request *wsgi_req, char *mime_type, int m
216
216
  return 0;
217
217
  }
218
218
 
219
- #ifdef UWSGI_PCRE
219
+ #if defined(UWSGI_PCRE) || defined(UWSGI_PCRE2)
220
220
  int uwsgi_add_expires(struct wsgi_request *wsgi_req, char *filename, int filename_len, struct stat *st) {
221
221
 
222
222
  struct uwsgi_dyn_dict *udd = uwsgi.static_expires;
@@ -225,7 +225,7 @@ int uwsgi_add_expires(struct wsgi_request *wsgi_req, char *filename, int filenam
225
225
  char expires[31];
226
226
 
227
227
  while (udd) {
228
- if (uwsgi_regexp_match(udd->pattern, udd->pattern_extra, filename, filename_len) >= 0) {
228
+ if (uwsgi_regexp_match(udd->pattern, filename, filename_len) >= 0) {
229
229
  int delta = uwsgi_str_num(udd->value, udd->vallen);
230
230
  int size = uwsgi_http_date(now + delta, expires);
231
231
  if (size > 0) {
@@ -238,7 +238,7 @@ int uwsgi_add_expires(struct wsgi_request *wsgi_req, char *filename, int filenam
238
238
 
239
239
  udd = uwsgi.static_expires_mtime;
240
240
  while (udd) {
241
- if (uwsgi_regexp_match(udd->pattern, udd->pattern_extra, filename, filename_len) >= 0) {
241
+ if (uwsgi_regexp_match(udd->pattern, filename, filename_len) >= 0) {
242
242
  int delta = uwsgi_str_num(udd->value, udd->vallen);
243
243
  int size = uwsgi_http_date(st->st_mtime + delta, expires);
244
244
  if (size > 0) {
@@ -260,7 +260,7 @@ int uwsgi_add_expires_path_info(struct wsgi_request *wsgi_req, struct stat *st)
260
260
  char expires[31];
261
261
 
262
262
  while (udd) {
263
- if (uwsgi_regexp_match(udd->pattern, udd->pattern_extra, wsgi_req->path_info, wsgi_req->path_info_len) >= 0) {
263
+ if (uwsgi_regexp_match(udd->pattern, wsgi_req->path_info, wsgi_req->path_info_len) >= 0) {
264
264
  int delta = uwsgi_str_num(udd->value, udd->vallen);
265
265
  int size = uwsgi_http_date(now + delta, expires);
266
266
  if (size > 0) {
@@ -273,7 +273,7 @@ int uwsgi_add_expires_path_info(struct wsgi_request *wsgi_req, struct stat *st)
273
273
 
274
274
  udd = uwsgi.static_expires_path_info_mtime;
275
275
  while (udd) {
276
- if (uwsgi_regexp_match(udd->pattern, udd->pattern_extra, wsgi_req->path_info, wsgi_req->path_info_len) >= 0) {
276
+ if (uwsgi_regexp_match(udd->pattern, wsgi_req->path_info, wsgi_req->path_info_len) >= 0) {
277
277
  int delta = uwsgi_str_num(udd->value, udd->vallen);
278
278
  int size = uwsgi_http_date(st->st_mtime + delta, expires);
279
279
  if (size > 0) {
@@ -295,7 +295,7 @@ int uwsgi_add_expires_uri(struct wsgi_request *wsgi_req, struct stat *st) {
295
295
  char expires[31];
296
296
 
297
297
  while (udd) {
298
- if (uwsgi_regexp_match(udd->pattern, udd->pattern_extra, wsgi_req->uri, wsgi_req->uri_len) >= 0) {
298
+ if (uwsgi_regexp_match(udd->pattern, wsgi_req->uri, wsgi_req->uri_len) >= 0) {
299
299
  int delta = uwsgi_str_num(udd->value, udd->vallen);
300
300
  int size = uwsgi_http_date(now + delta, expires);
301
301
  if (size > 0) {
@@ -308,7 +308,7 @@ int uwsgi_add_expires_uri(struct wsgi_request *wsgi_req, struct stat *st) {
308
308
 
309
309
  udd = uwsgi.static_expires_uri_mtime;
310
310
  while (udd) {
311
- if (uwsgi_regexp_match(udd->pattern, udd->pattern_extra, wsgi_req->uri, wsgi_req->uri_len) >= 0) {
311
+ if (uwsgi_regexp_match(udd->pattern, wsgi_req->uri, wsgi_req->uri_len) >= 0) {
312
312
  int delta = uwsgi_str_num(udd->value, udd->vallen);
313
313
  int size = uwsgi_http_date(st->st_mtime + delta, expires);
314
314
  if (size > 0) {
@@ -507,7 +507,7 @@ int uwsgi_real_file_serve(struct wsgi_request *wsgi_req, char *real_filename, si
507
507
  if (uwsgi_response_prepare_headers(wsgi_req, "200 OK", 6)) return -1;
508
508
  }
509
509
 
510
- #ifdef UWSGI_PCRE
510
+ #if defined(UWSGI_PCRE) || defined(UWSGI_PCRE2)
511
511
  uwsgi_add_expires(wsgi_req, real_filename, real_filename_len, st);
512
512
  uwsgi_add_expires_path_info(wsgi_req, st);
513
513
  uwsgi_add_expires_uri(wsgi_req, st);
@@ -1036,12 +1036,6 @@ void uwsgi_destroy_request(struct wsgi_request *wsgi_req) {
1036
1036
 
1037
1037
  close_and_free_request(wsgi_req);
1038
1038
 
1039
- int foo;
1040
- if (uwsgi.threads > 1) {
1041
- // now the thread can die...
1042
- pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, &foo);
1043
- }
1044
-
1045
1039
  // reset for avoiding following requests to fail on non-uwsgi protocols
1046
1040
  // thanks Marko Tiikkaja for catching it
1047
1041
  wsgi_req->uh->pktsize = 0;
@@ -1122,11 +1116,6 @@ void uwsgi_close_request(struct wsgi_request *wsgi_req) {
1122
1116
  func(wsgi_req);
1123
1117
  }
1124
1118
 
1125
- if (uwsgi.threads > 1) {
1126
- // now the thread can die...
1127
- pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, &tmp_id);
1128
- }
1129
-
1130
1119
  // leave harakiri mode
1131
1120
  if (uwsgi.workers[uwsgi.mywid].harakiri > 0) {
1132
1121
  set_harakiri(0);
@@ -1546,18 +1535,12 @@ int wsgi_req_accept(int queue, struct wsgi_request *wsgi_req) {
1546
1535
  }
1547
1536
  }
1548
1537
 
1549
- // kill the thread after the request completion
1550
- if (uwsgi.threads > 1)
1551
- pthread_setcancelstate(PTHREAD_CANCEL_DISABLE, &ret);
1552
-
1553
1538
  if (uwsgi.signal_socket > -1 && (interesting_fd == uwsgi.signal_socket || interesting_fd == uwsgi.my_signal_socket)) {
1554
1539
 
1555
1540
  thunder_unlock;
1556
1541
 
1557
1542
  uwsgi_receive_signal(interesting_fd, "worker", uwsgi.mywid);
1558
1543
 
1559
- if (uwsgi.threads > 1)
1560
- pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, &ret);
1561
1544
  return -1;
1562
1545
  }
1563
1546
 
@@ -1568,8 +1551,6 @@ int wsgi_req_accept(int queue, struct wsgi_request *wsgi_req) {
1568
1551
  wsgi_req->fd = wsgi_req->socket->proto_accept(wsgi_req, interesting_fd);
1569
1552
  thunder_unlock;
1570
1553
  if (wsgi_req->fd < 0) {
1571
- if (uwsgi.threads > 1)
1572
- pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, &ret);
1573
1554
  return -1;
1574
1555
  }
1575
1556
 
@@ -1584,8 +1565,6 @@ int wsgi_req_accept(int queue, struct wsgi_request *wsgi_req) {
1584
1565
  }
1585
1566
 
1586
1567
  thunder_unlock;
1587
- if (uwsgi.threads > 1)
1588
- pthread_setcancelstate(PTHREAD_CANCEL_ENABLE, &ret);
1589
1568
  return -1;
1590
1569
  }
1591
1570
 
@@ -2301,7 +2280,7 @@ struct uwsgi_string_list *uwsgi_string_new_list(struct uwsgi_string_list **list,
2301
2280
  return uwsgi_string;
2302
2281
  }
2303
2282
 
2304
- #ifdef UWSGI_PCRE
2283
+ #if defined(UWSGI_PCRE) || defined(UWSGI_PCRE2)
2305
2284
  struct uwsgi_regexp_list *uwsgi_regexp_custom_new_list(struct uwsgi_regexp_list **list, char *value, char *custom) {
2306
2285
 
2307
2286
  struct uwsgi_regexp_list *url = *list, *old_url;
@@ -2320,7 +2299,7 @@ struct uwsgi_regexp_list *uwsgi_regexp_custom_new_list(struct uwsgi_regexp_list
2320
2299
  old_url->next = url;
2321
2300
  }
2322
2301
 
2323
- if (uwsgi_regexp_build(value, &url->pattern, &url->pattern_extra)) {
2302
+ if (uwsgi_regexp_build(value, &url->pattern)) {
2324
2303
  exit(1);
2325
2304
  }
2326
2305
  url->next = NULL;
@@ -2333,14 +2312,13 @@ struct uwsgi_regexp_list *uwsgi_regexp_custom_new_list(struct uwsgi_regexp_list
2333
2312
 
2334
2313
  int uwsgi_regexp_match_pattern(char *pattern, char *str) {
2335
2314
 
2336
- pcre *regexp;
2337
- pcre_extra *regexp_extra;
2315
+ uwsgi_pcre *regexp;
2338
2316
 
2339
- if (uwsgi_regexp_build(pattern, &regexp, &regexp_extra))
2317
+ if (uwsgi_regexp_build(pattern, &regexp))
2340
2318
  return 1;
2341
- return !uwsgi_regexp_match(regexp, regexp_extra, str, strlen(str));
2342
- }
2343
2319
 
2320
+ return !uwsgi_regexp_match(regexp, str, strlen(str));
2321
+ }
2344
2322
 
2345
2323
  #endif
2346
2324