git/list[1] front-page[2] threads[3] people[4] search[5] about
 

Re: [PATCH] grep: Fix race condition in delta_base_cache

From
Nicolas Morey-Chaisemartin <devel-git@morey-chaisemartin.com>
Date
Aug 31, 2011, 06:32 UTC
Message-ID
<4E5DD592.5090608@morey-chaisemartin.com>
In-Reply-To
<20110831015936.GB2519@sigill.intra.peff.net>
On 08/31/2011 03:59 AM, Jeff King wrote:
Show 5 quoted lines
> 
> 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?
> 

After some consideration I think they do. Grep threads definitly get the try_to_free function registered while the main one does at least some xreallock out of sha1_file.c (so not owning the lock). I guess it requires the same kind of lock pack-objects.c uses (meaning we need to set the try_to_free function in grep.c too).

Show 12 quoted lines
> 
> [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.

I'm not expert enough in git pathways to be sure about pack_objects but I agree it looks "risky". Maybe add_packed_git should check whether there already is a free routine (other than do_nothing) instead of simply setting it up the first time.

Nicolas Morey-Chaisemartin
Previous: Jeff KingNext: Nicolas Morey-Chaisemartin
Message 3 of 4 in “grep: Fix race condition in delta_base_cache”
  1. grep: Fix race condition in delta_base_cacheNicolas Morey-Chaisemartin, Aug 30, 2011
  2. Jeff KingAug 31, 2011
  3. Nicolas Morey-ChaisemartinAug 31, 2011
  4. Nicolas Morey-ChaisemartinAug 31, 2011

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.