# Re: git-merge-recursive segmentation error

4 messages from 2006-12-20 to 2006-12-20. Participants: Luben Tuikov, Shawn Pearce, Linus Torvalds.
Thread: https://gitlist.dev/t/43603

## Linus Torvalds, 2006-12-20 01:10

Subject: Re: git-merge-recursive segmentation error
Message-ID: <Pine.LNX.4.64.0612191709320.6766@woody.osdl.org>
URL: https://gitlist.dev/e/Pine.LNX.4.64.0612191709320.6766%40woody.osdl.org
In-Reply-To: <693577.67723.qm@web31813.mail.mud.yahoo.com>

```


On Tue, 19 Dec 2006, Luben Tuikov wrote:
>
> /home/luben/bin/git-merge: line 394: 12030 Segmentation fault      git-merge-$strategy $common -- "$head_arg" "$@"
> Merge with strategy recursive failed.

Can you run that by hand under gdb and get a backtrace?


```

## Luben Tuikov, 2006-12-20 02:15

Subject: Re: git-merge-recursive segmentation error
Message-ID: <929899.78332.qm@web31809.mail.mud.yahoo.com>
URL: https://gitlist.dev/e/929899.78332.qm%40web31809.mail.mud.yahoo.com
In-Reply-To: <Pine.LNX.4.64.0612191709320.6766@woody.osdl.org>

```
--- Linus Torvalds <torvalds@osdl.org> wrote:
> Can you run that by hand under gdb and get a backtrace?

Linus,

Auto-merging init/Kconfig
Auto-merging init/version.c

Program received signal SIGSEGV, Segmentation fault.
xdl_merge (orig=Variable "orig" is not available.
) at xdiff/xmerge.c:200
200                     t2.ptr = (char *)xe2->xdf2.recs[m->i2]->ptr;
(gdb) bt
#0  xdl_merge (orig=Variable "orig" is not available.
) at xdiff/xmerge.c:200
#1  0x000000000040322c in merge_file (o=0x7fffd4f762f0, a=0x7fffd4f76270, b=0x7fffd4f762b0,
branch1=0x7fffd4f77976 "HEAD", 
    branch2=0x7fffd4f7797b "cc016448b0bf0764928275d034e367753bde8162") at merge-recursive.c:667
#2  0x0000000000404e87 in merge_trees (head=0x12e4a00, merge=0x555328, common=0x555350,
branch1=Variable "branch1" is not available.
) at merge-recursive.c:1074
#3  0x0000000000405376 in merge (h1=0x5452f0, h2=0x545370, branch1=0x7fffd4f77976 "HEAD",
branch2=0x7fffd4f7797b "cc016448b0bf0764928275d034e367753bde8162", call_depth=0, 
    ancestor=0x5453f0, result=0x7fffd4f764e0) at merge-recursive.c:1245
#4  0x00000000004056a5 in main (argc=Variable "argc" is not available.
) at merge-recursive.c:1312

I also ran git-bisect twice over two well known but overlapping
good-bad regions and I get the same commit as being the culprit.
It seems to be commit 1510fea781cb0517eeba8c378964f7bc4f9577ab.

    Luben

```

## Shawn Pearce, 2006-12-20 02:32

Subject: Re: git-merge-recursive segmentation error
Message-ID: <20061220023223.GC27638@spearce.org>
URL: https://gitlist.dev/e/20061220023223.GC27638%40spearce.org
In-Reply-To: <929899.78332.qm@web31809.mail.mud.yahoo.com>

```
Luben Tuikov <ltuikov@yahoo.com> wrote:
> --- Linus Torvalds <torvalds@osdl.org> wrote:
> > Can you run that by hand under gdb and get a backtrace?
> 
> Linus,
> 
> Auto-merging init/Kconfig
> Auto-merging init/version.c
> 
> Program received signal SIGSEGV, Segmentation fault.
> xdl_merge (orig=Variable "orig" is not available.
> ) at xdiff/xmerge.c:200
> 200                     t2.ptr = (char *)xe2->xdf2.recs[m->i2]->ptr;
> (gdb) bt
> #0  xdl_merge (orig=Variable "orig" is not available.
> ) at xdiff/xmerge.c:200
> #1  0x000000000040322c in merge_file (o=0x7fffd4f762f0, a=0x7fffd4f76270, b=0x7fffd4f762b0,
> branch1=0x7fffd4f77976 "HEAD", 
>     branch2=0x7fffd4f7797b "cc016448b0bf0764928275d034e367753bde8162") at merge-recursive.c:667
> #2  0x0000000000404e87 in merge_trees (head=0x12e4a00, merge=0x555328, common=0x555350,
> branch1=Variable "branch1" is not available.
> ) at merge-recursive.c:1074
> #3  0x0000000000405376 in merge (h1=0x5452f0, h2=0x545370, branch1=0x7fffd4f77976 "HEAD",
> branch2=0x7fffd4f7797b "cc016448b0bf0764928275d034e367753bde8162", call_depth=0, 
>     ancestor=0x5453f0, result=0x7fffd4f764e0) at merge-recursive.c:1245
> #4  0x00000000004056a5 in main (argc=Variable "argc" is not available.
> ) at merge-recursive.c:1312
> 
> I also ran git-bisect twice over two well known but overlapping
> good-bad regions and I get the same commit as being the culprit.
> It seems to be commit 1510fea781cb0517eeba8c378964f7bc4f9577ab.

Oww, the finger points at me!  :-)

Hmm.  1510fe does not look right to me.  That return 0 should only
be activating when FAST_WORKING_DIRECTORY == 0, so you really want
this patch below.  Normally NO_FAST_WORKING_DIRECTORY is _not_
defined, which means FAST_WORKING_DIRECTORY == 1, and in that case
the if should always be false and the compiler should be stripping
the code out entirely.

What's odd is that the xdl_merge routine is crashing out because
this code activated.  It really should not have, so more work is
still required...

diff --git a/diff.c b/diff.c
index 77ba641..1c1de11 100644
--- a/diff.c
+++ b/diff.c
@@ -1194,7 +1194,7 @@ static int reuse_worktree_file(const char *name, const unsigned char *sha1, int
 	 * objects however would tend to be slower as they need
 	 * to be individually opened and inflated.
 	 */
-	if (FAST_WORKING_DIRECTORY && !want_file && has_sha1_pack(sha1, NULL))
+	if (!FAST_WORKING_DIRECTORY && !want_file && has_sha1_pack(sha1, NULL))
 		return 0;
 

```

## Luben Tuikov, 2006-12-20 02:39

Subject: Re: git-merge-recursive segmentation error
Message-ID: <289759.11706.qm@web31808.mail.mud.yahoo.com>
URL: https://gitlist.dev/e/289759.11706.qm%40web31808.mail.mud.yahoo.com
In-Reply-To: <20061220023223.GC27638@spearce.org>

```
--- Shawn Pearce <spearce@spearce.org> wrote:

> Luben Tuikov <ltuikov@yahoo.com> wrote:
> > --- Linus Torvalds <torvalds@osdl.org> wrote:
> > > Can you run that by hand under gdb and get a backtrace?
> > 
> > Linus,
> > 
> > Auto-merging init/Kconfig
> > Auto-merging init/version.c
> > 
> > Program received signal SIGSEGV, Segmentation fault.
> > xdl_merge (orig=Variable "orig" is not available.
> > ) at xdiff/xmerge.c:200
> > 200                     t2.ptr = (char *)xe2->xdf2.recs[m->i2]->ptr;
> > (gdb) bt
> > #0  xdl_merge (orig=Variable "orig" is not available.
> > ) at xdiff/xmerge.c:200
> > #1  0x000000000040322c in merge_file (o=0x7fffd4f762f0, a=0x7fffd4f76270, b=0x7fffd4f762b0,
> > branch1=0x7fffd4f77976 "HEAD", 
> >     branch2=0x7fffd4f7797b "cc016448b0bf0764928275d034e367753bde8162") at
> merge-recursive.c:667
> > #2  0x0000000000404e87 in merge_trees (head=0x12e4a00, merge=0x555328, common=0x555350,
> > branch1=Variable "branch1" is not available.
> > ) at merge-recursive.c:1074
> > #3  0x0000000000405376 in merge (h1=0x5452f0, h2=0x545370, branch1=0x7fffd4f77976 "HEAD",
> > branch2=0x7fffd4f7797b "cc016448b0bf0764928275d034e367753bde8162", call_depth=0, 
> >     ancestor=0x5453f0, result=0x7fffd4f764e0) at merge-recursive.c:1245
> > #4  0x00000000004056a5 in main (argc=Variable "argc" is not available.
> > ) at merge-recursive.c:1312
> > 
> > I also ran git-bisect twice over two well known but overlapping
> > good-bad regions and I get the same commit as being the culprit.
> > It seems to be commit 1510fea781cb0517eeba8c378964f7bc4f9577ab.
> 
> Oww, the finger points at me!  :-)
> 
> Hmm.  1510fe does not look right to me.  That return 0 should only
> be activating when FAST_WORKING_DIRECTORY == 0, so you really want
> this patch below.  Normally NO_FAST_WORKING_DIRECTORY is _not_
> defined, which means FAST_WORKING_DIRECTORY == 1, and in that case
> the if should always be false and the compiler should be stripping
> the code out entirely.
> 
> What's odd is that the xdl_merge routine is crashing out because
> this code activated.  It really should not have, so more work is
> still required...

Thanks.  It is good to see that the solution patches are identical.
That fixes the problem.

   Luben


> 
> diff --git a/diff.c b/diff.c
> index 77ba641..1c1de11 100644
> --- a/diff.c
> +++ b/diff.c
> @@ -1194,7 +1194,7 @@ static int reuse_worktree_file(const char *name, const unsigned char
> *sha1, int
>  	 * objects however would tend to be slower as they need
>  	 * to be individually opened and inflated.
>  	 */
> -	if (FAST_WORKING_DIRECTORY && !want_file && has_sha1_pack(sha1, NULL))
> +	if (!FAST_WORKING_DIRECTORY && !want_file && has_sha1_pack(sha1, NULL))
>  		return 0;
>  
>  	len = strlen(name);
> 

```
