Mon, 16 Mar 2026 19:44:18 +0100
fix proxy nsapi saf response in case the httpclient returned with an error
| src/server/safs/proxy.c | file | annotate | diff | comparison | revisions |
--- 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; } }