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