[prev in list] [next in list] [prev in thread] [next in thread] 

List:       git
Subject:    Re: [PATCH] grep: Fix race condition in delta_base_cache
From:       Nicolas Morey-Chaisemartin <devel-git () morey-chaisemartin ! com>
Date:       2011-08-31 19:13:28
Message-ID: 4E5E87D8.3080108 () morey-chaisemartin ! com
[Download RAW message or body]

On 08/31/2011 03:59 AM, Jeff King wrote:
> I notice there are some other code paths that end up in xmalloc without
> locking, too (e.g., load_file, and some strbuf_* calls). Don't those
> need locking, too, as malloc may try to release packfile memory?
> 
> builtin/pack-objects.c dealt with this already by setting a new
> "try_to_free" routine that locks[1], which we should also do. It
> probably comes up less frequently, because it only happens when we're
> under memory pressure.
> 
> -Peff
> 
> [1] Actually, it looks like the "try_to_free" routine starts as nothing,
> and then add_packed_git sets it lazily to try_to_free_pack_memory.
> But what builtin/pack-objects tries to do is overwrite that with a
> version of try_to_free_pack_memory that does locking. So it's
> possible that we would not have read any packed objects while
> setting up the threads, and add_packed_git will overwrite our
> careful, locking version of try_to_free_pack_memory.
> 
> I _think_ pack-objects is probably OK, because it will have already
> done the complete "counting objects" phase, which would look in any
> packs. But it may be harder for grep.
> 

After some more looking around, I'd say the best way to fix this is provide a lock to \
the try_to_free function from sha1_file and provide access to this lock for \
pack-objects and grep to replace respectively the read_mutex and read_sha1_mutex. So \
we can simplify the problem by having a single lock to avoid all the cache/free \
issues (and reusable elsewhere if needed in the future), whether it's shared through \
direct access or API (I'm not sure what's git policy about that). And this way, there \
is no need to duplicate what pack-objects is achieving and it gives some peace of \
mind about the fact that the try_to _free function won't be overwritten in our backs.

Nicolas Morey-Chaisemartin

--
To unsubscribe from this list: send the line "unsubscribe git" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic