Re: [RFH] index_name_exists() conversion

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On Thu, 21 Feb 2008, Junio C Hamano wrote:
>
>          struct dir_entry *dir_add_name(struct dir_struct *dir, const c...
>          {
>         -	if (cache_name_pos(pathname, len) >= 0)
>         +	if (cache_name_exists(pathname, len))
>                         return NULL;
> 
>                 ALLOC_GROW(dir->entries, dir->nr+1, dir->alloc);
> 
> This used to check if there is a stage#0 entry of that name in
> the index.  But the name-hash based index look-up does not care
> about the stage as far as I can tell.

I think the new code is much more correct, and we should always care about 
whether the name exists in the index, not whether it exists in stage#0.

IOW, if we ask for "show other files", we definitely want to ignore 
paths we already know about, and conversely, if we do an operation that is 
supposed to care about files in a directory we already know about, then an 
unmerged entry should count the same as a merged one.

> This could be related to the recent "status segfaults, bisected
> to cf558704" issue posted to the list.  I dunno.

Is there a backtrace for that? It's certainly possible that some strange 
path depended on only matching merged entries, but I would consider that 
unlikely and buggy.

The segfault is more likely related to something more subtle, like 
actually freeing a "cache_entry" after having removed it from the index 
(which we should never do - they were always supposed to stay around 
because they might not have been allocated with 'malloc()' in the first 
place, but with the name indexing thing it now is *always* a bug to do it, 
even if you _did_ allocate it with free()).

(Also, some code used to just reuse the same cache entry multiple times, 
and that got illegal for the same reason).

		Linus
-
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

[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]

  Powered by Linux