uWSGI 2.0.23__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.23 → uwsgi-2.0.25}/.github/workflows/compile-test.yml +14 -8
  2. {uwsgi-2.0.23 → uwsgi-2.0.25}/.github/workflows/test.yml +3 -3
  3. {uwsgi-2.0.23 → uwsgi-2.0.25}/PKG-INFO +1 -1
  4. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/alarm.c +6 -5
  5. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/cache.c +6 -0
  6. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/config.c +1 -1
  7. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/ini.c +0 -3
  8. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/logging.c +10 -10
  9. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/loop.c +3 -3
  10. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/master.c +1 -1
  11. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/master_checks.c +1 -1
  12. uwsgi-2.0.25/core/regexp.c +178 -0
  13. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/routing.c +25 -16
  14. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/ssl.c +4 -4
  15. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/static.c +10 -10
  16. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/utils.c +8 -30
  17. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/uwsgi.c +33 -60
  18. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/yaml.c +0 -2
  19. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/glusterfs/glusterfs.c +1 -1
  20. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/php/php_plugin.c +8 -4
  21. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/php/uwsgiplugin.py +6 -1
  22. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/python/pyloader.c +3 -1
  23. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/python/python_plugin.c +3 -1
  24. uwsgi-2.0.25/tests/threads_atexit.py +44 -0
  25. uwsgi-2.0.25/tests/threads_heavy.py +29 -0
  26. {uwsgi-2.0.23 → uwsgi-2.0.25}/uwsgi.gemspec +1 -1
  27. {uwsgi-2.0.23 → uwsgi-2.0.25}/uwsgi.h +36 -23
  28. {uwsgi-2.0.23 → uwsgi-2.0.25}/uwsgiconfig.py +33 -26
  29. {uwsgi-2.0.23 → uwsgi-2.0.25}/valgrind/valgrind-generate-sups.sh +4 -2
  30. uwsgi-2.0.23/core/regexp.c +0 -110
  31. {uwsgi-2.0.23 → uwsgi-2.0.25}/.gitignore +0 -0
  32. {uwsgi-2.0.23 → uwsgi-2.0.25}/CONTRIBUTORS +0 -0
  33. {uwsgi-2.0.23 → uwsgi-2.0.25}/INSTALL +0 -0
  34. {uwsgi-2.0.23 → uwsgi-2.0.25}/LICENSE +0 -0
  35. {uwsgi-2.0.23 → uwsgi-2.0.25}/Makefile +0 -0
  36. {uwsgi-2.0.23 → uwsgi-2.0.25}/README +0 -0
  37. {uwsgi-2.0.23 → uwsgi-2.0.25}/apache2/mod_Ruwsgi.c +0 -0
  38. {uwsgi-2.0.23 → uwsgi-2.0.25}/apache2/mod_proxy_uwsgi.c +0 -0
  39. {uwsgi-2.0.23 → uwsgi-2.0.25}/apache2/mod_uwsgi.c +0 -0
  40. {uwsgi-2.0.23 → uwsgi-2.0.25}/attach.py +0 -0
  41. {uwsgi-2.0.23 → uwsgi-2.0.25}/bin/uwsgi +0 -0
  42. {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/all.ini +0 -0
  43. {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/asyncio.ini +0 -0
  44. {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/base.ini +0 -0
  45. {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/cgi.ini +0 -0
  46. {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/core.ini +0 -0
  47. {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/coroae.ini +0 -0
  48. {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/coverity.ini +0 -0
  49. {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/default.ini +0 -0
  50. {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/django.ini +0 -0
  51. {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/embedded.ini +0 -0
  52. {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/erlang.ini +0 -0
  53. {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/gccgo.ini +0 -0
  54. {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/gevent.ini +0 -0
  55. {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/glusterfs.ini +0 -0
  56. {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/gridfs.ini +0 -0
  57. {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/jwsgi.ini +0 -0
  58. {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/lib.ini +0 -0
  59. {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/lua.ini +0 -0
  60. {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/luap.ini +0 -0
  61. {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/minimal.ini +0 -0
  62. {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/modular.ini +0 -0
  63. {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/mono.ini +0 -0
  64. {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/nolang.ini +0 -0
  65. {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/package.ini +0 -0
  66. {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/php.ini +0 -0
  67. {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/plonly.ini +0 -0
  68. {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/ppa.ini +0 -0
  69. {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/psgi.ini +0 -0
  70. {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/pyerl.ini +0 -0
  71. {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/pylua.ini +0 -0
  72. {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/pyonly.ini +0 -0
  73. {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/pypy.ini +0 -0
  74. {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/pypyonly.ini +0 -0
  75. {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/pyring.ini +0 -0
  76. {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/pyuwsgi.ini +0 -0
  77. {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/pyuwsginossl.ini +0 -0
  78. {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/rack.ini +0 -0
  79. {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/rados.ini +0 -0
  80. {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/rbonly.ini +0 -0
  81. {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/ring.ini +0 -0
  82. {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/ruby2.ini +0 -0
  83. {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/servlet.ini +0 -0
  84. {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/travis.ini +0 -0
  85. {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/unbit.ini +0 -0
  86. {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/unbitstaff.ini +0 -0
  87. {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/uwsgi.it.ini +0 -0
  88. {uwsgi-2.0.23 → uwsgi-2.0.25}/buildconf/v8.ini +0 -0
  89. {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/Uwsgi.pm +0 -0
  90. {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/binder.pl +0 -0
  91. {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/centos_init_script +0 -0
  92. {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/cgi_python.c +0 -0
  93. {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/cryptologger.rb +0 -0
  94. {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/emperormon.ru +0 -0
  95. {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/fdconf.pl +0 -0
  96. {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/graphite_uwsgi.py +0 -0
  97. {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/launchd/it.unbit.uwsgi.emperor.plist +0 -0
  98. {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/launchd/it.unbit.uwsgi.plist +0 -0
  99. {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/loadapp.pl +0 -0
  100. {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/pypy/uwsgi_pypy_greenlets.py +0 -0
  101. {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/pyuwsgi.py +0 -0
  102. {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/runuwsgi.py +0 -0
  103. {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/securesubscribe.pl +0 -0
  104. {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/spoolqueue/producer.py +0 -0
  105. {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/spoolqueue/tasks.py +0 -0
  106. {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/spoolqueue/tasksconsumer.py +0 -0
  107. {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/subscribe.pl +0 -0
  108. {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/twuwsgi.py +0 -0
  109. {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/upstart/emperor.conf +0 -0
  110. {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/upstart/uwsgi.conf +0 -0
  111. {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/upython +0 -0
  112. {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/urack.rb +0 -0
  113. {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/uwsgi-cache-monitor.py +0 -0
  114. {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/uwsgi.erl +0 -0
  115. {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/uwsgi.java +0 -0
  116. {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/uwsgi.rb +0 -0
  117. {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/uwsgi_client.c +0 -0
  118. {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/uwsgi_dynamic_client.c +0 -0
  119. {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/uwsgisubscribers.ru +0 -0
  120. {uwsgi-2.0.23 → uwsgi-2.0.25}/contrib/xinetd_uwsgi +0 -0
  121. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/async.c +0 -0
  122. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/buffer.c +0 -0
  123. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/chunked.c +0 -0
  124. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/clang_fake.c +0 -0
  125. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/clock.c +0 -0
  126. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/cookie.c +0 -0
  127. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/cron.c +0 -0
  128. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/daemons.c +0 -0
  129. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/emperor.c +0 -0
  130. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/errors.c +0 -0
  131. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/event.c +0 -0
  132. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/exceptions.c +0 -0
  133. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/fifo.c +0 -0
  134. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/fsmon.c +0 -0
  135. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/gateway.c +0 -0
  136. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/hash.c +0 -0
  137. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/hooks.c +0 -0
  138. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/init.c +0 -0
  139. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/io.c +0 -0
  140. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/json.c +0 -0
  141. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/legion.c +0 -0
  142. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/lock.c +0 -0
  143. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/logging. +0 -0
  144. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/master_events.c +0 -0
  145. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/master_utils.c +0 -0
  146. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/metrics.c +0 -0
  147. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/mount.c +0 -0
  148. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/mule.c +0 -0
  149. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/notify.c +0 -0
  150. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/offload.c +0 -0
  151. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/plugins.c +0 -0
  152. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/plugins_builder.c +0 -0
  153. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/progress.c +0 -0
  154. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/protocol.c +0 -0
  155. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/querystring.c +0 -0
  156. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/queue.c +0 -0
  157. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/rb_timers.c +0 -0
  158. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/reader.c +0 -0
  159. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/rpc.c +0 -0
  160. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/sendfile.c +0 -0
  161. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/setup_utils.c +0 -0
  162. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/sharedarea.c +0 -0
  163. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/signal.c +0 -0
  164. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/skel.c +0 -0
  165. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/snmp.c +0 -0
  166. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/socket.c +0 -0
  167. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/spooler.c +0 -0
  168. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/stats.c +0 -0
  169. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/storage.c +0 -0
  170. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/strings.c +0 -0
  171. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/subscription.c +0 -0
  172. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/timebomb.c +0 -0
  173. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/transformations.c +0 -0
  174. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/websockets.c +0 -0
  175. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/writer.c +0 -0
  176. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/xmlconf.c +0 -0
  177. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/zeus.c +0 -0
  178. {uwsgi-2.0.23 → uwsgi-2.0.25}/core/zlib.c +0 -0
  179. {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/bootstrap.py +0 -0
  180. {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/bootstrap2.py +0 -0
  181. {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/bootstrap3.py +0 -0
  182. {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/bootstrap4.py +0 -0
  183. {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/bootstrap5.py +0 -0
  184. {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/config.lua +0 -0
  185. {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/config.ru +0 -0
  186. {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/config17.ru +0 -0
  187. {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/config2.lua +0 -0
  188. {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/config2.ru +0 -0
  189. {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/config30.ru +0 -0
  190. {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/corostream.pl +0 -0
  191. {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/debug.ini +0 -0
  192. {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/fibers.ru +0 -0
  193. {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/fibers.yml +0 -0
  194. {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/flaskpost.py +0 -0
  195. {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/heavytest.ini +0 -0
  196. {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/heavytest.py +0 -0
  197. {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/info_uwsgi.php +0 -0
  198. {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/logic.ini +0 -0
  199. {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/mega.xml +0 -0
  200. {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/mjpeg_stream.py +0 -0
  201. {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/mojoapp.pl +0 -0
  202. {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/multi.ini +0 -0
  203. {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/multi.xml +0 -0
  204. {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/multiapp.py +0 -0
  205. {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/protected.ini +0 -0
  206. {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/router.lua +0 -0
  207. {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/simple_app.py +0 -0
  208. {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/simple_app_wsgi2.py +0 -0
  209. {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/simple_logger.py +0 -0
  210. {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/sites.xml +0 -0
  211. {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/sputnik.ws +0 -0
  212. {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/staticfilesnmp.py +0 -0
  213. {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/taskqueue.py +0 -0
  214. {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/uwsgi.xml +0 -0
  215. {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/uwsgirouter.py +0 -0
  216. {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/uwsgirouter2.py +0 -0
  217. {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/uwsgirouter3.py +0 -0
  218. {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/uwsgirouter4.py +0 -0
  219. {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/uwsgirouter5.py +0 -0
  220. {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/uwsgistatus.py +0 -0
  221. {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/welcome.ini +0 -0
  222. {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/welcome.py +0 -0
  223. {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/welcome3.py +0 -0
  224. {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/werkzeug.js +0 -0
  225. {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/werkzeug.yml +0 -0
  226. {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/werkzeug_strict.yml +0 -0
  227. {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/xmlindex-html.xsl +0 -0
  228. {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/xmlindex.ini +0 -0
  229. {uwsgi-2.0.23 → uwsgi-2.0.25}/examples/zmqgevent.ini +0 -0
  230. {uwsgi-2.0.23 → uwsgi-2.0.25}/ext/uwsgi/extconf.rb +0 -0
  231. {uwsgi-2.0.23 → uwsgi-2.0.25}/install.sh +0 -0
  232. {uwsgi-2.0.23 → uwsgi-2.0.25}/lib/linux_ns.c +0 -0
  233. {uwsgi-2.0.23 → uwsgi-2.0.25}/lib/netlink.c +0 -0
  234. {uwsgi-2.0.23 → uwsgi-2.0.25}/lib/sun_fixes.c +0 -0
  235. {uwsgi-2.0.23 → uwsgi-2.0.25}/logo_uWSGI.png +0 -0
  236. {uwsgi-2.0.23 → uwsgi-2.0.25}/logo_uWSGI.svg +0 -0
  237. {uwsgi-2.0.23 → uwsgi-2.0.25}/mongrel2-uwsgi.conf +0 -0
  238. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/airbrake/airbrake_plugin.c +0 -0
  239. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/airbrake/uwsgiplugin.py +0 -0
  240. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/alarm_curl/alarm_curl_plugin.c +0 -0
  241. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/alarm_curl/uwsgiplugin.py +0 -0
  242. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/alarm_speech/alarm_speech.m +0 -0
  243. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/alarm_speech/uwsgiplugin.py +0 -0
  244. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/alarm_xmpp/alarm_xmpp_plugin.c +0 -0
  245. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/alarm_xmpp/gloox.cc +0 -0
  246. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/alarm_xmpp/uwsgiplugin.py +0 -0
  247. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/asyncio/asyncio.c +0 -0
  248. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/asyncio/uwsgiplugin.py +0 -0
  249. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/cache/cache.c +0 -0
  250. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/cache/uwsgiplugin.py +0 -0
  251. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/carbon/carbon.c +0 -0
  252. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/carbon/uwsgiplugin.py +0 -0
  253. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/cgi/cgi_plugin.c +0 -0
  254. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/cgi/uwsgiplugin.py +0 -0
  255. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/cheaper_backlog2/cheaper_backlog2.c +0 -0
  256. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/cheaper_backlog2/uwsgiplugin.py +0 -0
  257. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/cheaper_busyness/cheaper_busyness.c +0 -0
  258. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/cheaper_busyness/uwsgiplugin.py +0 -0
  259. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/clock_monotonic/clock_monotonic.c +0 -0
  260. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/clock_monotonic/uwsgiplugin.py +0 -0
  261. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/clock_realtime/clock_realtime.c +0 -0
  262. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/clock_realtime/uwsgiplugin.py +0 -0
  263. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/corerouter/corerouter.c +0 -0
  264. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/corerouter/cr.h +0 -0
  265. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/corerouter/cr_common.c +0 -0
  266. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/corerouter/cr_map.c +0 -0
  267. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/corerouter/uwsgiplugin.py +0 -0
  268. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/coroae/coroae.c +0 -0
  269. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/coroae/uwsgiplugin.py +0 -0
  270. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/cplusplus/base.cc +0 -0
  271. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/cplusplus/plugin.c +0 -0
  272. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/cplusplus/uwsgiplugin.py +0 -0
  273. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/curl_cron/curl_cron.c +0 -0
  274. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/curl_cron/uwsgiplugin.py +0 -0
  275. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/dumbloop/dumb.c +0 -0
  276. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/dumbloop/uwsgiplugin.py +0 -0
  277. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/dummy/dummy.c +0 -0
  278. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/dummy/uwsgiplugin.py +0 -0
  279. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/echo/echo_plugin.c +0 -0
  280. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/echo/uwsgiplugin.py +0 -0
  281. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/emperor_amqp/amqp.c +0 -0
  282. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/emperor_amqp/emperor_amqp.c +0 -0
  283. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/emperor_amqp/uwsgiplugin.py +0 -0
  284. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/emperor_mongodb/emperor_mongodb.cc +0 -0
  285. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/emperor_mongodb/plugin.c +0 -0
  286. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/emperor_mongodb/uwsgiplugin.py +0 -0
  287. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/emperor_pg/emperor_pg.c +0 -0
  288. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/emperor_pg/uwsgiplugin.py +0 -0
  289. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/emperor_zeromq/emperor_zeromq.c +0 -0
  290. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/emperor_zeromq/uwsgiplugin.py +0 -0
  291. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/example/example_plugin.c +0 -0
  292. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/example/uwsgiplugin.py +0 -0
  293. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/exception_log/exception_log.c +0 -0
  294. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/exception_log/uwsgiplugin.py +0 -0
  295. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/fastrouter/fastrouter.c +0 -0
  296. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/fastrouter/uwsgiplugin.py +0 -0
  297. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/fiber/fiber.c +0 -0
  298. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/fiber/uwsgiplugin.py +0 -0
  299. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/forkptyrouter/forkptyrouter.c +0 -0
  300. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/forkptyrouter/uwsgiplugin.py +0 -0
  301. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/gccgo/gccgo_plugin.c +0 -0
  302. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/gccgo/uwsgi.go +0 -0
  303. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/gccgo/uwsgiplugin.py +0 -0
  304. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/geoip/geoip.c +0 -0
  305. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/geoip/uwsgiplugin.py +0 -0
  306. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/gevent/gevent.c +0 -0
  307. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/gevent/gevent.h +0 -0
  308. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/gevent/hooks.c +0 -0
  309. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/gevent/uwsgiplugin.py +0 -0
  310. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/glusterfs/uwsgiplugin.py +0 -0
  311. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/graylog2/graylog2_plugin.c +0 -0
  312. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/graylog2/uwsgiplugin.py +0 -0
  313. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/greenlet/greenlet.c +0 -0
  314. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/greenlet/uwsgiplugin.py +0 -0
  315. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/gridfs/gridfs.cc +0 -0
  316. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/gridfs/plugin.c +0 -0
  317. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/gridfs/uwsgiplugin.py +0 -0
  318. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/http/common.h +0 -0
  319. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/http/http.c +0 -0
  320. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/http/https.c +0 -0
  321. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/http/keepalive.c +0 -0
  322. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/http/spdy3.c +0 -0
  323. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/http/spdy3.h +0 -0
  324. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/http/uwsgiplugin.py +0 -0
  325. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/jvm/jvm.h +0 -0
  326. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/jvm/jvm_plugin.c +0 -0
  327. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/jvm/uwsgi.java +0 -0
  328. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/jvm/uwsgiplugin.py +0 -0
  329. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/jwsgi/jwsgi_plugin.c +0 -0
  330. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/jwsgi/uwsgiplugin.py +0 -0
  331. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/ldap/ldap.c +0 -0
  332. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/ldap/uwsgiplugin.py +0 -0
  333. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/legion_cache_fetch/legion_cache_fetch.c +0 -0
  334. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/legion_cache_fetch/uwsgiplugin.py +0 -0
  335. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/libffi/libffi.c +0 -0
  336. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/libffi/uwsgiplugin.py +0 -0
  337. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/libtcc/libtcc.c +0 -0
  338. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/libtcc/uwsgiplugin.py +0 -0
  339. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/logcrypto/logcrypto.c +0 -0
  340. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/logcrypto/uwsgiplugin.py +0 -0
  341. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/logfile/logfile.c +0 -0
  342. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/logfile/uwsgiplugin.py +0 -0
  343. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/logpipe/logpipe.c +0 -0
  344. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/logpipe/uwsgiplugin.py +0 -0
  345. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/logsocket/logsocket_plugin.c +0 -0
  346. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/logsocket/uwsgiplugin.py +0 -0
  347. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/logzmq/plugin.c +0 -0
  348. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/logzmq/uwsgiplugin.py +0 -0
  349. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/lua/lua_plugin.c +0 -0
  350. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/lua/uwsgiplugin.py +0 -0
  351. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/matheval/math.c +0 -0
  352. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/matheval/uwsgiplugin.py +0 -0
  353. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/mongodb/plugin.c +0 -0
  354. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/mongodb/uwsgiplugin.py +0 -0
  355. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/mongodblog/mongodblog_plugin.c +0 -0
  356. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/mongodblog/uwsgiplugin.py +0 -0
  357. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/mongrel2/mongrel2.c +0 -0
  358. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/mongrel2/uwsgiplugin.py +0 -0
  359. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/mono/mono_plugin.c +0 -0
  360. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/mono/uwsgi.cs +0 -0
  361. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/mono/uwsgiplugin.py +0 -0
  362. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/msgpack/msgpack.c +0 -0
  363. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/msgpack/uwsgiplugin.py +0 -0
  364. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/nagios/nagios.c +0 -0
  365. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/nagios/uwsgiplugin.py +0 -0
  366. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/notfound/notfound.c +0 -0
  367. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/notfound/uwsgiplugin.py +0 -0
  368. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/objc_gc/objc_gc.m +0 -0
  369. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/objc_gc/uwsgiplugin.py +0 -0
  370. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/pam/pam.c +0 -0
  371. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/pam/uwsgiplugin.py +0 -0
  372. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/php/common.h +0 -0
  373. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/php/session.c +0 -0
  374. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/ping/ping_plugin.c +0 -0
  375. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/ping/uwsgiplugin.py +0 -0
  376. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/psgi/psgi.h +0 -0
  377. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/psgi/psgi_loader.c +0 -0
  378. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/psgi/psgi_plugin.c +0 -0
  379. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/psgi/psgi_response.c +0 -0
  380. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/psgi/uwsgi_plmodule.c +0 -0
  381. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/psgi/uwsgiplugin.py +0 -0
  382. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/pty/pty.c +0 -0
  383. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/pty/uwsgiplugin.py +0 -0
  384. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/pypy/README +0 -0
  385. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/pypy/pypy_plugin.c +0 -0
  386. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/pypy/pypy_setup.py +0 -0
  387. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/pypy/uwsgiplugin.py +0 -0
  388. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/python/gil.c +0 -0
  389. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/python/profiler.c +0 -0
  390. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/python/pump_subhandler.c +0 -0
  391. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/python/pyutils.c +0 -0
  392. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/python/raw.c +0 -0
  393. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/python/symimporter.c +0 -0
  394. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/python/tracebacker.c +0 -0
  395. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/python/uwsgi_pymodule.c +0 -0
  396. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/python/uwsgi_python.h +0 -0
  397. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/python/uwsgiplugin.py +0 -0
  398. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/python/web3_subhandler.c +0 -0
  399. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/python/wsgi_handlers.c +0 -0
  400. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/python/wsgi_headers.c +0 -0
  401. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/python/wsgi_subhandler.c +0 -0
  402. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/pyuwsgi/pyuwsgi.c +0 -0
  403. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/pyuwsgi/uwsgiplugin.py +0 -0
  404. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/rack/rack_api.c +0 -0
  405. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/rack/rack_plugin.c +0 -0
  406. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/rack/uwsgi_rack.h +0 -0
  407. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/rack/uwsgiplugin.py +0 -0
  408. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/rados/rados.c +0 -0
  409. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/rados/uwsgiplugin.py +0 -0
  410. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/rawrouter/rawrouter.c +0 -0
  411. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/rawrouter/uwsgiplugin.py +0 -0
  412. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/rbthreads/rbthreads.c +0 -0
  413. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/rbthreads/uwsgiplugin.py +0 -0
  414. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/redislog/redislog_plugin.c +0 -0
  415. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/redislog/uwsgiplugin.py +0 -0
  416. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/ring/ring_plugin.c +0 -0
  417. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/ring/uwsgiplugin.py +0 -0
  418. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_access/router_access.c +0 -0
  419. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_access/uwsgiplugin.py +0 -0
  420. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_basicauth/router_basicauth.c +0 -0
  421. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_basicauth/uwsgiplugin.py +0 -0
  422. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_cache/router_cache.c +0 -0
  423. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_cache/uwsgiplugin.py +0 -0
  424. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_expires/expires.c +0 -0
  425. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_expires/uwsgiplugin.py +0 -0
  426. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_hash/router_hash.c +0 -0
  427. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_hash/uwsgiplugin.py +0 -0
  428. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_http/router_http.c +0 -0
  429. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_http/uwsgiplugin.py +0 -0
  430. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_memcached/router_memcached.c +0 -0
  431. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_memcached/uwsgiplugin.py +0 -0
  432. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_metrics/plugin.c +0 -0
  433. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_metrics/uwsgiplugin.py +0 -0
  434. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_radius/radius.c +0 -0
  435. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_radius/uwsgiplugin.py +0 -0
  436. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_redirect/router_redirect.c +0 -0
  437. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_redirect/uwsgiplugin.py +0 -0
  438. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_redis/router_redis.c +0 -0
  439. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_redis/uwsgiplugin.py +0 -0
  440. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_rewrite/router_rewrite.c +0 -0
  441. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_rewrite/uwsgiplugin.py +0 -0
  442. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_spnego/router_spnego.c +0 -0
  443. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_spnego/uwsgiplugin.py +0 -0
  444. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_static/router_static.c +0 -0
  445. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_static/uwsgiplugin.py +0 -0
  446. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_uwsgi/router_uwsgi.c +0 -0
  447. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_uwsgi/uwsgiplugin.py +0 -0
  448. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_xmldir/router_xmldir.c +0 -0
  449. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/router_xmldir/uwsgiplugin.py +0 -0
  450. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/rpc/rpc_plugin.c +0 -0
  451. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/rpc/uwsgiplugin.py +0 -0
  452. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/rrdtool/rrdtool.c +0 -0
  453. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/rrdtool/uwsgiplugin.py +0 -0
  454. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/rsyslog/rsyslog_plugin.c +0 -0
  455. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/rsyslog/uwsgiplugin.py +0 -0
  456. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/ruby19/uwsgiplugin.py +0 -0
  457. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/servlet/servlet_plugin.c +0 -0
  458. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/servlet/uwsgi_servlet.java +0 -0
  459. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/servlet/uwsgiplugin.py +0 -0
  460. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/signal/signal_plugin.c +0 -0
  461. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/signal/uwsgiplugin.py +0 -0
  462. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/spooler/spooler_plugin.c +0 -0
  463. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/spooler/uwsgiplugin.py +0 -0
  464. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/sqlite3/plugin.c +0 -0
  465. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/sqlite3/uwsgiplugin.py +0 -0
  466. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/ssi/ssi.c +0 -0
  467. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/ssi/uwsgiplugin.py +0 -0
  468. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/sslrouter/sslrouter.c +0 -0
  469. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/sslrouter/uwsgiplugin.py +0 -0
  470. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/stackless/stackless.c +0 -0
  471. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/stackless/uwsgiplugin.py +0 -0
  472. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/stats_pusher_file/plugin.c +0 -0
  473. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/stats_pusher_file/uwsgiplugin.py +0 -0
  474. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/stats_pusher_mongodb/plugin.c +0 -0
  475. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/stats_pusher_mongodb/stats_pusher_mongodb.cc +0 -0
  476. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/stats_pusher_mongodb/uwsgiplugin.py +0 -0
  477. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/stats_pusher_socket/plugin.c +0 -0
  478. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/stats_pusher_socket/uwsgiplugin.py +0 -0
  479. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/stats_pusher_statsd/plugin.c +0 -0
  480. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/stats_pusher_statsd/uwsgiplugin.py +0 -0
  481. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/symcall/symcall_plugin.c +0 -0
  482. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/symcall/uwsgiplugin.py +0 -0
  483. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/syslog/syslog_plugin.c +0 -0
  484. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/syslog/uwsgiplugin.py +0 -0
  485. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/systemd_logger/systemd_logger.c +0 -0
  486. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/systemd_logger/uwsgiplugin.py +0 -0
  487. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/tornado/tornado.c +0 -0
  488. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/tornado/uwsgiplugin.py +0 -0
  489. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/transformation_chunked/chunked.c +0 -0
  490. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/transformation_chunked/uwsgiplugin.py +0 -0
  491. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/transformation_gzip/gzip.c +0 -0
  492. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/transformation_gzip/uwsgiplugin.py +0 -0
  493. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/transformation_offload/offload.c +0 -0
  494. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/transformation_offload/uwsgiplugin.py +0 -0
  495. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/transformation_template/tt.c +0 -0
  496. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/transformation_template/uwsgiplugin.py +0 -0
  497. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/transformation_tofile/tofile.c +0 -0
  498. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/transformation_tofile/uwsgiplugin.py +0 -0
  499. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/transformation_toupper/toupper.c +0 -0
  500. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/transformation_toupper/uwsgiplugin.py +0 -0
  501. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/tuntap/common.c +0 -0
  502. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/tuntap/common.h +0 -0
  503. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/tuntap/firewall.c +0 -0
  504. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/tuntap/tuntap.c +0 -0
  505. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/tuntap/uwsgiplugin.py +0 -0
  506. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/ugreen/ugreen.c +0 -0
  507. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/ugreen/uwsgiplugin.py +0 -0
  508. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/v8/plugin.c +0 -0
  509. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/v8/uwsgiplugin.py +0 -0
  510. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/v8/v8_commonjs.cc +0 -0
  511. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/v8/v8_jsgi.cc +0 -0
  512. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/v8/v8_uwsgi.cc +0 -0
  513. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/v8/v8_uwsgi.h +0 -0
  514. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/webdav/uwsgiplugin.py +0 -0
  515. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/webdav/webdav.c +0 -0
  516. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/xattr/uwsgiplugin.py +0 -0
  517. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/xattr/xattr.c +0 -0
  518. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/xslt/uwsgiplugin.py +0 -0
  519. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/xslt/xslt.c +0 -0
  520. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/zabbix/plugin.c +0 -0
  521. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/zabbix/uwsgiplugin.py +0 -0
  522. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/zergpool/uwsgiplugin.py +0 -0
  523. {uwsgi-2.0.23 → uwsgi-2.0.25}/plugins/zergpool/zergpool.c +0 -0
  524. {uwsgi-2.0.23 → uwsgi-2.0.25}/proto/BUILD +0 -0
  525. {uwsgi-2.0.23 → uwsgi-2.0.25}/proto/base.c +0 -0
  526. {uwsgi-2.0.23 → uwsgi-2.0.25}/proto/fastcgi.c +0 -0
  527. {uwsgi-2.0.23 → uwsgi-2.0.25}/proto/http.c +0 -0
  528. {uwsgi-2.0.23 → uwsgi-2.0.25}/proto/puwsgi.c +0 -0
  529. {uwsgi-2.0.23 → uwsgi-2.0.25}/proto/scgi.c +0 -0
  530. {uwsgi-2.0.23 → uwsgi-2.0.25}/proto/uwsgi.c +0 -0
  531. {uwsgi-2.0.23 → uwsgi-2.0.25}/setup.cpyext.py +0 -0
  532. {uwsgi-2.0.23 → uwsgi-2.0.25}/setup.py +0 -0
  533. {uwsgi-2.0.23 → uwsgi-2.0.25}/setup.pyuwsgi.py +0 -0
  534. {uwsgi-2.0.23 → uwsgi-2.0.25}/t/cachebitmap.ini +0 -0
  535. {uwsgi-2.0.23 → uwsgi-2.0.25}/t/cachebitmap.py +0 -0
  536. {uwsgi-2.0.23 → uwsgi-2.0.25}/t/cachetest.py +0 -0
  537. {uwsgi-2.0.23 → uwsgi-2.0.25}/t/clojure/myapp.clj +0 -0
  538. {uwsgi-2.0.23 → uwsgi-2.0.25}/t/core/apps/read_body_and_send.pl +0 -0
  539. {uwsgi-2.0.23 → uwsgi-2.0.25}/t/core/read_body_and_send.pl +0 -0
  540. {uwsgi-2.0.23 → uwsgi-2.0.25}/t/core/url_sanitize.pl +0 -0
  541. {uwsgi-2.0.23 → uwsgi-2.0.25}/t/go/cachetest.go +0 -0
  542. {uwsgi-2.0.23 → uwsgi-2.0.25}/t/go/complextest.go +0 -0
  543. {uwsgi-2.0.23 → uwsgi-2.0.25}/t/go/uploadtest.go +0 -0
  544. {uwsgi-2.0.23 → uwsgi-2.0.25}/t/java/rpc.java +0 -0
  545. {uwsgi-2.0.23 → uwsgi-2.0.25}/t/lua/basic.lua +0 -0
  546. {uwsgi-2.0.23 → uwsgi-2.0.25}/t/mono/cache.aspx +0 -0
  547. {uwsgi-2.0.23 → uwsgi-2.0.25}/t/mules/mulebrain.py +0 -0
  548. {uwsgi-2.0.23 → uwsgi-2.0.25}/t/mules/reload.py +0 -0
  549. {uwsgi-2.0.23 → uwsgi-2.0.25}/t/mules/signal_management.py +0 -0
  550. {uwsgi-2.0.23 → uwsgi-2.0.25}/t/perl/active_workers_signal.pl +0 -0
  551. {uwsgi-2.0.23 → uwsgi-2.0.25}/t/perl/apps/input_with_offset.pl +0 -0
  552. {uwsgi-2.0.23 → uwsgi-2.0.25}/t/perl/test.psgi +0 -0
  553. {uwsgi-2.0.23 → uwsgi-2.0.25}/t/perl/test_benchmark.pl +0 -0
  554. {uwsgi-2.0.23 → uwsgi-2.0.25}/t/perl/test_harakiri.psgi +0 -0
  555. {uwsgi-2.0.23 → uwsgi-2.0.25}/t/perl/test_hello.psgi +0 -0
  556. {uwsgi-2.0.23 → uwsgi-2.0.25}/t/perl/test_input_with_offset.pl +0 -0
  557. {uwsgi-2.0.23 → uwsgi-2.0.25}/t/perl/test_post.psgi +0 -0
  558. {uwsgi-2.0.23 → uwsgi-2.0.25}/t/perl/test_sleepy.psgi +0 -0
  559. {uwsgi-2.0.23 → uwsgi-2.0.25}/t/perl/test_streaming.psgi +0 -0
  560. {uwsgi-2.0.23 → uwsgi-2.0.25}/t/pypy/t_continulet1.py +0 -0
  561. {uwsgi-2.0.23 → uwsgi-2.0.25}/t/pypy/t_continulet2.py +0 -0
  562. {uwsgi-2.0.23 → uwsgi-2.0.25}/t/python/forcecl.py +0 -0
  563. {uwsgi-2.0.23 → uwsgi-2.0.25}/t/python/manage_script_name/manage_script_name_test.ini +0 -0
  564. {uwsgi-2.0.23 → uwsgi-2.0.25}/t/python/manage_script_name/test_manage_script_name.py +0 -0
  565. {uwsgi-2.0.23 → uwsgi-2.0.25}/t/python/manage_script_name/useless_app.py +0 -0
  566. {uwsgi-2.0.23 → uwsgi-2.0.25}/t/python/spooler_decorators/spooler_decorator_test.ini +0 -0
  567. {uwsgi-2.0.23 → uwsgi-2.0.25}/t/python/spooler_decorators/spooler_decorator_tests.py +0 -0
  568. {uwsgi-2.0.23 → uwsgi-2.0.25}/t/python/spooler_decorators/spooler_handlers.py +0 -0
  569. {uwsgi-2.0.23 → uwsgi-2.0.25}/t/python/testba.py +0 -0
  570. {uwsgi-2.0.23 → uwsgi-2.0.25}/t/ring/README.md +0 -0
  571. {uwsgi-2.0.23 → uwsgi-2.0.25}/t/ring/config.ini +0 -0
  572. {uwsgi-2.0.23 → uwsgi-2.0.25}/t/ring/project.clj +0 -0
  573. {uwsgi-2.0.23 → uwsgi-2.0.25}/t/ring/src/uwsgi/ring/tests/app.clj +0 -0
  574. {uwsgi-2.0.23 → uwsgi-2.0.25}/t/ring/src/uwsgi/ring/tests/basic.clj +0 -0
  575. {uwsgi-2.0.23 → uwsgi-2.0.25}/t/ring/src/uwsgi/ring/tests/body.clj +0 -0
  576. {uwsgi-2.0.23 → uwsgi-2.0.25}/t/ring/src/uwsgi/ring/tests/simple.clj +0 -0
  577. {uwsgi-2.0.23 → uwsgi-2.0.25}/t/ring/src/uwsgi/ring/tests/upload.clj +0 -0
  578. {uwsgi-2.0.23 → uwsgi-2.0.25}/t/routing/auth.ini +0 -0
  579. {uwsgi-2.0.23 → uwsgi-2.0.25}/t/routing/errorlimiter.ini +0 -0
  580. {uwsgi-2.0.23 → uwsgi-2.0.25}/t/routing/limiter.ini +0 -0
  581. {uwsgi-2.0.23 → uwsgi-2.0.25}/t/sharedarea/bigranges.ini +0 -0
  582. {uwsgi-2.0.23 → uwsgi-2.0.25}/t/sharedarea/bigranges.py +0 -0
  583. {uwsgi-2.0.23 → uwsgi-2.0.25}/t/sharedarea/sharedarea_incdec.ini +0 -0
  584. {uwsgi-2.0.23 → uwsgi-2.0.25}/t/sharedarea/sharedarea_incdec.py +0 -0
  585. {uwsgi-2.0.23 → uwsgi-2.0.25}/t/spooler/read.py +0 -0
  586. {uwsgi-2.0.23 → uwsgi-2.0.25}/t/spooler/reload.py +0 -0
  587. {uwsgi-2.0.23 → uwsgi-2.0.25}/t/spooler/spooldir/.gitignore +0 -0
  588. {uwsgi-2.0.23 → uwsgi-2.0.25}/t/webdav/carddav.ini +0 -0
  589. {uwsgi-2.0.23 → uwsgi-2.0.25}/t/xslt/cd.xml +0 -0
  590. {uwsgi-2.0.23 → uwsgi-2.0.25}/t/xslt/cd.xml.xslt +0 -0
  591. {uwsgi-2.0.23 → uwsgi-2.0.25}/t/xslt/routex.ini +0 -0
  592. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/Responder.pm +0 -0
  593. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/__init__.py +0 -0
  594. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/badthread.py +0 -0
  595. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/badwrites.py +0 -0
  596. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/cpubound_async.py +0 -0
  597. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/cpubound_green.py +0 -0
  598. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/cpubound_stackless.py +0 -0
  599. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/deadlocks/main.py +0 -0
  600. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/deadlocks/master-nothreads.ini +0 -0
  601. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/deadlocks/master-singleinterpreter-threads-10workers.ini +0 -0
  602. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/deadlocks/master-singleinterpreter-threads-1worker.ini +0 -0
  603. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/deadlocks/master-threads-10workers.ini +0 -0
  604. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/deadlocks/master-threads-1worker.ini +0 -0
  605. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/deadlocks/nomaster-threads-10workers.ini +0 -0
  606. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/deadlocks/nomaster-threads-1worker.ini +0 -0
  607. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/deadlocks/sitecustomize.py +0 -0
  608. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/decoratortest.py +0 -0
  609. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/fileserve_async.py +0 -0
  610. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/gevent_spool.py +0 -0
  611. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/gh-deadlocks.sh +0 -0
  612. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/gh-python.sh +0 -0
  613. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/gh-rack.sh +0 -0
  614. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/gh-shared.sh +0 -0
  615. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/grunter.py +0 -0
  616. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/harakiri.py +0 -0
  617. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/iobound_async.py +0 -0
  618. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/iobound_async_unix.py +0 -0
  619. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/iobound_green.py +0 -0
  620. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/logger.py +0 -0
  621. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/mako_ugreen.py +0 -0
  622. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/mulefunc.py +0 -0
  623. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/multiapp.txt +0 -0
  624. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/myadmin.py +0 -0
  625. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/pgbound_async.py +0 -0
  626. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/picazzo.py +0 -0
  627. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/psycogreen_green.py +0 -0
  628. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/psycopg2_green.py +0 -0
  629. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/pump.py +0 -0
  630. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/queue.py +0 -0
  631. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/refcount.py +0 -0
  632. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/rpc.lua +0 -0
  633. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/rpc.py +0 -0
  634. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/runningthread.py +0 -0
  635. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/sendchunked.py +0 -0
  636. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/sharedarea.py +0 -0
  637. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/sig.lua +0 -0
  638. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/signals.py +0 -0
  639. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/sigwait.py +0 -0
  640. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/sleeping_async.py +0 -0
  641. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/sleeping_green.py +0 -0
  642. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/sleepthreadasync.py +0 -0
  643. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/slow.py +0 -0
  644. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/spoolme.py +0 -0
  645. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/static/test.txt +0 -0
  646. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/static/test2.txt +0 -0
  647. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/staticfile.py +0 -0
  648. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/streamer.psgi +0 -0
  649. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/t/static.pl +0 -0
  650. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/templates/queue.html +0 -0
  651. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/testapp.py +0 -0
  652. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/testfilewrapper.py +0 -0
  653. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/testgevent.py +0 -0
  654. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/testpy3.py +0 -0
  655. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/testrpc.py +0 -0
  656. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/testsignals.py +0 -0
  657. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/testworkers.py +0 -0
  658. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/testyieldnone.py +0 -0
  659. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/threads.py +0 -0
  660. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/travis.sh +0 -0
  661. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/ugevent.py +0 -0
  662. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/web3.py +0 -0
  663. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/websockets.py +0 -0
  664. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/websockets_chat.pl +0 -0
  665. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/websockets_chat.py +0 -0
  666. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/websockets_chat_async.py +0 -0
  667. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/websockets_chat_asyncio.py +0 -0
  668. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/websockets_echo.lua +0 -0
  669. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/websockets_echo.pl +0 -0
  670. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/websockets_echo.py +0 -0
  671. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/websockets_echo.ru +0 -0
  672. {uwsgi-2.0.23 → uwsgi-2.0.25}/tests/werkzeug_app.py +0 -0
  673. {uwsgi-2.0.23 → uwsgi-2.0.25}/uwsgi_main.c +0 -0
  674. {uwsgi-2.0.23 → uwsgi-2.0.25}/uwsgidecorators.py +0 -0
  675. {uwsgi-2.0.23 → uwsgi-2.0.25}/uwsgidsl.rb +0 -0
  676. {uwsgi-2.0.23 → uwsgi-2.0.25}/valgrind/README +0 -0
  677. {uwsgi-2.0.23 → uwsgi-2.0.25}/vassals/broodlord.ini +0 -0
  678. {uwsgi-2.0.23 → uwsgi-2.0.25}/vassals/cc.ini +0 -0
  679. {uwsgi-2.0.23 → uwsgi-2.0.25}/vassals/multi.xml +0 -0
  680. {uwsgi-2.0.23 → uwsgi-2.0.25}/vhosttest/flask001/app1.py +0 -0
  681. {uwsgi-2.0.23 → uwsgi-2.0.25}/vhosttest/flask002/app2.py +0 -0
  682. {uwsgi-2.0.23 → uwsgi-2.0.25}/vhosttest/flask003/app3.py +0 -0
  683. {uwsgi-2.0.23 → uwsgi-2.0.25}/vhosttest/flask004/app4.py +0 -0
  684. {uwsgi-2.0.23 → uwsgi-2.0.25}/vhosttest/flask005/app5.py +0 -0
  685. {uwsgi-2.0.23 → uwsgi-2.0.25}/vhosttest/nginx.conf +0 -0
@@ -10,6 +10,9 @@ 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"
@@ -17,6 +20,9 @@ jobs:
17
20
  - os: ubuntu-22.04
18
21
  php: "php8.1"
19
22
  php-config: "php-config8.1"
23
+ exclude:
24
+ - os: ubuntu-20.04
25
+ cc: "clang"
20
26
 
21
27
  runs-on: ${{ matrix.os }}
22
28
 
@@ -29,7 +35,7 @@ jobs:
29
35
  run: |
30
36
  sudo apt update -qq
31
37
  sudo apt install --no-install-recommends -qqyf python3-dev \
32
- libxml2-dev libpcre3-dev libcap2-dev \
38
+ libxml2-dev ${{ matrix.libpcre }} libcap2-dev \
33
39
  libargon2-0-dev libsodium-dev \
34
40
  ${{ matrix.php }}-dev lib${{ matrix.php }}-embed \
35
41
  liblua5.1-0-dev ruby-dev \
@@ -43,16 +49,16 @@ jobs:
43
49
  libcurl4-openssl-dev \
44
50
  openjdk-11-jdk libgloox-dev gccgo \
45
51
  cli-common-dev mono-devel mono-mcs uuid-dev \
46
- curl check
47
- - uses: actions/checkout@v2
48
- - name: Build kitchensink uWSGI binary
49
- run: UWSGICONFIG_PHPPATH=${{ matrix.php-config }} /usr/bin/python3 uwsgiconfig.py --build travis
52
+ curl check ${{ matrix.cc == 'clang' && 'clang' || '' }}
53
+ - uses: actions/checkout@v4
54
+ - name: Build kitchensink uWSGI binary with gcc or default with clang
55
+ run: CC=${{ matrix.cc }} UWSGICONFIG_PHPPATH=${{ matrix.php-config }} /usr/bin/python3 uwsgiconfig.py --build ${{ matrix.cc == 'gcc' && 'travis' || '' }}
50
56
  - name: Build uWSGI binary
51
57
  run: |
52
- /usr/bin/python3 uwsgiconfig.py --build base
58
+ CC=${{ matrix.cc }} /usr/bin/python3 uwsgiconfig.py --build base
53
59
  - name: Build cgi plugin
54
60
  run: |
55
- /usr/bin/python3 uwsgiconfig.py --plugin plugins/cgi base
61
+ CC=${{ matrix.cc }} /usr/bin/python3 uwsgiconfig.py --plugin plugins/cgi base
56
62
  - name: Build dummy plugin
57
63
  run: |
58
- /usr/bin/python3 uwsgiconfig.py --plugin plugins/dummy base
64
+ CC=${{ matrix.cc }} /usr/bin/python3 uwsgiconfig.py --plugin plugins/dummy base
@@ -21,13 +21,13 @@ 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)
28
28
  run: |
29
29
  sudo apt install --no-install-recommends -qqyf python${{ matrix.python-version }}-distutils \
30
- - uses: actions/checkout@v2
30
+ - uses: actions/checkout@v4
31
31
  - name: Run unit tests
32
32
  if: matrix.test-suite == 'unittest'
33
33
  run: make tests
@@ -61,7 +61,7 @@ jobs:
61
61
  sudo apt install --no-install-recommends -qqyf python3-dev \
62
62
  libpcre3-dev libjansson-dev libcap2-dev ruby2.7-dev \
63
63
  curl check
64
- - uses: actions/checkout@v2
64
+ - uses: actions/checkout@v4
65
65
  - name: Run unit tests
66
66
  run: make tests
67
67
  - name: Build uWSGI binary
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 1.0
2
2
  Name: uWSGI
3
- Version: 2.0.23
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) {
@@ -737,6 +737,12 @@ void uwsgi_cache_fix(struct uwsgi_cache *uc) {
737
737
  if (uci->expires && (!next_scan || next_scan > uci->expires)) {
738
738
  next_scan = uci->expires;
739
739
  }
740
+ if (!uc->lru_head && !uci->lru_prev) {
741
+ uc->lru_head = i;
742
+ }
743
+ if (!uc->lru_tail && !uci->lru_next) {
744
+ uc->lru_tail = i;
745
+ }
740
746
  restored++;
741
747
  }
742
748
  else {
@@ -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);
@@ -87,8 +87,6 @@ void uwsgi_ini_config(char *file, char *magic_table[]) {
87
87
  char *key;
88
88
  char *val;
89
89
 
90
- int lines = 1;
91
-
92
90
  char *section_asked = "uwsgi";
93
91
  char *colon;
94
92
  int got_section = 0;
@@ -130,7 +128,6 @@ void uwsgi_ini_config(char *file, char *magic_table[]) {
130
128
  if (ini_line == NULL) {
131
129
  break;
132
130
  }
133
- lines++;
134
131
 
135
132
  // skip empty line
136
133
  key = ini_lstrip(ini);
@@ -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) {
@@ -707,7 +707,7 @@ void uwsgi_logit_simple(struct wsgi_request *wsgi_req) {
707
707
  }
708
708
 
709
709
  if (uwsgi.logging_options.memory_report == 1) {
710
- rlen = snprintf(mempkt, 4096, "{address space usage: %lld bytes/%lluMB} {rss usage: %llu bytes/%lluMB} ", (unsigned long long) uwsgi.workers[uwsgi.mywid].vsz_size, (unsigned long long) uwsgi.workers[uwsgi.mywid].vsz_size / 1024 / 1024,
710
+ rlen = snprintf(mempkt, 4096, "{address space usage: %llu bytes/%lluMB} {rss usage: %llu bytes/%lluMB} ", (unsigned long long) uwsgi.workers[uwsgi.mywid].vsz_size, (unsigned long long) uwsgi.workers[uwsgi.mywid].vsz_size / 1024 / 1024,
711
711
  (unsigned long long) uwsgi.workers[uwsgi.mywid].rss_size, (unsigned long long) uwsgi.workers[uwsgi.mywid].rss_size / 1024 / 1024);
712
712
  logvec[logvecpos].iov_base = mempkt;
713
713
  logvec[logvecpos].iov_len = rlen;
@@ -749,7 +749,7 @@ void get_memusage(uint64_t * rss, uint64_t * vsz) {
749
749
  int i;
750
750
  procfile = fopen("/proc/self/stat", "r");
751
751
  if (procfile) {
752
- i = fscanf(procfile, "%*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %llu %lld", (unsigned long long *) vsz, (unsigned long long *) rss);
752
+ i = fscanf(procfile, "%*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %llu %llu", (unsigned long long *) vsz, (unsigned long long *) rss);
753
753
  if (i != 2) {
754
754
  uwsgi_log("warning: invalid record in /proc/self/stat\n");
755
755
  } else {
@@ -763,7 +763,7 @@ void get_memusage(uint64_t * rss, uint64_t * vsz) {
763
763
  int i;
764
764
  procfile = fopen("/proc/self/stat", "r");
765
765
  if (procfile) {
766
- i = fscanf(procfile, "%*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %llu %lld", (unsigned long long *) vsz, (unsigned long long *) rss);
766
+ i = fscanf(procfile, "%*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %*s %llu %llu", (unsigned long long *) vsz, (unsigned long long *) rss);
767
767
  if (i != 2) {
768
768
  uwsgi_log("warning: invalid record in /proc/self/stat\n");
769
769
  }
@@ -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) {
@@ -253,7 +253,7 @@ static void master_check_listen_queue() {
253
253
  uint64_t backlog = 0;
254
254
  struct uwsgi_socket *uwsgi_sock = uwsgi.sockets;
255
255
  while(uwsgi_sock) {
256
- if (uwsgi_sock->family == AF_INET) {
256
+ if (uwsgi_sock->family == AF_INET || uwsgi_sock->family == AF_INET6) {
257
257
  get_tcp_info(uwsgi_sock);
258
258
  }
259
259
  #ifdef __linux__
@@ -180,7 +180,7 @@ done:
180
180
 
181
181
  }
182
182
 
183
- int uwsgi_master_check_harakiri(int w, int c, int harakiri) {
183
+ int uwsgi_master_check_harakiri(int w, int c, time_t harakiri) {
184
184
  /**
185
185
  * Triggers a harakiri when the following conditions are met:
186
186
  * - harakiri timeout > current time
@@ -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);