Commit Briefs

Omar Polo

copy only `len' bytes, not the whole buffer

We ended up copying too much data from the fastcgi process.


Omar Polo

allow running only specific tests

It's now possible to run only a subset of the tests with: ./runtime test1 test2 ...


Omar Polo

sync


Omar Polo

remove unused script


Omar Polo

rework the regression suite

The tests are still there, the suite is equivalent to the old one, but this one is better structured. The biggest annoyance I had with the old one was that it wasn't straightforward to test only a specific set of tests. It's still impossible, but it's way easier to do it now. This extract all the tests to their own functions. It's overall better in all possible regards.


Omar Polo

update clean target


Omar Polo

sync


Omar Polo

libevent2 fix: unfreeze the client evbuffer

libevent2 has this concept of "freezeness" of a buffer. It's a way to avoid accidentally write/remove data from the wrong "edge" of the buffer. The client_tls_{read,write} functions need to add/drain data from the opposite edge, hence the need for the unfreeze call. This is the minimum change in order to work on libevent2 too. Another way would be to define evbuffer_{un,}freeze as NOP on libevent 1, but it's ugly IMHO.


Omar Polo

improve libevent2 handling

* add configure check * change the way the headers are required (copied from tmux)


Omar Polo

verbose logging for getnameinfo


Omar Polo

update tests

* we don't add a space before the lang anymore * we're more strict in CGI handling: the `invalid' CGI script now triggers a 42 CGI ERROR


Omar Polo

drop now unused trim_req_iri


Omar Polo

new I/O handling on top of bufferevents

This is a big change in how gmid handles I/O. Initially we used a hand-written loop over poll(2), that then was evolved into something powered by libevent basic API. This meant that there were a lot of small "asynchronous" function that did one step, eventually scheduling the re-execution, that called each others in a chain. The new implementation revolves completely around libevent' bufferevents. It's more clear, as everything is implemented around the client_read and client_write functions. There is still space for improvements, like adding timeouts for one, but it's solid enough to be committed as is and then further improved.


Omar Polo

[cgi] switch from pipe(2) to socketpair(2)

We can't use normal pipe(2)s with libevent in some cases. Switch to socketpair(2), which doesn't have the same problem. This has the drawback that it doesn't prevent the CGI script from reading stdout, for instance. (sockets are two-way, pipes only one-way)


Omar Polo

log more details for FastCGI errors

add the reported request id if there's a mismatch and both the gai error and the errno value if getnameinfo fails.