uWSGI 2.0.20__tar.gz → 2.0.22__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.20 → uwsgi-2.0.22}/.github/workflows/compile-test.yml +11 -6
  2. uwsgi-2.0.22/.github/workflows/test.yml +75 -0
  3. {uwsgi-2.0.20 → uwsgi-2.0.22}/PKG-INFO +1 -1
  4. uwsgi-2.0.22/README +13 -0
  5. {uwsgi-2.0.20 → uwsgi-2.0.22}/apache2/mod_proxy_uwsgi.c +35 -13
  6. uwsgi-2.0.22/buildconf/travis.ini +3 -0
  7. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/init.c +2 -0
  8. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/master_checks.c +45 -10
  9. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/master_utils.c +28 -2
  10. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/metrics.c +4 -4
  11. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/mount.c +4 -0
  12. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/utils.c +2 -3
  13. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/uwsgi.c +3 -0
  14. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/coroae/uwsgiplugin.py +1 -1
  15. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/gccgo/uwsgiplugin.py +4 -2
  16. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/gevent/gevent.h +1 -1
  17. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/jvm/uwsgiplugin.py +16 -12
  18. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/mono/uwsgiplugin.py +6 -4
  19. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/php/php_plugin.c +49 -36
  20. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/python/profiler.c +20 -5
  21. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/python/python_plugin.c +101 -16
  22. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/python/uwsgi_python.h +17 -0
  23. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/python/uwsgiplugin.py +2 -0
  24. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/python/wsgi_subhandler.c +16 -15
  25. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/rack/rack_api.c +56 -56
  26. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/rack/rack_plugin.c +12 -8
  27. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/rack/uwsgiplugin.py +2 -0
  28. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/ruby19/uwsgiplugin.py +3 -1
  29. {uwsgi-2.0.20 → uwsgi-2.0.22}/setup.py +2 -0
  30. uwsgi-2.0.22/tests/deadlocks/main.py +4 -0
  31. uwsgi-2.0.22/tests/deadlocks/master-nothreads.ini +6 -0
  32. uwsgi-2.0.22/tests/deadlocks/master-singleinterpreter-threads-10workers.ini +7 -0
  33. uwsgi-2.0.22/tests/deadlocks/master-singleinterpreter-threads-1worker.ini +7 -0
  34. uwsgi-2.0.22/tests/deadlocks/master-threads-10workers.ini +6 -0
  35. uwsgi-2.0.22/tests/deadlocks/master-threads-1worker.ini +6 -0
  36. uwsgi-2.0.22/tests/deadlocks/nomaster-threads-10workers.ini +6 -0
  37. uwsgi-2.0.22/tests/deadlocks/nomaster-threads-1worker.ini +6 -0
  38. uwsgi-2.0.22/tests/deadlocks/sitecustomize.py +14 -0
  39. uwsgi-2.0.22/tests/gh-deadlocks.sh +12 -0
  40. uwsgi-2.0.22/tests/gh-python.sh +12 -0
  41. uwsgi-2.0.22/tests/gh-rack.sh +12 -0
  42. uwsgi-2.0.22/tests/gh-shared.sh +108 -0
  43. uwsgi-2.0.22/tests/harakiri.py +25 -0
  44. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/travis.sh +22 -3
  45. {uwsgi-2.0.20 → uwsgi-2.0.22}/uwsgi.gemspec +1 -1
  46. {uwsgi-2.0.20 → uwsgi-2.0.22}/uwsgi.h +9 -1
  47. {uwsgi-2.0.20 → uwsgi-2.0.22}/uwsgiconfig.py +32 -34
  48. uwsgi-2.0.20/.github/workflows/test.yml +0 -57
  49. uwsgi-2.0.20/README +0 -5
  50. uwsgi-2.0.20/buildconf/travis.ini +0 -3
  51. {uwsgi-2.0.20 → uwsgi-2.0.22}/.gitignore +0 -0
  52. {uwsgi-2.0.20 → uwsgi-2.0.22}/CONTRIBUTORS +0 -0
  53. {uwsgi-2.0.20 → uwsgi-2.0.22}/INSTALL +0 -0
  54. {uwsgi-2.0.20 → uwsgi-2.0.22}/LICENSE +0 -0
  55. {uwsgi-2.0.20 → uwsgi-2.0.22}/Makefile +0 -0
  56. {uwsgi-2.0.20 → uwsgi-2.0.22}/apache2/mod_Ruwsgi.c +0 -0
  57. {uwsgi-2.0.20 → uwsgi-2.0.22}/apache2/mod_uwsgi.c +0 -0
  58. {uwsgi-2.0.20 → uwsgi-2.0.22}/attach.py +0 -0
  59. {uwsgi-2.0.20 → uwsgi-2.0.22}/bin/uwsgi +0 -0
  60. {uwsgi-2.0.20 → uwsgi-2.0.22}/buildconf/all.ini +0 -0
  61. {uwsgi-2.0.20 → uwsgi-2.0.22}/buildconf/asyncio.ini +0 -0
  62. {uwsgi-2.0.20 → uwsgi-2.0.22}/buildconf/base.ini +0 -0
  63. {uwsgi-2.0.20 → uwsgi-2.0.22}/buildconf/cgi.ini +0 -0
  64. {uwsgi-2.0.20 → uwsgi-2.0.22}/buildconf/core.ini +0 -0
  65. {uwsgi-2.0.20 → uwsgi-2.0.22}/buildconf/coroae.ini +0 -0
  66. {uwsgi-2.0.20 → uwsgi-2.0.22}/buildconf/coverity.ini +0 -0
  67. {uwsgi-2.0.20 → uwsgi-2.0.22}/buildconf/default.ini +0 -0
  68. {uwsgi-2.0.20 → uwsgi-2.0.22}/buildconf/django.ini +0 -0
  69. {uwsgi-2.0.20 → uwsgi-2.0.22}/buildconf/embedded.ini +0 -0
  70. {uwsgi-2.0.20 → uwsgi-2.0.22}/buildconf/erlang.ini +0 -0
  71. {uwsgi-2.0.20 → uwsgi-2.0.22}/buildconf/gccgo.ini +0 -0
  72. {uwsgi-2.0.20 → uwsgi-2.0.22}/buildconf/gevent.ini +0 -0
  73. {uwsgi-2.0.20 → uwsgi-2.0.22}/buildconf/glusterfs.ini +0 -0
  74. {uwsgi-2.0.20 → uwsgi-2.0.22}/buildconf/gridfs.ini +0 -0
  75. {uwsgi-2.0.20 → uwsgi-2.0.22}/buildconf/jwsgi.ini +0 -0
  76. {uwsgi-2.0.20 → uwsgi-2.0.22}/buildconf/lib.ini +0 -0
  77. {uwsgi-2.0.20 → uwsgi-2.0.22}/buildconf/lua.ini +0 -0
  78. {uwsgi-2.0.20 → uwsgi-2.0.22}/buildconf/luap.ini +0 -0
  79. {uwsgi-2.0.20 → uwsgi-2.0.22}/buildconf/minimal.ini +0 -0
  80. {uwsgi-2.0.20 → uwsgi-2.0.22}/buildconf/modular.ini +0 -0
  81. {uwsgi-2.0.20 → uwsgi-2.0.22}/buildconf/mono.ini +0 -0
  82. {uwsgi-2.0.20 → uwsgi-2.0.22}/buildconf/nolang.ini +0 -0
  83. {uwsgi-2.0.20 → uwsgi-2.0.22}/buildconf/package.ini +0 -0
  84. {uwsgi-2.0.20 → uwsgi-2.0.22}/buildconf/php.ini +0 -0
  85. {uwsgi-2.0.20 → uwsgi-2.0.22}/buildconf/plonly.ini +0 -0
  86. {uwsgi-2.0.20 → uwsgi-2.0.22}/buildconf/ppa.ini +0 -0
  87. {uwsgi-2.0.20 → uwsgi-2.0.22}/buildconf/psgi.ini +0 -0
  88. {uwsgi-2.0.20 → uwsgi-2.0.22}/buildconf/pyerl.ini +0 -0
  89. {uwsgi-2.0.20 → uwsgi-2.0.22}/buildconf/pylua.ini +0 -0
  90. {uwsgi-2.0.20 → uwsgi-2.0.22}/buildconf/pyonly.ini +0 -0
  91. {uwsgi-2.0.20 → uwsgi-2.0.22}/buildconf/pypy.ini +0 -0
  92. {uwsgi-2.0.20 → uwsgi-2.0.22}/buildconf/pypyonly.ini +0 -0
  93. {uwsgi-2.0.20 → uwsgi-2.0.22}/buildconf/pyring.ini +0 -0
  94. {uwsgi-2.0.20 → uwsgi-2.0.22}/buildconf/pyuwsgi.ini +0 -0
  95. {uwsgi-2.0.20 → uwsgi-2.0.22}/buildconf/pyuwsginossl.ini +0 -0
  96. {uwsgi-2.0.20 → uwsgi-2.0.22}/buildconf/rack.ini +0 -0
  97. {uwsgi-2.0.20 → uwsgi-2.0.22}/buildconf/rados.ini +0 -0
  98. {uwsgi-2.0.20 → uwsgi-2.0.22}/buildconf/rbonly.ini +0 -0
  99. {uwsgi-2.0.20 → uwsgi-2.0.22}/buildconf/ring.ini +0 -0
  100. {uwsgi-2.0.20 → uwsgi-2.0.22}/buildconf/ruby2.ini +0 -0
  101. {uwsgi-2.0.20 → uwsgi-2.0.22}/buildconf/servlet.ini +0 -0
  102. {uwsgi-2.0.20 → uwsgi-2.0.22}/buildconf/unbit.ini +0 -0
  103. {uwsgi-2.0.20 → uwsgi-2.0.22}/buildconf/unbitstaff.ini +0 -0
  104. {uwsgi-2.0.20 → uwsgi-2.0.22}/buildconf/uwsgi.it.ini +0 -0
  105. {uwsgi-2.0.20 → uwsgi-2.0.22}/buildconf/v8.ini +0 -0
  106. {uwsgi-2.0.20 → uwsgi-2.0.22}/contrib/Uwsgi.pm +0 -0
  107. {uwsgi-2.0.20 → uwsgi-2.0.22}/contrib/binder.pl +0 -0
  108. {uwsgi-2.0.20 → uwsgi-2.0.22}/contrib/centos_init_script +0 -0
  109. {uwsgi-2.0.20 → uwsgi-2.0.22}/contrib/cgi_python.c +0 -0
  110. {uwsgi-2.0.20 → uwsgi-2.0.22}/contrib/cryptologger.rb +0 -0
  111. {uwsgi-2.0.20 → uwsgi-2.0.22}/contrib/emperormon.ru +0 -0
  112. {uwsgi-2.0.20 → uwsgi-2.0.22}/contrib/fdconf.pl +0 -0
  113. {uwsgi-2.0.20 → uwsgi-2.0.22}/contrib/graphite_uwsgi.py +0 -0
  114. {uwsgi-2.0.20 → uwsgi-2.0.22}/contrib/launchd/it.unbit.uwsgi.emperor.plist +0 -0
  115. {uwsgi-2.0.20 → uwsgi-2.0.22}/contrib/launchd/it.unbit.uwsgi.plist +0 -0
  116. {uwsgi-2.0.20 → uwsgi-2.0.22}/contrib/loadapp.pl +0 -0
  117. {uwsgi-2.0.20 → uwsgi-2.0.22}/contrib/pypy/uwsgi_pypy_greenlets.py +0 -0
  118. {uwsgi-2.0.20 → uwsgi-2.0.22}/contrib/pyuwsgi.py +0 -0
  119. {uwsgi-2.0.20 → uwsgi-2.0.22}/contrib/runuwsgi.py +0 -0
  120. {uwsgi-2.0.20 → uwsgi-2.0.22}/contrib/securesubscribe.pl +0 -0
  121. {uwsgi-2.0.20 → uwsgi-2.0.22}/contrib/spoolqueue/producer.py +0 -0
  122. {uwsgi-2.0.20 → uwsgi-2.0.22}/contrib/spoolqueue/tasks.py +0 -0
  123. {uwsgi-2.0.20 → uwsgi-2.0.22}/contrib/spoolqueue/tasksconsumer.py +0 -0
  124. {uwsgi-2.0.20 → uwsgi-2.0.22}/contrib/subscribe.pl +0 -0
  125. {uwsgi-2.0.20 → uwsgi-2.0.22}/contrib/twuwsgi.py +0 -0
  126. {uwsgi-2.0.20 → uwsgi-2.0.22}/contrib/upstart/emperor.conf +0 -0
  127. {uwsgi-2.0.20 → uwsgi-2.0.22}/contrib/upstart/uwsgi.conf +0 -0
  128. {uwsgi-2.0.20 → uwsgi-2.0.22}/contrib/upython +0 -0
  129. {uwsgi-2.0.20 → uwsgi-2.0.22}/contrib/urack.rb +0 -0
  130. {uwsgi-2.0.20 → uwsgi-2.0.22}/contrib/uwsgi-cache-monitor.py +0 -0
  131. {uwsgi-2.0.20 → uwsgi-2.0.22}/contrib/uwsgi.erl +0 -0
  132. {uwsgi-2.0.20 → uwsgi-2.0.22}/contrib/uwsgi.java +0 -0
  133. {uwsgi-2.0.20 → uwsgi-2.0.22}/contrib/uwsgi.rb +0 -0
  134. {uwsgi-2.0.20 → uwsgi-2.0.22}/contrib/uwsgi_client.c +0 -0
  135. {uwsgi-2.0.20 → uwsgi-2.0.22}/contrib/uwsgi_dynamic_client.c +0 -0
  136. {uwsgi-2.0.20 → uwsgi-2.0.22}/contrib/uwsgisubscribers.ru +0 -0
  137. {uwsgi-2.0.20 → uwsgi-2.0.22}/contrib/xinetd_uwsgi +0 -0
  138. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/alarm.c +0 -0
  139. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/async.c +0 -0
  140. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/buffer.c +0 -0
  141. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/cache.c +0 -0
  142. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/chunked.c +0 -0
  143. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/clang_fake.c +0 -0
  144. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/clock.c +0 -0
  145. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/config.c +0 -0
  146. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/cookie.c +0 -0
  147. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/cron.c +0 -0
  148. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/daemons.c +0 -0
  149. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/emperor.c +0 -0
  150. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/errors.c +0 -0
  151. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/event.c +0 -0
  152. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/exceptions.c +0 -0
  153. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/fifo.c +0 -0
  154. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/fsmon.c +0 -0
  155. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/gateway.c +0 -0
  156. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/hash.c +0 -0
  157. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/hooks.c +0 -0
  158. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/ini.c +0 -0
  159. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/io.c +0 -0
  160. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/json.c +0 -0
  161. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/legion.c +0 -0
  162. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/lock.c +0 -0
  163. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/logging. +0 -0
  164. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/logging.c +0 -0
  165. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/loop.c +0 -0
  166. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/master.c +0 -0
  167. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/master_events.c +0 -0
  168. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/mule.c +0 -0
  169. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/notify.c +0 -0
  170. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/offload.c +2 -2
  171. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/plugins.c +0 -0
  172. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/plugins_builder.c +0 -0
  173. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/progress.c +0 -0
  174. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/protocol.c +0 -0
  175. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/querystring.c +0 -0
  176. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/queue.c +0 -0
  177. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/rb_timers.c +0 -0
  178. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/reader.c +0 -0
  179. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/regexp.c +0 -0
  180. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/routing.c +0 -0
  181. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/rpc.c +0 -0
  182. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/sendfile.c +0 -0
  183. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/setup_utils.c +0 -0
  184. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/sharedarea.c +0 -0
  185. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/signal.c +0 -0
  186. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/skel.c +0 -0
  187. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/snmp.c +0 -0
  188. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/socket.c +0 -0
  189. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/spooler.c +0 -0
  190. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/ssl.c +0 -0
  191. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/static.c +0 -0
  192. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/stats.c +0 -0
  193. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/storage.c +0 -0
  194. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/strings.c +0 -0
  195. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/subscription.c +0 -0
  196. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/timebomb.c +0 -0
  197. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/transformations.c +0 -0
  198. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/websockets.c +0 -0
  199. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/writer.c +0 -0
  200. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/xmlconf.c +0 -0
  201. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/yaml.c +0 -0
  202. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/zeus.c +0 -0
  203. {uwsgi-2.0.20 → uwsgi-2.0.22}/core/zlib.c +0 -0
  204. {uwsgi-2.0.20 → uwsgi-2.0.22}/examples/bootstrap.py +0 -0
  205. {uwsgi-2.0.20 → uwsgi-2.0.22}/examples/bootstrap2.py +0 -0
  206. {uwsgi-2.0.20 → uwsgi-2.0.22}/examples/bootstrap3.py +0 -0
  207. {uwsgi-2.0.20 → uwsgi-2.0.22}/examples/bootstrap4.py +0 -0
  208. {uwsgi-2.0.20 → uwsgi-2.0.22}/examples/bootstrap5.py +0 -0
  209. {uwsgi-2.0.20 → uwsgi-2.0.22}/examples/config.lua +0 -0
  210. {uwsgi-2.0.20 → uwsgi-2.0.22}/examples/config.ru +0 -0
  211. {uwsgi-2.0.20 → uwsgi-2.0.22}/examples/config17.ru +0 -0
  212. {uwsgi-2.0.20 → uwsgi-2.0.22}/examples/config2.lua +0 -0
  213. {uwsgi-2.0.20 → uwsgi-2.0.22}/examples/config2.ru +0 -0
  214. {uwsgi-2.0.20 → uwsgi-2.0.22}/examples/config30.ru +0 -0
  215. {uwsgi-2.0.20 → uwsgi-2.0.22}/examples/corostream.pl +0 -0
  216. {uwsgi-2.0.20 → uwsgi-2.0.22}/examples/debug.ini +0 -0
  217. {uwsgi-2.0.20 → uwsgi-2.0.22}/examples/fibers.ru +0 -0
  218. {uwsgi-2.0.20 → uwsgi-2.0.22}/examples/fibers.yml +0 -0
  219. {uwsgi-2.0.20 → uwsgi-2.0.22}/examples/flaskpost.py +0 -0
  220. {uwsgi-2.0.20 → uwsgi-2.0.22}/examples/heavytest.ini +0 -0
  221. {uwsgi-2.0.20 → uwsgi-2.0.22}/examples/heavytest.py +0 -0
  222. {uwsgi-2.0.20 → uwsgi-2.0.22}/examples/info_uwsgi.php +0 -0
  223. {uwsgi-2.0.20 → uwsgi-2.0.22}/examples/logic.ini +0 -0
  224. {uwsgi-2.0.20 → uwsgi-2.0.22}/examples/mega.xml +0 -0
  225. {uwsgi-2.0.20 → uwsgi-2.0.22}/examples/mjpeg_stream.py +0 -0
  226. {uwsgi-2.0.20 → uwsgi-2.0.22}/examples/mojoapp.pl +0 -0
  227. {uwsgi-2.0.20 → uwsgi-2.0.22}/examples/multi.ini +0 -0
  228. {uwsgi-2.0.20 → uwsgi-2.0.22}/examples/multi.xml +0 -0
  229. {uwsgi-2.0.20 → uwsgi-2.0.22}/examples/multiapp.py +0 -0
  230. {uwsgi-2.0.20 → uwsgi-2.0.22}/examples/protected.ini +0 -0
  231. {uwsgi-2.0.20 → uwsgi-2.0.22}/examples/router.lua +0 -0
  232. {uwsgi-2.0.20 → uwsgi-2.0.22}/examples/simple_app.py +0 -0
  233. {uwsgi-2.0.20 → uwsgi-2.0.22}/examples/simple_app_wsgi2.py +0 -0
  234. {uwsgi-2.0.20 → uwsgi-2.0.22}/examples/simple_logger.py +0 -0
  235. {uwsgi-2.0.20 → uwsgi-2.0.22}/examples/sites.xml +0 -0
  236. {uwsgi-2.0.20 → uwsgi-2.0.22}/examples/sputnik.ws +0 -0
  237. {uwsgi-2.0.20 → uwsgi-2.0.22}/examples/staticfilesnmp.py +0 -0
  238. {uwsgi-2.0.20 → uwsgi-2.0.22}/examples/taskqueue.py +0 -0
  239. {uwsgi-2.0.20 → uwsgi-2.0.22}/examples/uwsgi.xml +0 -0
  240. {uwsgi-2.0.20 → uwsgi-2.0.22}/examples/uwsgirouter.py +0 -0
  241. {uwsgi-2.0.20 → uwsgi-2.0.22}/examples/uwsgirouter2.py +0 -0
  242. {uwsgi-2.0.20 → uwsgi-2.0.22}/examples/uwsgirouter3.py +0 -0
  243. {uwsgi-2.0.20 → uwsgi-2.0.22}/examples/uwsgirouter4.py +0 -0
  244. {uwsgi-2.0.20 → uwsgi-2.0.22}/examples/uwsgirouter5.py +0 -0
  245. {uwsgi-2.0.20 → uwsgi-2.0.22}/examples/uwsgistatus.py +0 -0
  246. {uwsgi-2.0.20 → uwsgi-2.0.22}/examples/welcome.ini +0 -0
  247. {uwsgi-2.0.20 → uwsgi-2.0.22}/examples/welcome.py +0 -0
  248. {uwsgi-2.0.20 → uwsgi-2.0.22}/examples/welcome3.py +0 -0
  249. {uwsgi-2.0.20 → uwsgi-2.0.22}/examples/werkzeug.js +0 -0
  250. {uwsgi-2.0.20 → uwsgi-2.0.22}/examples/werkzeug.yml +0 -0
  251. {uwsgi-2.0.20 → uwsgi-2.0.22}/examples/werkzeug_strict.yml +0 -0
  252. {uwsgi-2.0.20 → uwsgi-2.0.22}/examples/xmlindex-html.xsl +0 -0
  253. {uwsgi-2.0.20 → uwsgi-2.0.22}/examples/xmlindex.ini +0 -0
  254. {uwsgi-2.0.20 → uwsgi-2.0.22}/examples/zmqgevent.ini +0 -0
  255. {uwsgi-2.0.20 → uwsgi-2.0.22}/ext/uwsgi/extconf.rb +0 -0
  256. {uwsgi-2.0.20 → uwsgi-2.0.22}/install.sh +0 -0
  257. {uwsgi-2.0.20 → uwsgi-2.0.22}/lib/linux_ns.c +0 -0
  258. {uwsgi-2.0.20 → uwsgi-2.0.22}/lib/netlink.c +0 -0
  259. {uwsgi-2.0.20 → uwsgi-2.0.22}/lib/sun_fixes.c +0 -0
  260. {uwsgi-2.0.20 → uwsgi-2.0.22}/logo_uWSGI.png +0 -0
  261. {uwsgi-2.0.20 → uwsgi-2.0.22}/logo_uWSGI.svg +0 -0
  262. {uwsgi-2.0.20 → uwsgi-2.0.22}/mongrel2-uwsgi.conf +0 -0
  263. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/airbrake/airbrake_plugin.c +0 -0
  264. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/airbrake/uwsgiplugin.py +0 -0
  265. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/alarm_curl/alarm_curl_plugin.c +0 -0
  266. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/alarm_curl/uwsgiplugin.py +0 -0
  267. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/alarm_speech/alarm_speech.m +0 -0
  268. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/alarm_speech/uwsgiplugin.py +0 -0
  269. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/alarm_xmpp/alarm_xmpp_plugin.c +0 -0
  270. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/alarm_xmpp/gloox.cc +0 -0
  271. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/alarm_xmpp/uwsgiplugin.py +0 -0
  272. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/asyncio/asyncio.c +0 -0
  273. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/asyncio/uwsgiplugin.py +0 -0
  274. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/cache/cache.c +0 -0
  275. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/cache/uwsgiplugin.py +0 -0
  276. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/carbon/carbon.c +0 -0
  277. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/carbon/uwsgiplugin.py +0 -0
  278. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/cgi/cgi_plugin.c +0 -0
  279. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/cgi/uwsgiplugin.py +0 -0
  280. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/cheaper_backlog2/cheaper_backlog2.c +0 -0
  281. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/cheaper_backlog2/uwsgiplugin.py +0 -0
  282. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/cheaper_busyness/cheaper_busyness.c +0 -0
  283. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/cheaper_busyness/uwsgiplugin.py +0 -0
  284. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/clock_monotonic/clock_monotonic.c +0 -0
  285. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/clock_monotonic/uwsgiplugin.py +0 -0
  286. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/clock_realtime/clock_realtime.c +0 -0
  287. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/clock_realtime/uwsgiplugin.py +0 -0
  288. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/corerouter/corerouter.c +0 -0
  289. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/corerouter/cr.h +0 -0
  290. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/corerouter/cr_common.c +0 -0
  291. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/corerouter/cr_map.c +0 -0
  292. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/corerouter/uwsgiplugin.py +0 -0
  293. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/coroae/coroae.c +0 -0
  294. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/cplusplus/base.cc +0 -0
  295. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/cplusplus/plugin.c +0 -0
  296. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/cplusplus/uwsgiplugin.py +0 -0
  297. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/curl_cron/curl_cron.c +0 -0
  298. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/curl_cron/uwsgiplugin.py +0 -0
  299. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/dumbloop/dumb.c +0 -0
  300. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/dumbloop/uwsgiplugin.py +0 -0
  301. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/dummy/dummy.c +0 -0
  302. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/dummy/uwsgiplugin.py +0 -0
  303. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/echo/echo_plugin.c +0 -0
  304. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/echo/uwsgiplugin.py +0 -0
  305. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/emperor_amqp/amqp.c +0 -0
  306. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/emperor_amqp/emperor_amqp.c +0 -0
  307. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/emperor_amqp/uwsgiplugin.py +0 -0
  308. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/emperor_mongodb/emperor_mongodb.cc +0 -0
  309. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/emperor_mongodb/plugin.c +0 -0
  310. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/emperor_mongodb/uwsgiplugin.py +0 -0
  311. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/emperor_pg/emperor_pg.c +0 -0
  312. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/emperor_pg/uwsgiplugin.py +0 -0
  313. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/emperor_zeromq/emperor_zeromq.c +0 -0
  314. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/emperor_zeromq/uwsgiplugin.py +0 -0
  315. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/example/example_plugin.c +0 -0
  316. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/example/uwsgiplugin.py +0 -0
  317. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/exception_log/exception_log.c +0 -0
  318. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/exception_log/uwsgiplugin.py +0 -0
  319. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/fastrouter/fastrouter.c +0 -0
  320. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/fastrouter/uwsgiplugin.py +0 -0
  321. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/fiber/fiber.c +0 -0
  322. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/fiber/uwsgiplugin.py +0 -0
  323. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/forkptyrouter/forkptyrouter.c +0 -0
  324. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/forkptyrouter/uwsgiplugin.py +0 -0
  325. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/gccgo/gccgo_plugin.c +0 -0
  326. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/gccgo/uwsgi.go +0 -0
  327. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/geoip/geoip.c +0 -0
  328. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/geoip/uwsgiplugin.py +0 -0
  329. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/gevent/gevent.c +0 -0
  330. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/gevent/hooks.c +0 -0
  331. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/gevent/uwsgiplugin.py +0 -0
  332. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/glusterfs/glusterfs.c +0 -0
  333. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/glusterfs/uwsgiplugin.py +0 -0
  334. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/graylog2/graylog2_plugin.c +0 -0
  335. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/graylog2/uwsgiplugin.py +0 -0
  336. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/greenlet/greenlet.c +0 -0
  337. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/greenlet/uwsgiplugin.py +0 -0
  338. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/gridfs/gridfs.cc +0 -0
  339. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/gridfs/plugin.c +0 -0
  340. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/gridfs/uwsgiplugin.py +0 -0
  341. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/http/common.h +0 -0
  342. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/http/http.c +0 -0
  343. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/http/https.c +0 -0
  344. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/http/keepalive.c +0 -0
  345. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/http/spdy3.c +0 -0
  346. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/http/spdy3.h +0 -0
  347. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/http/uwsgiplugin.py +0 -0
  348. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/jvm/jvm.h +0 -0
  349. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/jvm/jvm_plugin.c +0 -0
  350. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/jvm/uwsgi.java +0 -0
  351. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/jwsgi/jwsgi_plugin.c +0 -0
  352. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/jwsgi/uwsgiplugin.py +0 -0
  353. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/ldap/ldap.c +0 -0
  354. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/ldap/uwsgiplugin.py +0 -0
  355. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/legion_cache_fetch/legion_cache_fetch.c +0 -0
  356. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/legion_cache_fetch/uwsgiplugin.py +0 -0
  357. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/libffi/libffi.c +0 -0
  358. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/libffi/uwsgiplugin.py +0 -0
  359. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/libtcc/libtcc.c +0 -0
  360. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/libtcc/uwsgiplugin.py +0 -0
  361. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/logcrypto/logcrypto.c +0 -0
  362. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/logcrypto/uwsgiplugin.py +0 -0
  363. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/logfile/logfile.c +0 -0
  364. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/logfile/uwsgiplugin.py +0 -0
  365. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/logpipe/logpipe.c +0 -0
  366. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/logpipe/uwsgiplugin.py +0 -0
  367. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/logsocket/logsocket_plugin.c +0 -0
  368. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/logsocket/uwsgiplugin.py +0 -0
  369. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/logzmq/plugin.c +0 -0
  370. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/logzmq/uwsgiplugin.py +0 -0
  371. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/lua/lua_plugin.c +0 -0
  372. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/lua/uwsgiplugin.py +0 -0
  373. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/matheval/math.c +0 -0
  374. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/matheval/uwsgiplugin.py +0 -0
  375. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/mongodb/plugin.c +0 -0
  376. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/mongodb/uwsgiplugin.py +0 -0
  377. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/mongodblog/mongodblog_plugin.c +0 -0
  378. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/mongodblog/uwsgiplugin.py +0 -0
  379. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/mongrel2/mongrel2.c +0 -0
  380. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/mongrel2/uwsgiplugin.py +0 -0
  381. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/mono/mono_plugin.c +0 -0
  382. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/mono/uwsgi.cs +0 -0
  383. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/msgpack/msgpack.c +0 -0
  384. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/msgpack/uwsgiplugin.py +0 -0
  385. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/nagios/nagios.c +0 -0
  386. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/nagios/uwsgiplugin.py +0 -0
  387. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/notfound/notfound.c +0 -0
  388. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/notfound/uwsgiplugin.py +0 -0
  389. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/objc_gc/objc_gc.m +0 -0
  390. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/objc_gc/uwsgiplugin.py +0 -0
  391. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/pam/pam.c +0 -0
  392. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/pam/uwsgiplugin.py +0 -0
  393. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/php/common.h +0 -0
  394. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/php/session.c +0 -0
  395. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/php/uwsgiplugin.py +0 -0
  396. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/ping/ping_plugin.c +0 -0
  397. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/ping/uwsgiplugin.py +0 -0
  398. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/psgi/psgi.h +0 -0
  399. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/psgi/psgi_loader.c +0 -0
  400. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/psgi/psgi_plugin.c +0 -0
  401. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/psgi/psgi_response.c +0 -0
  402. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/psgi/uwsgi_plmodule.c +0 -0
  403. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/psgi/uwsgiplugin.py +0 -0
  404. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/pty/pty.c +0 -0
  405. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/pty/uwsgiplugin.py +0 -0
  406. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/pypy/README +0 -0
  407. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/pypy/pypy_plugin.c +0 -0
  408. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/pypy/pypy_setup.py +0 -0
  409. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/pypy/uwsgiplugin.py +0 -0
  410. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/python/gil.c +0 -0
  411. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/python/pump_subhandler.c +0 -0
  412. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/python/pyloader.c +0 -0
  413. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/python/pyutils.c +0 -0
  414. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/python/raw.c +0 -0
  415. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/python/symimporter.c +0 -0
  416. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/python/tracebacker.c +0 -0
  417. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/python/uwsgi_pymodule.c +0 -0
  418. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/python/web3_subhandler.c +0 -0
  419. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/python/wsgi_handlers.c +0 -0
  420. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/python/wsgi_headers.c +0 -0
  421. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/pyuwsgi/pyuwsgi.c +0 -0
  422. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/pyuwsgi/uwsgiplugin.py +0 -0
  423. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/rack/uwsgi_rack.h +0 -0
  424. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/rados/rados.c +0 -0
  425. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/rados/uwsgiplugin.py +0 -0
  426. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/rawrouter/rawrouter.c +0 -0
  427. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/rawrouter/uwsgiplugin.py +0 -0
  428. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/rbthreads/rbthreads.c +0 -0
  429. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/rbthreads/uwsgiplugin.py +0 -0
  430. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/redislog/redislog_plugin.c +0 -0
  431. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/redislog/uwsgiplugin.py +0 -0
  432. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/ring/ring_plugin.c +0 -0
  433. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/ring/uwsgiplugin.py +0 -0
  434. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/router_access/router_access.c +0 -0
  435. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/router_access/uwsgiplugin.py +0 -0
  436. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/router_basicauth/router_basicauth.c +0 -0
  437. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/router_basicauth/uwsgiplugin.py +0 -0
  438. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/router_cache/router_cache.c +0 -0
  439. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/router_cache/uwsgiplugin.py +0 -0
  440. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/router_expires/expires.c +0 -0
  441. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/router_expires/uwsgiplugin.py +0 -0
  442. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/router_hash/router_hash.c +0 -0
  443. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/router_hash/uwsgiplugin.py +0 -0
  444. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/router_http/router_http.c +0 -0
  445. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/router_http/uwsgiplugin.py +0 -0
  446. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/router_memcached/router_memcached.c +0 -0
  447. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/router_memcached/uwsgiplugin.py +0 -0
  448. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/router_metrics/plugin.c +0 -0
  449. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/router_metrics/uwsgiplugin.py +0 -0
  450. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/router_radius/radius.c +0 -0
  451. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/router_radius/uwsgiplugin.py +0 -0
  452. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/router_redirect/router_redirect.c +0 -0
  453. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/router_redirect/uwsgiplugin.py +0 -0
  454. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/router_redis/router_redis.c +0 -0
  455. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/router_redis/uwsgiplugin.py +0 -0
  456. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/router_rewrite/router_rewrite.c +0 -0
  457. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/router_rewrite/uwsgiplugin.py +0 -0
  458. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/router_spnego/router_spnego.c +0 -0
  459. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/router_spnego/uwsgiplugin.py +0 -0
  460. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/router_static/router_static.c +0 -0
  461. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/router_static/uwsgiplugin.py +0 -0
  462. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/router_uwsgi/router_uwsgi.c +0 -0
  463. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/router_uwsgi/uwsgiplugin.py +0 -0
  464. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/router_xmldir/router_xmldir.c +0 -0
  465. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/router_xmldir/uwsgiplugin.py +0 -0
  466. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/rpc/rpc_plugin.c +0 -0
  467. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/rpc/uwsgiplugin.py +0 -0
  468. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/rrdtool/rrdtool.c +0 -0
  469. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/rrdtool/uwsgiplugin.py +0 -0
  470. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/rsyslog/rsyslog_plugin.c +0 -0
  471. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/rsyslog/uwsgiplugin.py +0 -0
  472. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/servlet/servlet_plugin.c +0 -0
  473. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/servlet/uwsgi_servlet.java +0 -0
  474. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/servlet/uwsgiplugin.py +0 -0
  475. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/signal/signal_plugin.c +0 -0
  476. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/signal/uwsgiplugin.py +0 -0
  477. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/spooler/spooler_plugin.c +0 -0
  478. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/spooler/uwsgiplugin.py +0 -0
  479. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/sqlite3/plugin.c +0 -0
  480. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/sqlite3/uwsgiplugin.py +0 -0
  481. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/ssi/ssi.c +0 -0
  482. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/ssi/uwsgiplugin.py +0 -0
  483. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/sslrouter/sslrouter.c +0 -0
  484. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/sslrouter/uwsgiplugin.py +0 -0
  485. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/stackless/stackless.c +0 -0
  486. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/stackless/uwsgiplugin.py +0 -0
  487. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/stats_pusher_file/plugin.c +0 -0
  488. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/stats_pusher_file/uwsgiplugin.py +0 -0
  489. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/stats_pusher_mongodb/plugin.c +0 -0
  490. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/stats_pusher_mongodb/stats_pusher_mongodb.cc +0 -0
  491. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/stats_pusher_mongodb/uwsgiplugin.py +0 -0
  492. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/stats_pusher_socket/plugin.c +0 -0
  493. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/stats_pusher_socket/uwsgiplugin.py +0 -0
  494. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/stats_pusher_statsd/plugin.c +0 -0
  495. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/stats_pusher_statsd/uwsgiplugin.py +0 -0
  496. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/symcall/symcall_plugin.c +0 -0
  497. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/symcall/uwsgiplugin.py +0 -0
  498. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/syslog/syslog_plugin.c +0 -0
  499. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/syslog/uwsgiplugin.py +0 -0
  500. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/systemd_logger/systemd_logger.c +0 -0
  501. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/systemd_logger/uwsgiplugin.py +0 -0
  502. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/tornado/tornado.c +0 -0
  503. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/tornado/uwsgiplugin.py +0 -0
  504. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/transformation_chunked/chunked.c +0 -0
  505. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/transformation_chunked/uwsgiplugin.py +0 -0
  506. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/transformation_gzip/gzip.c +0 -0
  507. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/transformation_gzip/uwsgiplugin.py +0 -0
  508. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/transformation_offload/offload.c +0 -0
  509. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/transformation_offload/uwsgiplugin.py +0 -0
  510. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/transformation_template/tt.c +0 -0
  511. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/transformation_template/uwsgiplugin.py +0 -0
  512. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/transformation_tofile/tofile.c +0 -0
  513. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/transformation_tofile/uwsgiplugin.py +0 -0
  514. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/transformation_toupper/toupper.c +0 -0
  515. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/transformation_toupper/uwsgiplugin.py +0 -0
  516. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/tuntap/common.c +0 -0
  517. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/tuntap/common.h +0 -0
  518. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/tuntap/firewall.c +0 -0
  519. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/tuntap/tuntap.c +0 -0
  520. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/tuntap/uwsgiplugin.py +0 -0
  521. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/ugreen/ugreen.c +0 -0
  522. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/ugreen/uwsgiplugin.py +0 -0
  523. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/v8/plugin.c +0 -0
  524. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/v8/uwsgiplugin.py +0 -0
  525. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/v8/v8_commonjs.cc +0 -0
  526. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/v8/v8_jsgi.cc +0 -0
  527. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/v8/v8_uwsgi.cc +0 -0
  528. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/v8/v8_uwsgi.h +0 -0
  529. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/webdav/uwsgiplugin.py +0 -0
  530. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/webdav/webdav.c +0 -0
  531. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/xattr/uwsgiplugin.py +0 -0
  532. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/xattr/xattr.c +0 -0
  533. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/xslt/uwsgiplugin.py +0 -0
  534. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/xslt/xslt.c +0 -0
  535. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/zabbix/plugin.c +0 -0
  536. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/zabbix/uwsgiplugin.py +0 -0
  537. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/zergpool/uwsgiplugin.py +0 -0
  538. {uwsgi-2.0.20 → uwsgi-2.0.22}/plugins/zergpool/zergpool.c +0 -0
  539. {uwsgi-2.0.20 → uwsgi-2.0.22}/proto/BUILD +0 -0
  540. {uwsgi-2.0.20 → uwsgi-2.0.22}/proto/base.c +0 -0
  541. {uwsgi-2.0.20 → uwsgi-2.0.22}/proto/fastcgi.c +0 -0
  542. {uwsgi-2.0.20 → uwsgi-2.0.22}/proto/http.c +0 -0
  543. {uwsgi-2.0.20 → uwsgi-2.0.22}/proto/puwsgi.c +0 -0
  544. {uwsgi-2.0.20 → uwsgi-2.0.22}/proto/scgi.c +0 -0
  545. {uwsgi-2.0.20 → uwsgi-2.0.22}/proto/uwsgi.c +0 -0
  546. {uwsgi-2.0.20 → uwsgi-2.0.22}/setup.cpyext.py +0 -0
  547. {uwsgi-2.0.20 → uwsgi-2.0.22}/setup.pyuwsgi.py +0 -0
  548. {uwsgi-2.0.20 → uwsgi-2.0.22}/t/cachebitmap.ini +0 -0
  549. {uwsgi-2.0.20 → uwsgi-2.0.22}/t/cachebitmap.py +0 -0
  550. {uwsgi-2.0.20 → uwsgi-2.0.22}/t/cachetest.py +0 -0
  551. {uwsgi-2.0.20 → uwsgi-2.0.22}/t/clojure/myapp.clj +0 -0
  552. {uwsgi-2.0.20 → uwsgi-2.0.22}/t/core/apps/read_body_and_send.pl +0 -0
  553. {uwsgi-2.0.20 → uwsgi-2.0.22}/t/core/read_body_and_send.pl +0 -0
  554. {uwsgi-2.0.20 → uwsgi-2.0.22}/t/core/url_sanitize.pl +0 -0
  555. {uwsgi-2.0.20 → uwsgi-2.0.22}/t/go/cachetest.go +0 -0
  556. {uwsgi-2.0.20 → uwsgi-2.0.22}/t/go/complextest.go +0 -0
  557. {uwsgi-2.0.20 → uwsgi-2.0.22}/t/go/uploadtest.go +0 -0
  558. {uwsgi-2.0.20 → uwsgi-2.0.22}/t/java/rpc.java +0 -0
  559. {uwsgi-2.0.20 → uwsgi-2.0.22}/t/lua/basic.lua +0 -0
  560. {uwsgi-2.0.20 → uwsgi-2.0.22}/t/mono/cache.aspx +0 -0
  561. {uwsgi-2.0.20 → uwsgi-2.0.22}/t/mules/mulebrain.py +0 -0
  562. {uwsgi-2.0.20 → uwsgi-2.0.22}/t/mules/reload.py +0 -0
  563. {uwsgi-2.0.20 → uwsgi-2.0.22}/t/mules/signal_management.py +0 -0
  564. {uwsgi-2.0.20 → uwsgi-2.0.22}/t/perl/active_workers_signal.pl +0 -0
  565. {uwsgi-2.0.20 → uwsgi-2.0.22}/t/perl/apps/input_with_offset.pl +0 -0
  566. {uwsgi-2.0.20 → uwsgi-2.0.22}/t/perl/test.psgi +0 -0
  567. {uwsgi-2.0.20 → uwsgi-2.0.22}/t/perl/test_benchmark.pl +0 -0
  568. {uwsgi-2.0.20 → uwsgi-2.0.22}/t/perl/test_harakiri.psgi +0 -0
  569. {uwsgi-2.0.20 → uwsgi-2.0.22}/t/perl/test_hello.psgi +0 -0
  570. {uwsgi-2.0.20 → uwsgi-2.0.22}/t/perl/test_input_with_offset.pl +0 -0
  571. {uwsgi-2.0.20 → uwsgi-2.0.22}/t/perl/test_post.psgi +0 -0
  572. {uwsgi-2.0.20 → uwsgi-2.0.22}/t/perl/test_sleepy.psgi +0 -0
  573. {uwsgi-2.0.20 → uwsgi-2.0.22}/t/perl/test_streaming.psgi +0 -0
  574. {uwsgi-2.0.20 → uwsgi-2.0.22}/t/pypy/t_continulet1.py +0 -0
  575. {uwsgi-2.0.20 → uwsgi-2.0.22}/t/pypy/t_continulet2.py +0 -0
  576. {uwsgi-2.0.20 → uwsgi-2.0.22}/t/python/forcecl.py +0 -0
  577. {uwsgi-2.0.20 → uwsgi-2.0.22}/t/python/manage_script_name/manage_script_name_test.ini +0 -0
  578. {uwsgi-2.0.20 → uwsgi-2.0.22}/t/python/manage_script_name/test_manage_script_name.py +0 -0
  579. {uwsgi-2.0.20 → uwsgi-2.0.22}/t/python/manage_script_name/useless_app.py +0 -0
  580. {uwsgi-2.0.20 → uwsgi-2.0.22}/t/python/spooler_decorators/spooler_decorator_test.ini +0 -0
  581. {uwsgi-2.0.20 → uwsgi-2.0.22}/t/python/spooler_decorators/spooler_decorator_tests.py +0 -0
  582. {uwsgi-2.0.20 → uwsgi-2.0.22}/t/python/spooler_decorators/spooler_handlers.py +0 -0
  583. {uwsgi-2.0.20 → uwsgi-2.0.22}/t/python/testba.py +0 -0
  584. {uwsgi-2.0.20 → uwsgi-2.0.22}/t/ring/README.md +0 -0
  585. {uwsgi-2.0.20 → uwsgi-2.0.22}/t/ring/config.ini +0 -0
  586. {uwsgi-2.0.20 → uwsgi-2.0.22}/t/ring/project.clj +0 -0
  587. {uwsgi-2.0.20 → uwsgi-2.0.22}/t/ring/src/uwsgi/ring/tests/app.clj +0 -0
  588. {uwsgi-2.0.20 → uwsgi-2.0.22}/t/ring/src/uwsgi/ring/tests/basic.clj +0 -0
  589. {uwsgi-2.0.20 → uwsgi-2.0.22}/t/ring/src/uwsgi/ring/tests/body.clj +0 -0
  590. {uwsgi-2.0.20 → uwsgi-2.0.22}/t/ring/src/uwsgi/ring/tests/simple.clj +0 -0
  591. {uwsgi-2.0.20 → uwsgi-2.0.22}/t/ring/src/uwsgi/ring/tests/upload.clj +0 -0
  592. {uwsgi-2.0.20 → uwsgi-2.0.22}/t/routing/auth.ini +0 -0
  593. {uwsgi-2.0.20 → uwsgi-2.0.22}/t/routing/errorlimiter.ini +0 -0
  594. {uwsgi-2.0.20 → uwsgi-2.0.22}/t/routing/limiter.ini +0 -0
  595. {uwsgi-2.0.20 → uwsgi-2.0.22}/t/sharedarea/bigranges.ini +0 -0
  596. {uwsgi-2.0.20 → uwsgi-2.0.22}/t/sharedarea/bigranges.py +0 -0
  597. {uwsgi-2.0.20 → uwsgi-2.0.22}/t/sharedarea/sharedarea_incdec.ini +0 -0
  598. {uwsgi-2.0.20 → uwsgi-2.0.22}/t/sharedarea/sharedarea_incdec.py +0 -0
  599. {uwsgi-2.0.20 → uwsgi-2.0.22}/t/spooler/read.py +0 -0
  600. {uwsgi-2.0.20 → uwsgi-2.0.22}/t/spooler/reload.py +0 -0
  601. {uwsgi-2.0.20 → uwsgi-2.0.22}/t/spooler/spooldir/.gitignore +0 -0
  602. {uwsgi-2.0.20 → uwsgi-2.0.22}/t/webdav/carddav.ini +0 -0
  603. {uwsgi-2.0.20 → uwsgi-2.0.22}/t/xslt/cd.xml +0 -0
  604. {uwsgi-2.0.20 → uwsgi-2.0.22}/t/xslt/cd.xml.xslt +0 -0
  605. {uwsgi-2.0.20 → uwsgi-2.0.22}/t/xslt/routex.ini +0 -0
  606. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/Responder.pm +0 -0
  607. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/__init__.py +0 -0
  608. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/badthread.py +0 -0
  609. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/badwrites.py +0 -0
  610. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/cpubound_async.py +0 -0
  611. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/cpubound_green.py +0 -0
  612. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/cpubound_stackless.py +0 -0
  613. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/decoratortest.py +0 -0
  614. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/fileserve_async.py +0 -0
  615. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/gevent_spool.py +0 -0
  616. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/grunter.py +0 -0
  617. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/iobound_async.py +0 -0
  618. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/iobound_async_unix.py +0 -0
  619. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/iobound_green.py +0 -0
  620. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/logger.py +0 -0
  621. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/mako_ugreen.py +0 -0
  622. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/mulefunc.py +0 -0
  623. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/multiapp.txt +0 -0
  624. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/myadmin.py +0 -0
  625. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/pgbound_async.py +0 -0
  626. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/picazzo.py +0 -0
  627. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/psycogreen_green.py +0 -0
  628. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/psycopg2_green.py +0 -0
  629. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/pump.py +0 -0
  630. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/queue.py +0 -0
  631. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/refcount.py +0 -0
  632. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/rpc.lua +0 -0
  633. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/rpc.py +0 -0
  634. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/runningthread.py +0 -0
  635. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/sendchunked.py +0 -0
  636. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/sharedarea.py +0 -0
  637. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/sig.lua +0 -0
  638. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/signals.py +0 -0
  639. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/sigwait.py +0 -0
  640. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/sleeping_async.py +0 -0
  641. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/sleeping_green.py +0 -0
  642. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/sleepthreadasync.py +0 -0
  643. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/slow.py +0 -0
  644. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/spoolme.py +0 -0
  645. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/static/test.txt +0 -0
  646. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/static/test2.txt +0 -0
  647. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/staticfile.py +0 -0
  648. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/streamer.psgi +0 -0
  649. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/t/static.pl +0 -0
  650. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/templates/queue.html +0 -0
  651. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/testapp.py +0 -0
  652. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/testfilewrapper.py +0 -0
  653. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/testgevent.py +0 -0
  654. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/testpy3.py +0 -0
  655. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/testrpc.py +0 -0
  656. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/testsignals.py +0 -0
  657. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/testworkers.py +0 -0
  658. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/testyieldnone.py +0 -0
  659. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/threads.py +0 -0
  660. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/ugevent.py +0 -0
  661. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/web3.py +0 -0
  662. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/websockets.py +0 -0
  663. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/websockets_chat.pl +0 -0
  664. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/websockets_chat.py +0 -0
  665. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/websockets_chat_async.py +0 -0
  666. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/websockets_chat_asyncio.py +0 -0
  667. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/websockets_echo.lua +0 -0
  668. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/websockets_echo.pl +0 -0
  669. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/websockets_echo.py +0 -0
  670. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/websockets_echo.ru +0 -0
  671. {uwsgi-2.0.20 → uwsgi-2.0.22}/tests/werkzeug_app.py +0 -0
  672. {uwsgi-2.0.20 → uwsgi-2.0.22}/uwsgi_main.c +0 -0
  673. {uwsgi-2.0.20 → uwsgi-2.0.22}/uwsgidecorators.py +0 -0
  674. {uwsgi-2.0.20 → uwsgi-2.0.22}/uwsgidsl.rb +0 -0
  675. {uwsgi-2.0.20 → uwsgi-2.0.22}/valgrind/README +0 -0
  676. {uwsgi-2.0.20 → uwsgi-2.0.22}/valgrind/valgrind-generate-sups.sh +0 -0
  677. {uwsgi-2.0.20 → uwsgi-2.0.22}/vassals/broodlord.ini +0 -0
  678. {uwsgi-2.0.20 → uwsgi-2.0.22}/vassals/cc.ini +0 -0
  679. {uwsgi-2.0.20 → uwsgi-2.0.22}/vassals/multi.xml +0 -0
  680. {uwsgi-2.0.20 → uwsgi-2.0.22}/vhosttest/flask001/app1.py +0 -0
  681. {uwsgi-2.0.20 → uwsgi-2.0.22}/vhosttest/flask002/app2.py +0 -0
  682. {uwsgi-2.0.20 → uwsgi-2.0.22}/vhosttest/flask003/app3.py +0 -0
  683. {uwsgi-2.0.20 → uwsgi-2.0.22}/vhosttest/flask004/app4.py +0 -0
  684. {uwsgi-2.0.20 → uwsgi-2.0.22}/vhosttest/flask005/app5.py +0 -0
  685. {uwsgi-2.0.20 → uwsgi-2.0.22}/vhosttest/nginx.conf +0 -0
@@ -9,16 +9,21 @@ on:
9
9
  jobs:
10
10
  build:
11
11
 
12
- runs-on: ubuntu-18.04
12
+ runs-on: ubuntu-20.04
13
13
 
14
14
  steps:
15
+ - name: remove sury php ppa that does not ship libphpX.Y-embed
16
+ run: |
17
+ sudo add-apt-repository --remove ppa:ondrej/php
18
+ sudo apt remove php7.4-dev php7.4 php7.4-common
15
19
  - name: Install dependencies
16
20
  run: |
17
21
  sudo apt update -qq
18
- sudo apt install --no-install-recommends -qqyf python3.6-dev \
22
+ sudo apt install --no-install-recommends -qqyf python3.8-dev \
19
23
  libxml2-dev libpcre3-dev libcap2-dev \
20
- php7.2-dev libphp7.2-embed libargon2-0-dev libsodium-dev \
21
- liblua5.1-0-dev ruby2.5-dev \
24
+ libargon2-0-dev libsodium-dev \
25
+ php7.4-dev libphp7.4-embed \
26
+ liblua5.1-0-dev ruby2.7-dev \
22
27
  libjansson-dev libldap2-dev libpq-dev \
23
28
  libpam0g-dev libsqlite3-dev libyaml-dev \
24
29
  libzmq3-dev libmatheval-dev libperl-dev \
@@ -27,12 +32,12 @@ jobs:
27
32
  libboost-thread-dev libboost-filesystem-dev \
28
33
  libssl-dev libacl1-dev python-greenlet-dev \
29
34
  libcurl4-openssl-dev \
30
- openjdk-8-jdk libgloox-dev gccgo \
35
+ openjdk-11-jdk libgloox-dev gccgo \
31
36
  cli-common-dev mono-devel mono-mcs uuid-dev \
32
37
  curl check
33
38
  - uses: actions/checkout@v2
34
39
  - name: Build kitchensink uWSGI binary
35
- run: UWSGICONFIG_PHPPATH=php-config7.2 /usr/bin/python3 uwsgiconfig.py --build travis
40
+ run: UWSGICONFIG_PHPPATH=php-config7.4 /usr/bin/python3 uwsgiconfig.py --build travis
36
41
  - name: Build uWSGI binary
37
42
  run: |
38
43
  /usr/bin/python3 uwsgiconfig.py --build base
@@ -0,0 +1,75 @@
1
+ name: Test
2
+
3
+ on:
4
+ push:
5
+ branches: [ master, uwsgi-2.0 ]
6
+ pull_request:
7
+ branches: [ master, uwsgi-2.0 ]
8
+
9
+ jobs:
10
+ python:
11
+
12
+ runs-on: ubuntu-20.04
13
+ strategy:
14
+ matrix:
15
+ python-version: ["2.7", "3.6", "3.7", "3.8", "3.9", "3.10", "3.11"]
16
+ test-suite: [unittest, python, deadlocks]
17
+ steps:
18
+ - name: Add deadnakes ppa
19
+ run: sudo add-apt-repository ppa:deadsnakes/ppa -y
20
+ - name: Install dependencies
21
+ run: |
22
+ sudo apt update -qq
23
+ sudo apt install --no-install-recommends -qqyf python${{ matrix.python-version }}-dev \
24
+ libpcre3-dev libjansson-dev libcap2-dev \
25
+ curl check
26
+ - name: Install distutils
27
+ if: contains(fromJson('["3.6","3.7","3.8","3.9","3.10","3.11"]'), matrix.python-version)
28
+ run: |
29
+ sudo apt install --no-install-recommends -qqyf python${{ matrix.python-version }}-distutils \
30
+ - uses: actions/checkout@v2
31
+ - name: Run unit tests
32
+ if: matrix.test-suite == 'unittest'
33
+ run: make tests
34
+ - name: Build uWSGI binary
35
+ if: matrix.test-suite != 'unittest'
36
+ run: make
37
+ - name: Build python${{ matrix.python-version }} plugin
38
+ if: matrix.test-suite != 'unittest'
39
+ run: |
40
+ PYTHON_VERSION=${{ matrix.python-version }}
41
+ PYTHON_VERSION=python${PYTHON_VERSION//.}
42
+ /usr/bin/python${{ matrix.python-version }} -V
43
+ /usr/bin/python${{ matrix.python-version }} uwsgiconfig.py --plugin plugins/python base $PYTHON_VERSION
44
+ - name: run smoke tests
45
+ if: matrix.test-suite != 'unittest'
46
+ run: |
47
+ PYTHON_VERSION=${{ matrix.python-version }}
48
+ PYTHON_VERSION=python${PYTHON_VERSION//.}
49
+ ./tests/gh-${{ matrix.test-suite }}.sh ${PYTHON_VERSION}
50
+
51
+ rack:
52
+
53
+ runs-on: ubuntu-20.04
54
+ strategy:
55
+ matrix:
56
+ rack-version: ["270"]
57
+ steps:
58
+ - name: Install dependencies
59
+ run: |
60
+ sudo apt update -qq
61
+ sudo apt install --no-install-recommends -qqyf python3-dev \
62
+ libpcre3-dev libjansson-dev libcap2-dev ruby2.7-dev \
63
+ curl check
64
+ - uses: actions/checkout@v2
65
+ - name: Run unit tests
66
+ run: make tests
67
+ - name: Build uWSGI binary
68
+ run: make
69
+ - name: Build rack plugin
70
+ run: |
71
+ ruby -v
72
+ UWSGICONFIG_RUBYPATH=ruby /usr/bin/python uwsgiconfig.py --plugin plugins/rack base rack${{ matrix.rack-version }}
73
+ - name: run smoke tests
74
+ run: |
75
+ ./tests/gh-rack.sh rack${{ matrix.rack-version}}
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 1.0
2
2
  Name: uWSGI
3
- Version: 2.0.20
3
+ Version: 2.0.22
4
4
  Summary: The uWSGI server
5
5
  Home-page: https://uwsgi-docs.readthedocs.io/en/latest/
6
6
  Author: Unbit
uwsgi-2.0.22/README ADDED
@@ -0,0 +1,13 @@
1
+ The uWSGI project
2
+
3
+ For official documentation check: https://uwsgi-docs.readthedocs.io/en/latest/
4
+
5
+ Note: The project is in maintenance mode (only bugfixes and updates for new languages apis)
6
+
7
+ uWSGI development has been sponsored by:
8
+
9
+ http://unbit.com
10
+ https://www.pythonanywhere.com/
11
+ https://lincolnloop.com/
12
+ https://yourlabs.io/oss
13
+ https://fili.com
@@ -315,18 +315,16 @@ static int uwsgi_response(request_rec *r, proxy_conn_rec *backend, proxy_server_
315
315
  apr_bucket_brigade *pass_bb = apr_brigade_create(r->pool, c->bucket_alloc);
316
316
 
317
317
  len = ap_getline(buffer, sizeof(buffer), rp, 1);
318
-
319
318
  if (len <= 0) {
320
- // oops
319
+ /* invalid or empty */
321
320
  return HTTP_INTERNAL_SERVER_ERROR;
322
321
  }
323
-
324
322
  backend->worker->s->read += len;
325
-
326
- if (len >= sizeof(buffer)-1) {
327
- // oops
323
+ if ((apr_size_t)len >= sizeof(buffer)) {
324
+ /* too long */
328
325
  return HTTP_INTERNAL_SERVER_ERROR;
329
326
  }
327
+
330
328
  /* Position of http status code */
331
329
  int status_start;
332
330
  if (apr_date_checkmask(buffer, "HTTP/#.# ###*")) {
@@ -334,8 +332,8 @@ static int uwsgi_response(request_rec *r, proxy_conn_rec *backend, proxy_server_
334
332
  } else if (apr_date_checkmask(buffer, "HTTP/# ###*")) {
335
333
  status_start = 7;
336
334
  } else {
337
- // oops
338
- return HTTP_INTERNAL_SERVER_ERROR;
335
+ /* not HTTP */
336
+ return HTTP_BAD_GATEWAY;
339
337
  }
340
338
  int status_end = status_start + 3;
341
339
 
@@ -354,17 +352,41 @@ static int uwsgi_response(request_rec *r, proxy_conn_rec *backend, proxy_server_
354
352
  }
355
353
  r->status_line = apr_pstrdup(r->pool, &buffer[status_start]);
356
354
 
357
- // start parsing headers;
355
+ /* parse headers */
358
356
  while ((len = ap_getline(buffer, sizeof(buffer), rp, 1)) > 0) {
357
+ if ((apr_size_t)len >= sizeof(buffer)) {
358
+ /* too long */
359
+ len = -1;
360
+ break;
361
+ }
359
362
  value = strchr(buffer, ':');
360
- // invalid header skip
361
- if (!value) continue;
362
- *value = '\0';
363
- ++value;
363
+ if (!value) {
364
+ /* invalid header */
365
+ len = -1;
366
+ break;
367
+ }
368
+ *value++ = '\0';
369
+ if (*ap_scan_http_token(buffer)) {
370
+ /* invalid name */
371
+ len = -1;
372
+ break;
373
+ }
364
374
  while (apr_isspace(*value)) ++value;
365
375
  for (end = &value[strlen(value)-1]; end > value && apr_isspace(*end); --end) *end = '\0';
376
+ if (*ap_scan_http_field_content(value)) {
377
+ /* invalid value */
378
+ len = -1;
379
+ break;
380
+ }
366
381
  apr_table_add(r->headers_out, buffer, value);
367
382
  }
383
+ if (len < 0) {
384
+ /* Reset headers, but not to NULL because things below the chain expect
385
+ * this to be non NULL e.g. the ap_content_length_filter.
386
+ */
387
+ r->headers_out = apr_table_make(r->pool, 1);
388
+ return HTTP_BAD_GATEWAY;
389
+ }
368
390
 
369
391
  if ((buf = apr_table_get(r->headers_out, "Content-Type"))) {
370
392
  ap_set_content_type(r, apr_pstrdup(r->pool, buf));
@@ -0,0 +1,3 @@
1
+ [uwsgi]
2
+ main_plugin = psgi,rack,lua,python,gevent,php,cgi,pty,xslt,msgpack,geoip,pam,ldap,mono,jvm,ring,jwsgi,servlet,pypy,airbrake,alarm_curl,asyncio,cheaper_backlog2,clock_monotonic,clock_realtime,cplusplus,curl_cron,dumbloop,dummy,echo,emperor_amqp,emperor_pg,emperor_zeromq,example,exception_log,fiber,forkptyrouter,graylog2,legion_cache_fetch,libffi,logcrypto,logpipe,logzmq,matheval,notfound,rbthreads,router_access,router_radius,router_spnego,router_xmldir,sqlite3,ssi,stats_pusher_file,stats_pusher_statsd,tornado,transformation_toupper,tuntap,webdav,xattr,zabbix
3
+ inherit = base
@@ -197,6 +197,8 @@ void uwsgi_init_default() {
197
197
  uwsgi_master_fifo_prepare();
198
198
 
199
199
  uwsgi.notify_socket_fd = -1;
200
+
201
+ uwsgi.harakiri_graceful_signal = SIGTERM;
200
202
  }
201
203
 
202
204
  void uwsgi_setup_reload() {
@@ -180,22 +180,57 @@ done:
180
180
 
181
181
  }
182
182
 
183
+ int uwsgi_master_check_harakiri(int w, int c, int harakiri) {
184
+ /**
185
+ * Triggers a harakiri when the following conditions are met:
186
+ * - harakiri timeout > current time
187
+ * - listen queue pressure (ie backlog > harakiri_queue_threshold)
188
+ *
189
+ * The first harakiri attempt on a worker will be graceful if harakiri_graceful_timeout > 0,
190
+ * then the worker has harakiri_graceful_timeout seconds to shutdown cleanly, otherwise
191
+ * a second harakiri will trigger a SIGKILL
192
+ *
193
+ */
194
+ #ifdef __linux__
195
+ int backlog = uwsgi.shared->backlog;
196
+ #else
197
+ int backlog = 0;
198
+ #endif
199
+ if (harakiri == 0 || harakiri > (time_t) uwsgi.current_time) {
200
+ return 0;
201
+ }
202
+ // no pending harakiri for the worker and no backlog pressure, safe to skip
203
+ if (uwsgi.workers[w].pending_harakiri == 0 && backlog < uwsgi.harakiri_queue_threshold) {
204
+ uwsgi_log_verbose("HARAKIRI: Skipping harakiri on worker %d. Listen queue is smaller than the threshold (%d < %d)\n",
205
+ w, backlog, uwsgi.harakiri_queue_threshold);
206
+ return 0;
207
+ }
208
+
209
+ trigger_harakiri(w);
210
+ if (uwsgi.harakiri_graceful_timeout > 0) {
211
+ uwsgi.workers[w].harakiri = harakiri + uwsgi.harakiri_graceful_timeout;
212
+ uwsgi_log_verbose("HARAKIRI: graceful termination attempt on worker %d with signal %d. Next harakiri: %d\n",
213
+ w, uwsgi.harakiri_graceful_signal, uwsgi.workers[w].harakiri);
214
+ }
215
+ return 1;
216
+ }
217
+
183
218
  int uwsgi_master_check_workers_deadline() {
184
- int i;
219
+ int i,j;
185
220
  int ret = 0;
186
221
  for (i = 1; i <= uwsgi.numproc; i++) {
187
- /* first check for harakiri */
188
- if (uwsgi.workers[i].harakiri > 0) {
189
- if (uwsgi.workers[i].harakiri < (time_t) uwsgi.current_time) {
190
- trigger_harakiri(i);
222
+ for(j=0;j<uwsgi.cores;j++) {
223
+ /* first check for harakiri */
224
+ if (uwsgi_master_check_harakiri(i, j, uwsgi.workers[i].harakiri)) {
225
+ uwsgi_log_verbose("HARAKIRI triggered by worker %d core %d !!!\n", i, j);
191
226
  ret = 1;
227
+ break;
192
228
  }
193
- }
194
- /* then user-defined harakiri */
195
- if (uwsgi.workers[i].user_harakiri > 0) {
196
- if (uwsgi.workers[i].user_harakiri < (time_t) uwsgi.current_time) {
197
- trigger_harakiri(i);
229
+ /* then user-defined harakiri */
230
+ if (uwsgi_master_check_harakiri(i, j, uwsgi.workers[i].user_harakiri)) {
231
+ uwsgi_log_verbose("HARAKIRI (user) triggered by worker %d core %d !!!\n", i, j);
198
232
  ret = 1;
233
+ break;
199
234
  }
200
235
  }
201
236
  // then for evil memory checkers
@@ -692,9 +692,22 @@ int uwsgi_respawn_worker(int wid) {
692
692
  pthread_mutex_lock(&uwsgi.threaded_logger_lock);
693
693
  }
694
694
 
695
+
696
+ for (i = 0; i < 256; i++) {
697
+ if (uwsgi.p[i]->pre_uwsgi_fork) {
698
+ uwsgi.p[i]->pre_uwsgi_fork();
699
+ }
700
+ }
701
+
695
702
  pid_t pid = uwsgi_fork(uwsgi.workers[wid].name);
696
703
 
697
704
  if (pid == 0) {
705
+ for (i = 0; i < 256; i++) {
706
+ if (uwsgi.p[i]->post_uwsgi_fork) {
707
+ uwsgi.p[i]->post_uwsgi_fork(1);
708
+ }
709
+ }
710
+
698
711
  signal(SIGWINCH, worker_wakeup);
699
712
  signal(SIGTSTP, worker_wakeup);
700
713
  uwsgi.mywid = wid;
@@ -753,6 +766,12 @@ int uwsgi_respawn_worker(int wid) {
753
766
  uwsgi_error("fork()");
754
767
  }
755
768
  else {
769
+ for (i = 0; i < 256; i++) {
770
+ if (uwsgi.p[i]->post_uwsgi_fork) {
771
+ uwsgi.p[i]->post_uwsgi_fork(0);
772
+ }
773
+ }
774
+
756
775
  // the pid is set only in the master, as the worker should never use it
757
776
  uwsgi.workers[wid].pid = pid;
758
777
 
@@ -1542,7 +1561,10 @@ void uwsgi_register_cheaper_algo(char *name, int (*func) (int)) {
1542
1561
 
1543
1562
  void trigger_harakiri(int i) {
1544
1563
  int j;
1545
- uwsgi_log_verbose("*** HARAKIRI ON WORKER %d (pid: %d, try: %d) ***\n", i, uwsgi.workers[i].pid, uwsgi.workers[i].pending_harakiri + 1);
1564
+ uwsgi_log_verbose("*** HARAKIRI ON WORKER %d (pid: %d, try: %d, graceful: %s) ***\n", i,
1565
+ uwsgi.workers[i].pid,
1566
+ uwsgi.workers[i].pending_harakiri + 1,
1567
+ uwsgi.workers[i].pending_harakiri > 0 ? "no": "yes");
1546
1568
  if (uwsgi.harakiri_verbose) {
1547
1569
  #ifdef __linux__
1548
1570
  int proc_file;
@@ -1591,7 +1613,11 @@ void trigger_harakiri(int i) {
1591
1613
  }
1592
1614
 
1593
1615
  uwsgi_dump_worker(i, "HARAKIRI");
1594
- kill(uwsgi.workers[i].pid, SIGKILL);
1616
+ if (uwsgi.workers[i].pending_harakiri == 0 && uwsgi.harakiri_graceful_timeout > 0) {
1617
+ kill(uwsgi.workers[i].pid, uwsgi.harakiri_graceful_signal);
1618
+ } else {
1619
+ kill(uwsgi.workers[i].pid, SIGKILL);
1620
+ }
1595
1621
  if (!uwsgi.workers[i].pending_harakiri)
1596
1622
  uwsgi.workers[i].harakiri_count++;
1597
1623
  uwsgi.workers[i].pending_harakiri++;
@@ -703,16 +703,16 @@ int64_t uwsgi_metric_getn(char *name, size_t nlen, char *oid, size_t olen) {
703
703
 
704
704
  int uwsgi_metric_set_max(char *name, char *oid, int64_t value) {
705
705
  um_op;
706
- if (value > *um->value)
707
- *um->value = value;
706
+ if (value > *um->value)
707
+ *um->value = value;
708
708
  uwsgi_rwunlock(uwsgi.metrics_lock);
709
709
  return 0;
710
710
  }
711
711
 
712
712
  int uwsgi_metric_set_min(char *name, char *oid, int64_t value) {
713
713
  um_op;
714
- if ((value > um->initial_value || 0) && value < *um->value)
715
- *um->value = value;
714
+ if ((value > um->initial_value || 0) && value < *um->value)
715
+ *um->value = value;
716
716
  uwsgi_rwunlock(uwsgi.metrics_lock);
717
717
  return 0;
718
718
  }
@@ -106,6 +106,7 @@ uint64_t uwsgi_mount_flag(char *mflag) {
106
106
  }
107
107
 
108
108
  int uwsgi_mount(char *fs, char *what, char *where, char *flags, char *data) {
109
+ #if defined(__linux__) || defined(__FreeBSD__) || defined(__GNU_kFreeBSD__)
109
110
  #if defined(__FreeBSD__) || defined(__GNU_kFreeBSD__)
110
111
  struct iovec iov[6];
111
112
  #endif
@@ -142,11 +143,13 @@ parsed:
142
143
  iov[5].iov_len = strlen(what) + 1;
143
144
 
144
145
  return nmount(iov, 6, (int) mountflags);
146
+ #endif
145
147
  #endif
146
148
  return -1;
147
149
  }
148
150
 
149
151
  int uwsgi_umount(char *where, char *flags) {
152
+ #if defined(__linux__) || defined(__FreeBSD__) || defined(__GNU_kFreeBSD__)
150
153
  unsigned long mountflags = 0;
151
154
  if (!flags) goto parsed;
152
155
  char *mflags = uwsgi_str(flags);
@@ -195,6 +198,7 @@ unmountable:
195
198
  return umount2(where, mountflags);
196
199
  #elif defined(__FreeBSD__) || defined(__GNU_kFreeBSD__)
197
200
  return unmount(where, mountflags);
201
+ #endif
198
202
  #endif
199
203
  return -1;
200
204
  }
@@ -3671,6 +3671,7 @@ char *uwsgi_expand_path(char *dir, int dir_len, char *ptr) {
3671
3671
 
3672
3672
 
3673
3673
  void uwsgi_set_cpu_affinity() {
3674
+ #if defined(__linux__) || defined(__FreeBSD__) || defined(__GNU_kFreeBSD__)
3674
3675
  char buf[4096];
3675
3676
  int ret;
3676
3677
  int pos = 0;
@@ -3690,7 +3691,6 @@ void uwsgi_set_cpu_affinity() {
3690
3691
  #elif defined(__FreeBSD__)
3691
3692
  cpuset_t cpuset;
3692
3693
  #endif
3693
- #if defined(__linux__) || defined(__FreeBSD__) || defined(__GNU_kFreeBSD__)
3694
3694
  CPU_ZERO(&cpuset);
3695
3695
  int i;
3696
3696
  for (i = 0; i < uwsgi.cpu_affinity; i++) {
@@ -3705,7 +3705,6 @@ void uwsgi_set_cpu_affinity() {
3705
3705
  pos += ret;
3706
3706
  base_cpu++;
3707
3707
  }
3708
- #endif
3709
3708
  #if defined(__linux__) || defined(__GNU_kFreeBSD__)
3710
3709
  if (sched_setaffinity(0, sizeof(cpu_set_t), &cpuset)) {
3711
3710
  uwsgi_error("sched_setaffinity()");
@@ -3717,7 +3716,7 @@ void uwsgi_set_cpu_affinity() {
3717
3716
  #endif
3718
3717
  uwsgi_log("%s\n", buf);
3719
3718
  }
3720
-
3719
+ #endif
3721
3720
  }
3722
3721
 
3723
3722
  #ifdef UWSGI_ELF
@@ -81,6 +81,9 @@ static struct uwsgi_option uwsgi_base_options[] = {
81
81
  {"thunder-lock", no_argument, 0, "serialize accept() usage (if possible)", uwsgi_opt_true, &uwsgi.use_thunder_lock, 0},
82
82
  {"harakiri", required_argument, 't', "set harakiri timeout", uwsgi_opt_set_int, &uwsgi.harakiri_options.workers, 0},
83
83
  {"harakiri-verbose", no_argument, 0, "enable verbose mode for harakiri", uwsgi_opt_true, &uwsgi.harakiri_verbose, 0},
84
+ {"harakiri-graceful-timeout", required_argument, 0, "interval between graceful harakiri attempt and a sigkill", uwsgi_opt_set_int, &uwsgi.harakiri_graceful_timeout, 0},
85
+ {"harakiri-graceful-signal", required_argument, 0, "use this signal instead of sigterm for graceful harakiri attempts", uwsgi_opt_set_int, &uwsgi.harakiri_graceful_signal, 0},
86
+ {"harakiri-queue-threshold", required_argument, 0, "only trigger harakiri if queue is greater than this threshold", uwsgi_opt_set_int, &uwsgi.harakiri_queue_threshold, 0},
84
87
  {"harakiri-no-arh", no_argument, 0, "do not enable harakiri during after-request-hook", uwsgi_opt_true, &uwsgi.harakiri_no_arh, 0},
85
88
  {"no-harakiri-arh", no_argument, 0, "do not enable harakiri during after-request-hook", uwsgi_opt_true, &uwsgi.harakiri_no_arh, 0},
86
89
  {"no-harakiri-after-req-hook", no_argument, 0, "do not enable harakiri during after-request-hook", uwsgi_opt_true, &uwsgi.harakiri_no_arh, 0},
@@ -9,7 +9,7 @@ for p in search_paths:
9
9
  coroapi = p
10
10
 
11
11
  if not coroapi:
12
- print "unable to find the Coro perl module !!!"
12
+ print("unable to find the Coro perl module !!!")
13
13
  sys.exit(1)
14
14
 
15
15
  NAME='coroae'
@@ -1,5 +1,7 @@
1
1
  import os
2
- NAME='gccgo'
2
+ import subprocess
3
+
4
+ NAME = 'gccgo'
3
5
 
4
6
  CFLAGS = ['-g']
5
7
  LDFLAGS = []
@@ -8,6 +10,6 @@ GCC_LIST = ['gccgo_plugin', 'uwsgi.go']
8
10
 
9
11
  def post_build(config):
10
12
  if os.path.exists('plugins/gccgo/uwsgi.go.o'):
11
- if os.system("objcopy -j .go_export plugins/gccgo/uwsgi.go.o plugins/gccgo/uwsgi.gox") != 0:
13
+ if subprocess.call("objcopy -j .go_export plugins/gccgo/uwsgi.go.o plugins/gccgo/uwsgi.gox", shell=True) != 0:
12
14
  os._exit(1)
13
15
  print("*** uwsgi.gox available in %s/plugins/gccgo ***" % os.getcwd())
@@ -4,7 +4,7 @@ int uwsgi_gevent_wait_write_hook(int, int);
4
4
  int uwsgi_gevent_wait_read_hook(int, int);
5
5
  int uwsgi_gevent_wait_milliseconds_hook(int);
6
6
 
7
- #define GEVENT_SWITCH PyObject *gswitch = python_call(ugevent.greenlet_switch, ugevent.greenlet_switch_args, 0, NULL); Py_DECREF(gswitch)
7
+ #define GEVENT_SWITCH PyObject *gswitch = python_call(ugevent.greenlet_switch, ugevent.greenlet_switch_args, 0, NULL); if (gswitch) { Py_DECREF(gswitch); }
8
8
  #define GET_CURRENT_GREENLET python_call(ugevent.get_current, ugevent.get_current_args, 0, NULL)
9
9
  #define free_req_queue uwsgi.async_queue_unused_ptr++; uwsgi.async_queue_unused[uwsgi.async_queue_unused_ptr] = wsgi_req
10
10
  #define stop_the_watchers if (timer) { ret = PyObject_CallMethod(timer, "stop", NULL);\
@@ -1,5 +1,6 @@
1
1
  import os
2
2
  import shutil
3
+ import subprocess
3
4
 
4
5
  NAME='jvm'
5
6
 
@@ -31,17 +32,20 @@ elif operating_system.startswith('cygwin'):
31
32
  JVM_INCPATH = ['-I"/cygdrive/c/Program Files/Java/jdk1.7.0_17/include"', '-I"/cygdrive/c/Program Files/Java/jdk1.7.0_17/include/win32"']
32
33
  JVM_LIBPATH = ['-L"/cygdrive/c/Program Files/Java/jdk1.7.0_17/jre/bin/server"']
33
34
  else:
34
- known_jvms = ('/usr/lib/jvm/java-7-openjdk', '/usr/local/openjdk7', '/usr/lib/jvm/java-6-openjdk', '/usr/local/openjdk', '/usr/java', '/usr/lib/jvm/java/', '/usr/lib/jvm/java-8-openjdk-%s' % arch)
35
+ known_jvms = ('/usr/lib/jvm/java-7-openjdk', '/usr/local/openjdk7', '/usr/lib/jvm/java-6-openjdk', '/usr/local/openjdk', '/usr/java', '/usr/lib/jvm/java/', '/usr/lib/jvm/java-8-openjdk-%s' % arch, '/usr/lib/jvm/java-11-openjdk-%s' % arch)
35
36
  for jvm in known_jvms:
36
- if os.path.exists(jvm + '/include'):
37
- JVM_INCPATH = ["-I%s/include/" % jvm, "-I%s/include/%s" % (jvm, operating_system)]
38
- JVM_LIBPATH = ["-L%s/jre/lib/%s/server" % (jvm, arch)]
39
- break
40
- if os.path.exists("%s-%s/include" % (jvm, arch)):
41
- jvm = "%s-%s" % (jvm, arch)
42
- JVM_INCPATH = ["-I%s/include/" % jvm, "-I%s/include/%s" % (jvm, operating_system)]
43
- JVM_LIBPATH = ["-L%s/jre/lib/%s/server" % (jvm, arch)]
44
- break
37
+ if os.path.exists(jvm + '/include'):
38
+ JVM_INCPATH = ["-I%s/include/" % jvm, "-I%s/include/%s" % (jvm, operating_system)]
39
+ if os.path.exists("%s/jre"):
40
+ JVM_LIBPATH = ["-L%s/jre/lib/%s/server" % (jvm, arch)]
41
+ else:
42
+ JVM_LIBPATH = ["-L%s/lib/server" % (jvm,)]
43
+ break
44
+ if os.path.exists("%s-%s/include" % (jvm, arch)):
45
+ jvm = "%s-%s" % (jvm, arch)
46
+ JVM_INCPATH = ["-I%s/include/" % jvm, "-I%s/include/%s" % (jvm, operating_system)]
47
+ JVM_LIBPATH = ["-L%s/jre/lib/%s/server" % (jvm, arch)]
48
+ break
45
49
 
46
50
  try:
47
51
  JVM_INCPATH = ['-I"' + os.environ['UWSGICONFIG_JVM_INCPATH'] + '"']
@@ -71,9 +75,9 @@ else:
71
75
  os.environ['LD_RUN_PATH'] = JVM_LIBPATH[0][2:]
72
76
 
73
77
  def post_build(config):
74
- if os.system("javac %s/plugins/jvm/uwsgi.java" % os.getcwd()) != 0:
78
+ if subprocess.call("javac %s/plugins/jvm/uwsgi.java" % os.getcwd(), shell=True) != 0:
75
79
  os._exit(1)
76
- if os.system("cd %s/plugins/jvm ; jar cvf uwsgi.jar *.class" % os.getcwd()) != 0:
80
+ if subprocess.call("cd %s/plugins/jvm ; jar cvf uwsgi.jar *.class" % os.getcwd(), shell=True) != 0:
77
81
  os._exit(1)
78
82
  print("*** uwsgi.jar available in %s/plugins/jvm/uwsgi.jar ***" % os.getcwd())
79
83
 
@@ -1,5 +1,7 @@
1
1
  import os
2
- NAME='mono'
2
+ import subprocess
3
+
4
+ NAME = 'mono'
3
5
 
4
6
  CFLAGS = os.popen('pkg-config --cflags mono-2').read().rstrip().split()
5
7
  LDFLAGS = []
@@ -7,11 +9,11 @@ LIBS = os.popen('pkg-config --libs mono-2').read().rstrip().split()
7
9
  GCC_LIST = ['mono_plugin']
8
10
 
9
11
  if os.uname()[0] == 'Darwin':
10
- LIBS.append('-framework Foundation')
12
+ LIBS.append('-framework Foundation')
11
13
 
12
14
  def post_build(config):
13
- if os.system("sn -k plugins/mono/uwsgi.key") != 0:
15
+ if subprocess.call("sn -k plugins/mono/uwsgi.key", shell=True) != 0:
14
16
  os._exit(1)
15
- if os.system("mcs /target:library /r:System.Web.dll /keyfile:plugins/mono/uwsgi.key plugins/mono/uwsgi.cs") != 0:
17
+ if subprocess.call("mcs /target:library /r:System.Web.dll /keyfile:plugins/mono/uwsgi.key plugins/mono/uwsgi.cs", shell=True) != 0:
16
18
  os._exit(1)
17
19
  print("*** uwsgi.dll available in %s/plugins/mono/uwsgi.dll ***" % os.getcwd())