handle net_write return 0 in proxy_response_write default tip

Tue, 17 Mar 2026 21:01:57 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Tue, 17 Mar 2026 21:01:57 +0100
changeset 735
902b417ab6d2
parent 734
a5f3e1e5e744

handle net_write return 0 in proxy_response_write

src/server/proxy/httpclient.c file | annotate | diff | comparison | revisions
src/server/safs/proxy.c file | annotate | diff | comparison | revisions
src/server/test/main.c file | annotate | diff | comparison | revisions
src/server/util/io.c file | annotate | diff | comparison | revisions
--- 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);

mercurial