Warren Young:

> That’s brand new code, less than a week old. It’s not surprising it’s
> not rock-solid yet.

Yes, I agree, I no not expect complex new features to be flawless from
the beginning.

But I've stumbled into the issue while testing a fix from the current
tip, and decided to report it early.

> I expect drh is now on the case. :)

The Windows HTTP server (and thus `fossil ui') works by spawning
sub-processes for each individual HTTP request, right? This results in
multiple sub-processes per web page (one for the HTML page, one for
CSS, another one for JavaScript, etc.)?

Maybe that these sub-processes concurrently try to "get the backoffice
lease" after successfully serving their HTTP request, resulting in a
race, and some of the sub-processes sleeping and waiting for 60
seconds for the lease to expire?

I noticed the following commit:

[a32a92d2] At the end of CGI processing, close the output pipe before
starting backoffice processing, in order to let higher levels know
that the CGI is finished.


Maybe this fixed the same (or a similar) problem with the HTTP server
on *nix, so the web browser quickly receives all the HTTP output,
before the HTTP serving process is turning to backoffice work?

But on Windows, g.httpOut seems to be a temporary file, and not a
pipe, and the `fossil ui' main process may not be waiting for the file
to become signaled when (any) I/O completes (which is a discouraged
technique anyway), but for the sub-process that generated the file to
exit? And this one sub-process sleeping is causing the delay in the
`fossil ui' main process?

Sorry for my prosaic speculation and no hard facts, but I find it all
very interesting!

Another minor point:

The following line of source code from the aforementioned commit:

g.httpOut = fossil_fopen("/dev/null", "wb");

always seems to result in g.httpOut==NULL on Windows, as "/dev/null"
is not a valid Windows device. This probably doesn't matter from the
logic of the code, as writing to a FILE* pointing to NULL may have
exactly the same effect as writing to a FILE* pointing to "/dev/null"?

fossil-users mailing list

Reply via email to