Re: [PATCH v4 3/3] regex: use regexec_buf()
- From
Johannes Schindelin <johannes.schindelin@gmx.de>
- Date
- Sep 25, 2016, 14:01 UTC
- Message-ID
- <alpine.DEB.2.20.1609251600120.129229@virtualbox>
- In-Reply-To
- <20160921220310.5wk76qdsjyhvstk4@sigill.intra.peff.net>
Hi Peff,
On Wed, 21 Sep 2016, Jeff King wrote:
Show 16 quoted lines
> On Wed, Sep 21, 2016 at 08:24:14PM +0200, Johannes Schindelin wrote: > > > The new regexec_buf() function operates on buffers with an explicitly > > specified length, rather than NUL-terminated strings. > > > > We need to use this function whenever the buffer we want to pass to > > regexec() may have been mmap()ed (and is hence not NUL-terminated). > > > > Note: the original motivation for this patch was to fix a bug where > > `git diff -G <regex>` would crash. This patch converts more callers, > > though, some of which explicitly allocated and constructed > > NUL-terminated strings (or worse: modified read-only buffers to insert > > NULs). > > Nice. I probably would have split these into their own patch, but I > think it is OK here.
True. I guess I was a little lazy...
Show 24 quoted lines
> > @@ -228,18 +227,16 @@ static long ff_regexp(const char *line, long len, > > len--; > > } > > > > - line_buffer = xstrndup(line, len); /* make NUL terminated */ > > - > > Nice to see this one going away in particular, since it's called quite a > lot. According to perf, "git log -p" on git.git drops about 1.5 million > malloc calls (about 9% of the total). And here are best-of-five results > for that same command: > > [before] > real 0m14.676s > user 0m13.988s > sys 0m0.676s > > [after] > real 0m14.394s > user 0m13.624s > sys 0m0.760s > > Not a _huge_ improvement, but more significant than the run-to-run > noise.
Oh, that's nice! As you guessed, my aim was not to improve performance, but it is a pretty side effect...
Thanks for testing! Dscho