Browse Source

[core] chunkqueue perf: skip opening 0-length file

personal/stbuehler/ci-build
Glenn Strauss 3 years ago
parent
commit
8ae0646748
  1. 14
      src/http-header-glue.c

14
src/http-header-glue.c

@ -473,8 +473,10 @@ void http_response_send_file (server *srv, connection *con, buffer *path) {
/*(Note: O_NOFOLLOW affects only the final path segment,
* the target file, not any intermediate symlinks along path)*/
const int fd = fdevent_open_cloexec(path->ptr, con->conf.follow_symlink, O_RDONLY, 0);
if (fd < 0) {
const int fd = (0 != sce->st.st_size)
? fdevent_open_cloexec(path->ptr, con->conf.follow_symlink, O_RDONLY, 0)
: -1;
if (fd < 0 && 0 != sce->st.st_size) {
con->http_status = (errno == ENOENT) ? 404 : 403;
if (con->conf.log_request_handling) {
log_error_write(srv, __FILE__, __LINE__, "sbs", "file open failed:", path, strerror(errno));
@ -524,11 +526,17 @@ void http_response_send_file (server *srv, connection *con, buffer *path) {
}
if (HANDLER_FINISHED == http_response_handle_cachable(srv, con, mtime)) {
close(fd);
if (fd >= 0) close(fd);
return;
}
}
if (fd < 0) { /* 0-length file */
con->http_status = 200;
con->file_finished = 1;
return;
}
if (con->conf.range_requests
&& (200 == con->http_status || 0 == con->http_status)
&& NULL != (vb = http_header_request_get(con, HTTP_HEADER_RANGE, CONST_STR_LEN("Range")))

Loading…
Cancel
Save