iAdd splice speedup for geomyidae. - geomyidae - A small C-based gopherd. Err bitreich.org 70
hgit clone git://bitreich.org/geomyidae/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/geomyidae/ URL:git://bitreich.org/geomyidae/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/geomyidae/ bitreich.org 70
1Log /scm/geomyidae/log.gph bitreich.org 70
1Files /scm/geomyidae/files.gph bitreich.org 70
1Refs /scm/geomyidae/refs.gph bitreich.org 70
1Tags /scm/geomyidae/tag bitreich.org 70
1README /scm/geomyidae/file/README.gph bitreich.org 70
1LICENSE /scm/geomyidae/file/LICENSE.gph bitreich.org 70
i--- Err bitreich.org 70
1commit 2d93b6f04f44d94cc38dd1ef666867c0ca95574f /scm/geomyidae/commit/2d93b6f04f44d94cc38dd1ef666867c0ca95574f.gph bitreich.org 70
1parent 23ce04766e993ae515483debfc2c3be1c38b2d0b /scm/geomyidae/commit/23ce04766e993ae515483debfc2c3be1c38b2d0b.gph bitreich.org 70
hAuthor: Christoph Lohmann <20h@r-36.net> URL:mailto:20h@r-36.net bitreich.org 70
iDate: Sat, 30 Jul 2022 13:02:13 +0200 Err bitreich.org 70
i Err bitreich.org 70
iAdd splice speedup for geomyidae. Err bitreich.org 70
i Err bitreich.org 70
iThank you parayd, Evil_Bob! Err bitreich.org 70
i Err bitreich.org 70
iLive from brcon2022. Err bitreich.org 70
i Err bitreich.org 70
iDiffstat: Err bitreich.org 70
i M ind.c | 49 +++++++++++++++++++++++++++++++ Err bitreich.org 70
i Err bitreich.org 70
i1 file changed, 49 insertions(+), 0 deletions(-) Err bitreich.org 70
i--- Err bitreich.org 70
1diff --git a/ind.c b/ind.c /scm/geomyidae/file/ind.c.gph bitreich.org 70
i@@ -3,6 +3,10 @@ Err bitreich.org 70
i * by 20h Err bitreich.org 70
i */ Err bitreich.org 70
i Err bitreich.org 70
i+#ifdef __linux__ Err bitreich.org 70
i+ #define _GNU_SOURCE Err bitreich.org 70
i+#endif Err bitreich.org 70
i+ Err bitreich.org 70
i #include <unistd.h> Err bitreich.org 70
i #include <stdarg.h> Err bitreich.org 70
i #include <string.h> Err bitreich.org 70
i@@ -21,6 +25,10 @@ Err bitreich.org 70
i #include <sys/ioctl.h> Err bitreich.org 70
i #include <limits.h> Err bitreich.org 70
i Err bitreich.org 70
i+#define PAGE_SHIFT 12 Err bitreich.org 70
i+#define PAGE_SIZE (1UL << PAGE_SHIFT) Err bitreich.org 70
i+#define BLOCK_SIZE ((PAGE_SIZE * 16) - 1) Err bitreich.org 70
i+ Err bitreich.org 70
i #include "arg.h" Err bitreich.org 70
i #include "ind.h" Err bitreich.org 70
i #include "handlr.h" Err bitreich.org 70
i@@ -92,6 +100,43 @@ waitforpendingbytes(int sock) Err bitreich.org 70
i } Err bitreich.org 70
i } Err bitreich.org 70
i Err bitreich.org 70
i+#ifdef __linux__ Err bitreich.org 70
i+int Err bitreich.org 70
i+xsplice(int fd, int sock) Err bitreich.org 70
i+{ Err bitreich.org 70
i+ int pipefd[2], ret = 0; Err bitreich.org 70
i+ ssize_t nread, nwritten; Err bitreich.org 70
i+ off_t in_offset = 0; Err bitreich.org 70
i+ Err bitreich.org 70
i+ if (pipe(pipefd) < 0) { Err bitreich.org 70
i+ perror("pipe"); Err bitreich.org 70
i+ _exit(1); Err bitreich.org 70
i+ } Err bitreich.org 70
i+ Err bitreich.org 70
i+ do { Err bitreich.org 70
i+ nread = splice(fd, &in_offset, pipefd[1], NULL, Err bitreich.org 70
i+ BLOCK_SIZE, SPLICE_F_MOVE | SPLICE_F_MORE); Err bitreich.org 70
i+ Err bitreich.org 70
i+ if (nread <= 0) { Err bitreich.org 70
i+ ret = nread < 0 ? 1 : 0; Err bitreich.org 70
i+ goto out; Err bitreich.org 70
i+ } Err bitreich.org 70
i+ Err bitreich.org 70
i+ nwritten = splice(pipefd[0], NULL, sock, NULL, BLOCK_SIZE, SPLICE_F_MOVE | SPLICE_F_MORE); Err bitreich.org 70
i+ if (nwritten < 0) { Err bitreich.org 70
i+ ret = 1; Err bitreich.org 70
i+ goto out; Err bitreich.org 70
i+ } Err bitreich.org 70
i+ } while (nwritten > 0); Err bitreich.org 70
i+ Err bitreich.org 70
i+out: Err bitreich.org 70
i+ close(pipefd[0]); Err bitreich.org 70
i+ close(pipefd[1]); Err bitreich.org 70
i+ Err bitreich.org 70
i+ return ret; Err bitreich.org 70
i+} Err bitreich.org 70
i+#endif Err bitreich.org 70
i+ Err bitreich.org 70
i int Err bitreich.org 70
i xsendfile(int fd, int sock) Err bitreich.org 70
i { Err bitreich.org 70
i@@ -100,6 +145,10 @@ xsendfile(int fd, int sock) Err bitreich.org 70
i size_t bufsiz = BUFSIZ; Err bitreich.org 70
i int len, sent, optval; Err bitreich.org 70
i Err bitreich.org 70
i+#ifdef splice Err bitreich.org 70
i+ return xsplice(fd, sock); Err bitreich.org 70
i+#endif Err bitreich.org 70
i+ Err bitreich.org 70
i USED(optval); Err bitreich.org 70
i Err bitreich.org 70
i /* Err bitreich.org 70
.
Response:
text/plain