Thread (18 messages) 18 messages, 6 authors, 2017-10-05

Re: lstat-ing delayed-filter output, was Re: playing with MSan

From: Lars Schneider <hidden>
Date: 2017-10-05 10:47:22

On 05 Oct 2017, at 05:46, Jeff King [off-list ref] wrote:

On Wed, Oct 04, 2017 at 08:30:05PM +0100, Thomas Gummerer wrote:
quoted
quoted
So I dunno. This approach is a _lot_ more convenient than trying to
rebuild all the dependencies from scratch, and it runs way faster than
valgrind.  It did find the cases that led to the patches in this
series, and at least one more: if the lstat() at the end of
entry.c:write_entry() fails, we write nonsense into the cache_entry.
Yeah valgrind found that one too, as I tried (and apparently failed :))
to explain in the cover letter.  I just haven't found the time yet to
actually try and go fix that one.
No, I just have poor memory. :)

The obvious fix is that we should check the return value of `lstat`, but
the bigger question is why and when that would fail.

The case triggered by t0021 is using the new "delayed" filter mechanism.
So at the time that write_entry() finishes, we don't actually have the
file in the filesystem. I think we need to recognize that we got delayed
and didn't actually check anything out, and skip that whole "if
(state->refresh_cache)" block. It's not clear to me, though, how we tell
the difference between the delayed and normal cases in that function.
Oh. Great catch!

But I think this lstat could also fail if we are checking out and
somebody else racily deletes our file. This is presumably sufficiently
rare that I actually wonder if we should just bail with an error, so
that the user knows something funny is going on.
That sounds good to me!


I tried to address both issues here:
https://public-inbox.org/git/20171005104407.65948-1-lars.schneider@autodesk.com/

Cheers,
Lars
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help