unbit/uwsgi — pull request #772 by avar (2014-11-10 19:07:17+00:00)
Title: psgi: Ensure that we call any DESTROY hooks on psgix.harakiri.commit

Before this we'd just exit(0) and let the OS clean up after us, but
e.g. with post-buffering=1 we'll end up with a temporary file in /tmp
that we won't clean up when we exit unless DESTROY is called.

This resulted in us leaking files in /tmp if we ever had a request where
the last request before a harakiri was a POST request with a body we'd
buffer to /tmp.

We'd have similar leaks in any user-defined code that required DESTROY
to run.

Aside from this I'm still not very comfortable with what this whole code
here in psgi_plugin.c and psgi_loader.c is doing when managing the
interpreter(s). It:

* Doesn't consistently call PERL_SET_CONTEXT() as described in "perldoc
perlembed".

* Nothing calls PERL_SYS_TERM() either.

* Should we be calling uwsgi_perl_free_stashes() here too?

To test this:

UWSGI_PROFILE=psgi python uwsgiconfig.py --build
./uwsgi --master --http-socket localhost:1234 --psgi t/perl/test_harakiri.psgi

Then elsewhere:

curl 'localhost:1234?0'
curl 'localhost:1234?1'

Both of those should emit "Calling DESTROY".