# HG changeset patch # User Olaf Wintermann # Date 1773686658 -3600 # Node ID 66bde992ebd06b7706a81bac32bae4b5f4a34a78 # Parent 2aeaf6f328613a10dc646ca096b9638586040291 fix proxy nsapi saf response in case the httpclient returned with an error diff -r 2aeaf6f32861 -r 66bde992ebd0 src/server/safs/proxy.c --- a/src/server/safs/proxy.c Sat Mar 14 13:36:39 2026 +0100 +++ b/src/server/safs/proxy.c Mon Mar 16 19:44:18 2026 +0100 @@ -144,7 +144,7 @@ log_ereport(LOG_INFORM, "proxy_response_finished: %s", client->uri); - int ret = REQ_PROCEED; + int ret = proxy->client->error == 0 ? REQ_PROCEED : REQ_ABORTED; if(!proxy->response_started) { protocol_status(proxy->sn, proxy->rq, 502, NULL); ret = REQ_ABORTED; @@ -213,6 +213,10 @@ 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) { IOStream *st = proxy->sn->csd; if(st->io_errno == EWOULDBLOCK) { @@ -245,7 +249,8 @@ } return HTTP_CLIENT_CALLBACK_WOULD_BLOCK; } else { - log_ereport(LOG_FAILURE, "proxy_response_write failed: %s", strerror(st->io_errno)); + log_ereport(LOG_FAILURE, "proxy_response_write failed: ret: %d: %s", (int)ret, strerror(st->io_errno)); + proxy->rq->rq_attr.keep_alive = 0; return HTTP_CLIENT_CALLBACK_ERROR; } }