On Fri, Nov 6, 2009 at 6:01 PM, Rys Sommefeldt <rys@xxxxxxxxxxxxxx> wrote: > Hi Lars, > > My colleagues and I use cgit at work, and we've found that the scanning > process can consume all available fds pretty quickly on our cgit hosts, > because it doesn't close them properly on error. We have a few thousand > active repositories for cgit to scan, and we noticed it dying after a > certain amount. > > I've attached a patch which should apply against current master, although I > developed it a while back on an older 0.8 version (sorry it took so long to > subscribe and send the patch in). > > Cheers, > > Rys Sommefeldt > --- > > From 6446cf839d2104cd40848e439bf97cd7fd6ccfee Mon Sep 17 00:00:00 2001 > From: Rys Sommefeldt <rsommefeldt@xxxxxxxx> > Date: Fri, 6 Nov 2009 17:14:56 +0000 > Subject: [PATCH] Close fd when done > > --- > shared.c | 9 +++++++-- > 1 files changed, 7 insertions(+), 2 deletions(-) > > diff --git a/shared.c b/shared.c > index d7b2d5a..d5e54e6 100644 > --- a/shared.c > +++ b/shared.c > @@ -404,14 +404,19 @@ int readfile(const char *path, char **buf, size_t > *size) > struct stat st; > > fd = open(path, O_RDONLY); > - if (fd == -1) > + if (fd == -1) { > + close(fd); > return errno; > - if (fstat(fd, &st)) > + } The above change looks bogus. If fd == -1, you close() it anyway? > + if (fstat(fd, &st)) { > + close(fd); > return errno; > + } > if (!S_ISREG(st.st_mode)) > return EISDIR; > *buf = xmalloc(st.st_size + 1); > *size = read_in_full(fd, *buf, st.st_size); > (*buf)[*size] = '\0'; > + close(fd); > return (*size == st.st_size ? 0 : errno); > } > -- > 1.6.5.2 > -- > To unsubscribe from this list: send the line "unsubscribe git" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html > -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html