> On 17 Jan 2018, at 5:12 am, Jesus Cea <[email protected]> wrote:
>
> On 16/01/18 18:13, Jesus Cea wrote:
>> Thanks for your time, Graham. Much appreciated.
>
> Reading source code, I see things I don't understand and could be the issue:
>
> When a request is processed, if it preemptively marked as "error 500".
> This code will be changed to the right result code when the request
> finishs. This is a good approach, because any oversight will be shown as
> "error 500". Good so far.
>
> File "mod_wsgi.c", line 3175.
>
> "Adapter_output" will return "0" if the client closed the connection. In
> that case, source code set "aborted=1". Cool.
>
> A few lines later we have this:
>
> """
> if (!PyErr_Occurred() && !aborted) {
> if (Adapter_output(self, "", 0, NULL, 0))
> self->result = OK;
> }
> """
>
> I am not sure why "Adapter_output()" is called with NOOP operation
> (maybe to signal "end of stream", but then I don't know why it is only
> done when no python error occurred), but "self->result=OK" requires
> "aborted==0". This is not going to happen if we have "aborted==1".
Apache needs it to ensure that a 100-continue response is flushed out correctly
if browser was expecting it, otherwise things get messed up.
> I think that if we have "abort != 0" and "!PyErr_Occurred()", we should
> do "self->result = OK;" unconditionally.
>
> Maybe better something like this:
>
> if(!PyErr_Occurred()) {
> if(aborted) {
> self->result = OK;
> } else {
> if (Adapter_output(self, "", 0, NULL, 0))
> self->result = OK;
> }
> }
>
> Or even:
>
> if(!PyErr_Occurred()) {
> if(!aborted)
> Adapter_output(self, "", 0, NULL, 0);
> self->result = OK;
> }
>
> Or even:
>
> if(!aborted)
> Adapter_output(self, "", 0, NULL, 0); // ?? Signal end of string???
>
> if(!PyErr_Occurred())
> self->result = OK;
>
> A while later we will log an error (at debug level, you usually don't
> see it) if data length we send is not the same than the "content-length"
> header. That would be a mistake if "aborted==1". In that case we should
> ONLY log an error if "content-length>actual data length sent".
>
> This is only code inspection, without knowing about mod_wsgi internals.
> I didn't even try to compile. What do you think, Graham?.
>
> Apparently this takes care of the "embedded mode". Didn't check, really.
>
> Reading more source code, I find "wsgi_transfer_response", returning 500
> for almost everything that. I changed there all "return
> HTTP_INTERNAL_SERVER_ERROR;" to:
>
> """
> if (r->connection->aborted)
> return OK;
> else
> return HTTP_INTERNAL_SERVER_ERROR;
> """
>
> This seems to get rid of the problem!. Now I have "200" and "206" in my
> server log! :).
>
> I didn't take care of logging details, specially the "content-length"
> mismatch described before in this text.
>
> Do you agree with this patch?. Do you want a pull request in github?.
It sort of sounds plausible. I am travelling at the moment and don't have a
good amount of time to sit down and check it. For now just suggest keep
testing with it and see how it goes. I will try and find some time over the
next week to look at it more.
Graham
> PS: I have been testing these changes in last couple of hours.
> Everything seems good so far.
>
> --
> Jesús Cea Avión _/_/ _/_/_/ _/_/_/
> [email protected] - http://www.jcea.es/ _/_/ _/_/ _/_/ _/_/ _/_/
> Twitter: @jcea _/_/ _/_/ _/_/_/_/_/
> jabber / xmpp:[email protected] _/_/ _/_/ _/_/ _/_/ _/_/
> "Things are not so easy" _/_/ _/_/ _/_/ _/_/ _/_/ _/_/
> "My name is Dump, Core Dump" _/_/_/ _/_/_/ _/_/ _/_/
> "El amor es poner tu felicidad en la felicidad de otro" - Leibniz
>
> --
> You received this message because you are subscribed to the Google Groups
> "modwsgi" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at https://groups.google.com/group/modwsgi.
> For more options, visit https://groups.google.com/d/optout.
--
You received this message because you are subscribed to the Google Groups
"modwsgi" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/modwsgi.
For more options, visit https://groups.google.com/d/optout.