Tue, 17 Mar 2026 21:01:57 +0100
handle net_write return 0 in proxy_response_write
--- a/src/server/proxy/httpclient.c Tue Mar 17 20:49:37 2026 +0100 +++ b/src/server/proxy/httpclient.c Tue Mar 17 21:01:57 2026 +0100 @@ -332,7 +332,7 @@ if(client->stage < 0) { return 0; } - log_ereport(LOG_INFORM, "client_process %d", client->stage); + log_ereport(LOG_DEBUG, "client_process %d", client->stage); if(client->stage == 0) { if(client->transfer_buffer_pos < client->transfer_buffer_len) { @@ -383,13 +383,13 @@ if(ret) { return client->error == 0; } - log_ereport(LOG_INFORM, "client_process end: %p", event->finish); + log_ereport(LOG_DEBUG, "client_process end: %p", event->finish); if(event != &client->event) { // An extern event has called client_process, therefore the // client_finished event callback is not automatically called. // Manually shutdown the client: - log_ereport(LOG_INFORM, "client_process: manual shutdown"); + log_ereport(LOG_DEBUG, "client_process: manual shutdown"); ev_remove_poll(client->ev, client->socketfd); client_finished(client->ev, &client->event); client->event.fn = NULL; @@ -487,7 +487,7 @@ static int client_finished(EventHandler *ev, Event *event) { HttpClient *client = event->cookie; - log_ereport(LOG_INFORM, "client_finished: %p", client->response_finished); + log_ereport(LOG_DEBUG, "client_finished"); close(client->socketfd); client->socketfd = -1; @@ -805,7 +805,7 @@ char *buf = client->transfer2_buffer + client->transfer2_buffer_pos; size_t len = client->transfer2_buffer_len - client->transfer2_buffer_pos; int ret = client->response_body_write(client, buf, len, client->response_body_write_userdata); - log_ereport(LOG_INFORM, "client_write_response: %d bytes; ret: %d", (int)len, ret); + log_ereport(LOG_DEBUG, "client_write_response: %d bytes; ret: %d", (int)len, ret); if(ret > 0) { client->transfer2_buffer_pos += ret; } else if(ret == 0) { @@ -850,12 +850,12 @@ } if(r == 0) { - log_ereport(LOG_INFORM, "client_read_response_body eof"); + log_ereport(LOG_DEBUG, "client_read_response_body eof"); } if(r < 0) { if(client->stream->st.io_errno == EWOULDBLOCK) { - log_ereport(LOG_INFORM, "client_read_response_body would block"); + log_ereport(LOG_DEBUG, "client_read_response_body would block"); } if(client->stream->st.io_errno != EWOULDBLOCK) { @@ -863,7 +863,7 @@ } return 1; } - log_ereport(LOG_INFORM, "client_read_response_body finished"); + log_ereport(LOG_DEBUG, "client_read_response_body finished"); return 0; }
--- a/src/server/safs/proxy.c Tue Mar 17 20:49:37 2026 +0100 +++ b/src/server/safs/proxy.c Tue Mar 17 21:01:57 2026 +0100 @@ -87,7 +87,7 @@ static void proxy_unref(ProxyRequest *proxy) { if(--proxy->ref == 0) { - log_ereport(LOG_INFORM, "proxy cleanup"); + log_ereport(LOG_DEBUG, "proxy cleanup"); //const char *method = pblock_findkeyval(pb_key_method, proxy->rq->reqpb); //const char *uri = pblock_findkeyval(pb_key_uri, proxy->rq->reqpb); //log_ereport(LOG_INFORM, "reverse-proxy: %s %s finished", method, uri); @@ -142,7 +142,7 @@ static void proxy_response_finished(HttpClient *client, void *userdata) { ProxyRequest *proxy = userdata; - log_ereport(LOG_INFORM, "proxy_response_finished: %s", client->uri); + log_ereport(LOG_DEBUG, "proxy_response_finished: %s", client->uri); int ret = proxy->client->error == 0 ? REQ_PROCEED : REQ_ABORTED; if(!proxy->response_started) { @@ -173,7 +173,6 @@ return 1; } } - log_ereport(LOG_INFORM, "proxy_event end: %p", event->finish); return 0; } @@ -213,20 +212,15 @@ static ssize_t proxy_response_write(HttpClient *client, void *buf, size_t nbytes, void *userdata) { ProxyRequest *proxy = userdata; ssize_t ret = net_write(proxy->sn->csd, buf, nbytes); - if(ret == 0) { - log_ereport(LOG_FAILURE, "proxy_response_write ret 0 wtf"); - } - if(ret < 0) { + if(ret <= 0) { IOStream *st = proxy->sn->csd; if(st->io_errno == EWOULDBLOCK) { - log_ereport(LOG_INFORM, "proxy_response_write would block"); // Is there already an poll event for csd? if(client->last_event == &proxy->event) { // Yes, there is already an event, and it even is the event that triggert this call. // Make sure it is a write event proxy->event.events = EVENT_POLLOUT; - log_ereport(LOG_INFORM, "proxy_response_write pollout event already exists"); return HTTP_CLIENT_CALLBACK_WOULD_BLOCK; } else if(proxy->event.fn != NULL) { // There is an inactive event, probably a read event @@ -242,7 +236,6 @@ proxy->event.finish = proxy_event_finished; } // Add write event - log_ereport(LOG_INFORM, "proxy_response_write pollout"); if(event_pollout(client->ev, proxy->sn->csd, &proxy->event)) { proxy_unref(proxy); log_ereport(LOG_FAILURE, "proxy_response_write: cannot add write poll");
--- a/src/server/test/main.c Tue Mar 17 20:49:37 2026 +0100 +++ b/src/server/test/main.c Tue Mar 17 21:01:57 2026 +0100 @@ -210,7 +210,6 @@ // http tests - /* http_client_add_tests(suite); cx_test_register(suite, test_http_client_simple_get1); cx_test_register(suite, test_http_client_simple_get_line_io); @@ -221,7 +220,6 @@ cx_test_register(suite, test_http_client_post_ctlen_large); cx_test_register(suite, test_http_client_get_incorrect_ctlen); cx_test_register(suite, test_http_client_broken_response); - * */ // plugin tests #ifdef ENABLE_POSTGRESQL
--- a/src/server/util/io.c Tue Mar 17 20:49:37 2026 +0100 +++ b/src/server/util/io.c Tue Mar 17 21:01:57 2026 +0100 @@ -492,7 +492,6 @@ ssize_t wv = fd->writev(fd, io, iovec_len); if(wv <= 0) { - log_ereport(LOG_INFORM, "net_http_write chunk writev ret %d", (int)wv); st->st.io_errno = net_errno(st->fd); return wv; } @@ -867,7 +866,6 @@ ssize_t net_ssl_write(SSLStream *st, const void *buf, size_t nbytes) { int ret = SSL_write(st->ssl, buf, nbytes); - log_ereport(LOG_INFORM, "SSL_write(%p, %d) -> %d", buf, (int)nbytes, ret); if(ret <= 0) { st->error = SSL_get_error(st->ssl, ret); if(st->error == SSL_ERROR_WANT_WRITE || st->error == SSL_ERROR_WANT_READ) { @@ -890,7 +888,6 @@ for(int i=0;i<iovcnt;i++) { int ml = iovec[i].iov_len > 10 ? 10 : iovec[i].iov_len; int ret = SSL_write(st->ssl, iovec[i].iov_base, iovec[i].iov_len); - log_ereport(LOG_INFORM, "SSL_write(%p {%.*s}, %d) -> %d", iovec[i].iov_base, ml, iovec[i].iov_base, (int)iovec[i].iov_len, ret); if(ret <= 0) { if(r == 0) { st->error = SSL_get_error(st->ssl, ret);