fix wrong return error code in proxy_response_write

Sat, 14 Mar 2026 12:42:48 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Sat, 14 Mar 2026 12:42:48 +0100
changeset 729
66afe8954ff9
parent 728
a815f30e368d
child 730
c190ce0aab98

fix wrong return error code in proxy_response_write

src/server/safs/proxy.c file | annotate | diff | comparison | revisions
--- a/src/server/safs/proxy.c	Fri Mar 13 20:12:49 2026 +0100
+++ b/src/server/safs/proxy.c	Sat Mar 14 12:42:48 2026 +0100
@@ -163,7 +163,7 @@
     proxy_unref(proxy);
 }
 
-static int proxy_request_read_event(EventHandler *eh, Event *event) {
+static int proxy_event(EventHandler *eh, Event *event) {
     ProxyRequest *proxy = event->cookie;
     if(http_client_process(proxy->client, event)) {
         if(proxy->client->error == 0) {
@@ -173,7 +173,7 @@
     return 0;
 }
 
-static int proxy_request_read_finished(EventHandler *eh, Event *event) {
+static int proxy_event_finished(EventHandler *eh, Event *event) {
     ProxyRequest *proxy = event->cookie;
     proxy_unref(proxy);
     return 0;
@@ -192,8 +192,8 @@
             if(!proxy->event.fn) {
                 proxy->ref++;
                 proxy->event.cookie = proxy;
-                proxy->event.fn = proxy_request_read_event;
-                proxy->event.finish = proxy_request_read_finished;
+                proxy->event.fn = proxy_event;
+                proxy->event.finish = proxy_event_finished;
                 if(event_pollin(client->ev, st, &proxy->event)) {
                     ret = HTTP_CLIENT_CALLBACK_ERROR;
                 }
@@ -214,11 +214,13 @@
     } else 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
@@ -230,15 +232,16 @@
             } else {
                 proxy->ref++;
                 proxy->event.cookie = proxy;
-                proxy->event.fn = proxy_request_read_event;
-                proxy->event.finish = proxy_request_read_finished;
+                proxy->event.fn = proxy_event;
+                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");
             }
-            return HTTP_CLIENT_CALLBACK_ERROR;
+            return HTTP_CLIENT_CALLBACK_WOULD_BLOCK;
         }
     }
     return ret;
@@ -270,8 +273,8 @@
         }
         
         proxy->event.cookie = proxy;
-        proxy->event.fn = proxy_request_read_event;
-        proxy->event.finish = proxy_request_read_finished;
+        proxy->event.fn = proxy_event;
+        proxy->event.finish = proxy_event_finished;
         if(event_pollin(client->ev, st, &proxy->event)) {
             return 1;
         }

mercurial