From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-1.0 required=5.0 tests=MAILING_LIST_MULTI, RCVD_IN_DNSWL_NONE autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 29990 invoked from network); 22 Dec 2020 15:10:04 -0000 Received: from krantz.zx2c4.com (192.95.5.69) by inbox.vuxu.org with ESMTPUTF8; 22 Dec 2020 15:10:04 -0000 Received: by krantz.zx2c4.com (ZX2C4 Mail Server) with ESMTP id 95ebbe50; Tue, 22 Dec 2020 15:00:51 +0000 (UTC) Return-Path: Received: from sdaoden.eu (sdaoden.eu [217.144.132.164]) by krantz.zx2c4.com (ZX2C4 Mail Server) with ESMTPS id 8480027d (TLSv1.3:TLS_AES_256_GCM_SHA384:256:NO) for ; Tue, 22 Dec 2020 15:00:49 +0000 (UTC) Received: by sdaoden.eu (Postfix, from userid 1000) id 5B8D116057; Tue, 22 Dec 2020 16:09:58 +0100 (CET) Date: Tue, 22 Dec 2020 16:09:57 +0100 From: Steffen Nurpmeso To: gs-cgit-lists.zx2c4.com@gluelogic.com Cc: cgit@lists.zx2c4.com Subject: Re: cgit 1.2.3: lighttpd 1.4.57, AlpineLinux [edge]: using cache breaks delivery Message-ID: <20201222150957._aAW5%steffen@sdaoden.eu> In-Reply-To: <20201222135537.ovyl4%steffen@sdaoden.eu> References: <20201222061206.GA54419@xps13> <20201222135537.ovyl4%steffen@sdaoden.eu> Mail-Followup-To: gs-cgit-lists.zx2c4.com@gluelogic.com, cgit@lists.zx2c4.com User-Agent: s-nail v14.9.20-84-g7268a84d OpenPGP: id=EE19E1C1F2F7054F8D3954D8308964B51883A0DD; url=https://ftp.sdaoden.eu/steffen.asc; preference=signencrypt BlahBlahBlah: Any stupid boy can crush a beetle. But all the professors in the world can make no bugs. X-BeenThere: cgit@lists.zx2c4.com X-Mailman-Version: 2.1.30rc1 Precedence: list List-Id: List for cgit developers and users List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: cgit-bounces@lists.zx2c4.com Sender: "CGit" Hello! Steffen Nurpmeso wrote in <20201222135537.ovyl4%steffen@sdaoden.eu>: |gs-cgit-lists.zx2c4.com@gluelogic.com wrote in | <20201222061206.GA54419@xps13>: ||>Steffen Nurpmeso wrote in ||> <20201221193127.zbZeP%steffen at sdaoden.eu>: ||>|John Keeping wrote in ||>| : ||>||On Mon, Dec 21, 2020 at 05:26:19PM +0100, Steffen Nurpmeso wrote: ||>||> I discovered today that cgit no longer delivers pages, and it must ||>||> have been like that for some time. The server looks show ||>||> successful delivery, the cgit cache is populated and rotated just ||>||> correctly, but all cgit delivers is that final error of main() as ||>||> ||>||>
Error processing page: Invalid argument \ ||>||> (22)||>> ||> ... ||>||> I am pretty sure cgit delivered some weeks ago, the most notable ||>||> difference is that AlpineLinux switched to Lighttpd 1.4.56 then ||>||> .57, which seems to have brought tremendous changes under the ||> ... ||>|But the file was generated normally: ||>| ||>| # ll /var/lib/lighttpd/cgit/b1000000 ||>| -rw------- 1 lighttpd lighttpd 23417 Dec 21 20:22 /var/lib/ligh\ ||>| t\ ||>| tpd/cgit/b1000000 ||> ... ||> ||>Slightly resorted: ||> ||> ... ||>||Have you looked at the log output? ||>| [cgit] error printing cache /var/lib/lighttpd/cgit/b1000000: Invalid \ ||>| argument (22) ||> ... ||>||and this may be caused by sendfile(2) failing due to some difference in ||>||how the web server is setting up the output file descriptor. You may ||>||want to rebuild CGit without HAVE_LINUX_SENDFILE and see if that works. ||> ||>So i build it with | ... ||> - CGIT_CFLAGS += -DHAVE_LINUX_SENDFILE ||> + #CGIT_CFLAGS += -DHAVE_LINUX_SENDFILE | ... ||>and .. it works. ||> ||>Thank you, i will open an AlpineLinux bug report. And lighttpd. | ... | ||I would like to propose an alternative and more portable solution: || ||cgit cache should fallback to lseek, xread, xwrite if sendfile fails. | |(Yes.) .... diff --git a/cache.c b/cache.c index 2c70be7..7fbab66 100644 --- a/cache.c +++ b/cache.c @@ -85,6 +85,7 @@ static int close_slot(struct cache_slot *slot) /* Print the content of the active cache slot (but skip the key). */ static int print_slot(struct cache_slot *slot) { + ssize_t i, j; #ifdef HAVE_LINUX_SENDFILE off_t start_off; int ret; @@ -97,12 +98,13 @@ static int print_slot(struct cache_slot *slot) if (ret < 0) { if (errno == EAGAIN || errno == EINTR) continue; + if (start_off == slot->keylen + 1) + break; I can confirm this hunk fixes the bug. If i remove it i get the error, with it you are fine. return errno; } return 0; } while (1); -#else - ssize_t i, j; +#endif i = lseek(slot->cache_fd, slot->keylen + 1, SEEK_SET); if (i != slot->keylen + 1) @@ -118,7 +120,6 @@ static int print_slot(struct cache_slot *slot) return errno; else return 0; -#endif } /* Check if the slot has expired */ Thanks :), and ciao from Germany, --steffen | |Der Kragenbaer, The moon bear, |der holt sich munter he cheerfully and one by one |einen nach dem anderen runter wa.ks himself off |(By Robert Gernhardt)