Skip to content

Commit 38ebd48

Browse files
committed
Ensure fallback sendfile() implementation yields every now and then
1 parent d8ed81e commit 38ebd48

File tree

1 file changed

+6
-3
lines changed

1 file changed

+6
-3
lines changed

src/lib/lwan-io-wrappers.c

+6-3
Original file line numberDiff line numberDiff line change
@@ -329,9 +329,6 @@ static ssize_t try_pread_file(struct lwan_request *request,
329329
for (int tries = MAX_FAILED_TRIES; tries;) {
330330
ssize_t r = pread(fd, buffer, len, offset);
331331

332-
if (r == 0) {
333-
return total_read;
334-
}
335332
if (UNLIKELY(r < 0)) {
336333
tries--;
337334

@@ -366,6 +363,7 @@ int lwan_sendfile_fd(struct lwan_request *request,
366363
size_t header_len)
367364
{
368365
unsigned char buffer[512];
366+
unsigned int blocks_sent = 0;
369367
ssize_t r;
370368

371369
r = lwan_send_fd(request, out_fd, header, header_len, MSG_MORE);
@@ -387,6 +385,11 @@ int lwan_sendfile_fd(struct lwan_request *request,
387385

388386
count -= bytes_read;
389387
offset += bytes_read;
388+
389+
blocks_sent++;
390+
if (blocks_sent & 3 == 0) {
391+
coro_yield(request->conn->coro, CONN_CORO_WRITE);
392+
}
390393
}
391394

392395
return 0;

0 commit comments

Comments
 (0)