diff --git a/apache2/mod_proxy_uwsgi.c b/apache2/mod_proxy_uwsgi.c index 663805db..262ba588 100644 --- a/apache2/mod_proxy_uwsgi.c +++ b/apache2/mod_proxy_uwsgi.c @@ -405,7 +405,10 @@ static int uwsgi_response(request_rec *r, proxy_conn_rec *backend, proxy_server_ // found the last brigade? if (APR_BUCKET_IS_EOS(APR_BRIGADE_LAST(bb))) finish = 1; - if (ap_pass_brigade(r->output_filters, pass_bb) != APR_SUCCESS || c->aborted) { + // do not pass chunk if it is zero_sized + apr_brigade_length(pass_bb, 0, &readbytes); + + if ((readbytes > 0 && ap_pass_brigade(r->output_filters, pass_bb) != APR_SUCCESS) || c->aborted) { finish = 1; } diff --git a/core/master_utils.c b/core/master_utils.c index b0d3d288..a83aea6b 100644 --- a/core/master_utils.c +++ b/core/master_utils.c @@ -162,6 +162,7 @@ int uwsgi_calc_cheaper(void) { ignore_algo = 1; } uwsgi.cheaper_fifo_delta = 0; + goto safe; } // if cheaper limits wants to change worker count, then skip cheaper algo @@ -172,6 +173,7 @@ int uwsgi_calc_cheaper(void) { needed_workers = 0; } +safe: if (needed_workers > 0) { for (i = 1; i <= uwsgi.numproc; i++) { if (uwsgi.workers[i].cheaped == 1 && uwsgi.workers[i].pid == 0) { diff --git a/core/socket.c b/core/socket.c index 23f8198f..888baa91 100644 --- a/core/socket.c +++ b/core/socket.c @@ -191,7 +191,10 @@ int bind_to_unix(char *socket_name, int listen_queue, int chmod_socket, int abst memset(uws_addr, 0, sizeof(struct sockaddr_un)); serverfd = create_server_socket(AF_UNIX, SOCK_STREAM); - if (serverfd < 0) return -1; + if (serverfd < 0) { + free(uws_addr); + return -1; + } if (abstract_socket == 0) { if (unlink(socket_name) != 0 && errno != ENOENT) { uwsgi_error("error removing unix socket, unlink()");