* testsuite failures in mainline... @ 2007-12-14 18:43 David Miller 2007-12-14 19:15 ` Junio C Hamano 0 siblings, 1 reply; 9+ messages in thread From: David Miller @ 2007-12-14 18:43 UTC (permalink / raw) To: git I've been seeing this for I think a week or two, and I can't figure out if it's some local problem of mine. I even reran the testsuite with "PATH=$(pwd):$PATH" just in case it was picking up my existing 1.5.3.7 installation for some reason, but it still fails even in that case. Is the following a known issue? *** t3200-branch.sh *** * ok 1: prepare a trivial repository * ok 2: git branch --help should not have created a bogus branch * ok 3: git branch abc should create a branch * ok 4: git branch a/b/c should create a branch * ok 5: git branch -l d/e/f should create a branch and a log * ok 6: git branch -d d/e/f should delete a branch and a log * ok 7: git branch j/k should work after branch j has been deleted * ok 8: git branch l should work after branch l/m has been deleted * ok 9: git branch -m m m/m should work * ok 10: git branch -m n/n n should work * ok 11: git branch -m o/o o should fail when o/p exists * ok 12: git branch -m q r/q should fail when r exists * ok 13: git branch -m q q2 without config should succeed * ok 14: git branch -m s/s s should work when s/t is deleted * ok 15: config information was renamed, too * ok 16: git branch -m u v should fail when the reflog for u is a symlink * ok 17: test tracking setup via --track * ok 18: test tracking setup (non-wildcard, matching) * ok 19: test tracking setup (non-wildcard, not matching) * FAIL 20: test tracking setup via config git config branch.autosetupmerge true && git config remote.local.url . && git config remote.local.fetch refs/heads/*:refs/remotes/local/* && (git show-ref -q refs/remotes/local/master || git-fetch local) && git branch my3 local/master && test $(git config branch.my3.remote) = local && test $(git config branch.my3.merge) = refs/heads/master * FAIL 21: avoid ambiguous track git config branch.autosetupmerge true && git config remote.ambi1.url = lalala && git config remote.ambi1.fetch = refs/heads/lalala:refs/heads/master && git config remote.ambi2.url = lilili && git config remote.ambi2.fetch = refs/heads/lilili:refs/heads/master && git branch all1 master && test -z "$(git config branch.all1.merge)" * ok 22: test overriding tracking setup via --no-track * FAIL 23: no tracking without .fetch entries git branch --track my6 s && test -z "$(git config branch.my6.remote)" && test -z "$(git config branch.my6.merge)" * FAIL 24: test tracking setup via --track but deeper git config remote.local.url . && git config remote.local.fetch refs/heads/*:refs/remotes/local/* && (git show-ref -q refs/remotes/local/o/o || git-fetch local) && git branch --track my7 local/o/o && test "$(git config branch.my7.remote)" = local && test "$(git config branch.my7.merge)" = refs/heads/o/o * FAIL 25: test deleting branch deletes branch config git branch -d my7 && test -z "$(git config branch.my7.remote)" && test -z "$(git config branch.my7.merge)" * ok 26: test deleting branch without config * ok 27: git checkout -b g/h/i -l should create a branch and a log * failed 5 among 27 test(s) ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: testsuite failures in mainline... 2007-12-14 18:43 testsuite failures in mainline David Miller @ 2007-12-14 19:15 ` Junio C Hamano 2007-12-14 19:17 ` David Miller 0 siblings, 1 reply; 9+ messages in thread From: Junio C Hamano @ 2007-12-14 19:15 UTC (permalink / raw) To: David Miller; +Cc: git David Miller <davem@davemloft.net> writes: > I've been seeing this for I think a week or two, and I can't figure > out if it's some local problem of mine. I even reran the testsuite > with "PATH=$(pwd):$PATH" just in case it was picking up my existing > 1.5.3.7 installation for some reason, but it still fails even in that > case. > > Is the following a known issue? No, you are the first to report it here. I do not push out the tip of 'master' and 'next' unless all tests pass in my primary repository on my private machine and in a repository under my k.org account, so you can at least assume all tests has passed for _some_ people. It of course does not guarantee there isn't timing related bugs I am not catching. > *** t3200-branch.sh *** > ... > * FAIL 20: test tracking setup via config > git config branch.autosetupmerge true && > git config remote.local.url . && > git config remote.local.fetch refs/heads/*:refs/remotes/local/* && > (git show-ref -q refs/remotes/local/master || git-fetch local) && > git branch my3 local/master && > test $(git config branch.my3.remote) = local && > test $(git config branch.my3.merge) = refs/heads/master When I can reproduce a breakage, in our tests, I'd run cd t && sh -x t3200-branch.sh -i -v (replace "t3200-*" with the failing test) and see which one of the steps chained with && is breaking first. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: testsuite failures in mainline... 2007-12-14 19:15 ` Junio C Hamano @ 2007-12-14 19:17 ` David Miller 2007-12-14 20:10 ` Junio C Hamano 2007-12-14 21:45 ` Alex Riesen 0 siblings, 2 replies; 9+ messages in thread From: David Miller @ 2007-12-14 19:17 UTC (permalink / raw) To: gitster; +Cc: git From: Junio C Hamano <gitster@pobox.com> Date: Fri, 14 Dec 2007 11:15:01 -0800 > When I can reproduce a breakage, in our tests, I'd run > > cd t && sh -x t3200-branch.sh -i -v > > (replace "t3200-*" with the failing test) and see which one of the steps > chained with && is breaking first. Looks like a malloc() failure: + test_expect_success 'test tracking setup via config' 'git config branch.autosetupmerge true && git config remote.local.url . && git config remote.local.fetch refs/heads/*:refs/remotes/local/* && (git show-ref -q refs/remotes/local/master || git-fetch local) && git branch my3 local/master && test $(git config branch.my3.remote) = local && test $(git config branch.my3.merge) = refs/heads/master' + test 2 = 2 + test_skip 'test tracking setup via config' 'git config branch.autosetupmerge true && git config remote.local.url . && git config remote.local.fetch refs/heads/*:refs/remotes/local/* && (git show-ref -q refs/remotes/local/master || git-fetch local) && git branch my3 local/master && test $(git config branch.my3.remote) = local && test $(git config branch.my3.merge) = refs/heads/master' ++ expr ./t3200-branch.sh : '.*/\(t[0-9]*\)-[^/]*$' + this_test=t3200 ++ expr 19 + 1 + this_test=t3200.20 + to_skip= + case "$to_skip" in + false + say 'expecting success: git config branch.autosetupmerge true && git config remote.local.url . && git config remote.local.fetch refs/heads/*:refs/remotes/local/* && (git show-ref -q refs/remotes/local/master || git-fetch local) && git branch my3 local/master && test $(git config branch.my3.remote) = local && test $(git config branch.my3.merge) = refs/heads/master' + say_color info 'expecting success: git config branch.autosetupmerge true && git config remote.local.url . && git config remote.local.fetch refs/heads/*:refs/remotes/local/* && (git show-ref -q refs/remotes/local/master || git-fetch local) && git branch my3 local/master && test $(git config branch.my3.remote) = local && test $(git config branch.my3.merge) = refs/heads/master' + test -z info + shift + echo '* expecting success: git config branch.autosetupmerge true && git config remote.local.url . && git config remote.local.fetch refs/heads/*:refs/remotes/local/* && (git show-ref -q refs/remotes/local/master || git-fetch local) && git branch my3 local/master && test $(git config branch.my3.remote) = local && test $(git config branch.my3.merge) = refs/heads/master' * expecting success: git config branch.autosetupmerge true && git config remote.local.url . && git config remote.local.fetch refs/heads/*:refs/remotes/local/* && (git show-ref -q refs/remotes/local/master || git-fetch local) && git branch my3 local/master && test $(git config branch.my3.remote) = local && test $(git config branch.my3.merge) = refs/heads/master + test_run_ 'git config branch.autosetupmerge true && git config remote.local.url . && git config remote.local.fetch refs/heads/*:refs/remotes/local/* && (git show-ref -q refs/remotes/local/master || git-fetch local) && git branch my3 local/master && test $(git config branch.my3.remote) = local && test $(git config branch.my3.merge) = refs/heads/master' + eval 'git config branch.autosetupmerge true && git config remote.local.url . && git config remote.local.fetch refs/heads/*:refs/remotes/local/* && (git show-ref -q refs/remotes/local/master || git-fetch local) && git branch my3 local/master && test $(git config branch.my3.remote) = local && test $(git config branch.my3.merge) = refs/heads/master' ++ git config branch.autosetupmerge true ++ git config remote.local.url . ++ git config remote.local.fetch 'refs/heads/*:refs/remotes/local/*' ++ git show-ref -q refs/remotes/local/master ++ git branch my3 local/master fatal: Out of memory, malloc failed + eval_ret=128 + return 0 + '[' 0 = 0 -a 128 = 0 ']' + test_failure_ 'test tracking setup via config' 'git config branch.autosetupmerge true && git config remote.local.url . && git config remote.local.fetch refs/heads/*:refs/remotes/local/* && (git show-ref -q refs/remotes/local/master || git-fetch local) && git branch my3 local/master && test $(git config branch.my3.remote) = local && test $(git config branch.my3.merge) = refs/heads/master' ++ expr 19 + 1 + test_count=20 ++ expr 0 + 1 + test_failure=1 + say_color error 'FAIL 20: test tracking setup via config' + test -z error + shift + echo '* FAIL 20: test tracking setup via config' * FAIL 20: test tracking setup via config + shift + echo 'git config branch.autosetupmerge true && git config remote.local.url . && git config remote.local.fetch refs/heads/*:refs/remotes/local/* && (git show-ref -q refs/remotes/local/master || git-fetch local) && git branch my3 local/master && test $(git config branch.my3.remote) = local && test $(git config branch.my3.merge) = refs/heads/master' + sed -e 's/^/ /' git config branch.autosetupmerge true && git config remote.local.url . && git config remote.local.fetch refs/heads/*:refs/remotes/local/* && (git show-ref -q refs/remotes/local/master || git-fetch local) && git branch my3 local/master && test $(git config branch.my3.remote) = local && test $(git config branch.my3.merge) = refs/heads/master + test t = '' + trap - exit + exit 1 ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: testsuite failures in mainline... 2007-12-14 19:17 ` David Miller @ 2007-12-14 20:10 ` Junio C Hamano 2007-12-14 21:45 ` Alex Riesen 1 sibling, 0 replies; 9+ messages in thread From: Junio C Hamano @ 2007-12-14 20:10 UTC (permalink / raw) To: David Miller; +Cc: git David Miller <davem@davemloft.net> writes: > From: Junio C Hamano <gitster@pobox.com> > Date: Fri, 14 Dec 2007 11:15:01 -0800 > >> When I can reproduce a breakage, in our tests, I'd run >> >> cd t && sh -x t3200-branch.sh -i -v >> >> (replace "t3200-*" with the failing test) and see which one of the steps >> chained with && is breaking first. > > Looks like a malloc() failure: > ... > ++ git branch my3 local/master > fatal: Out of memory, malloc failed Do you mean this is a malloc() failure that you can reliable reproduce? Puzzled... ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: testsuite failures in mainline... 2007-12-14 19:17 ` David Miller 2007-12-14 20:10 ` Junio C Hamano @ 2007-12-14 21:45 ` Alex Riesen 2007-12-14 22:24 ` David Miller 1 sibling, 1 reply; 9+ messages in thread From: Alex Riesen @ 2007-12-14 21:45 UTC (permalink / raw) To: David Miller; +Cc: gitster, git David Miller, Fri, Dec 14, 2007 20:17:36 +0100: > ++ git show-ref -q refs/remotes/local/master > ++ git branch my3 local/master > fatal: Out of memory, malloc failed Something unusual about the system? Like a malloc debugger in LD_PRELOAD configuration? Maybe you could retry with a little bit instrumentation? (The program last failed (git-branch) is normally very benign...) Something like this: diff --git a/git-compat-util.h b/git-compat-util.h index 79eb10e..a9cc249 100644 --- a/git-compat-util.h +++ b/git-compat-util.h @@ -230,7 +230,8 @@ static inline char* xstrdup(const char *str) return ret; } -static inline void *xmalloc(size_t size) +#define xmalloc(size) xmalloc_((size),__FILE__,__LINE__) +static inline void *xmalloc_(size_t size, const char *file, int line) { void *ret = malloc(size); if (!ret && !size) @@ -241,7 +242,8 @@ static inline void *xmalloc(size_t size) if (!ret && !size) ret = malloc(1); if (!ret) - die("Out of memory, malloc failed"); + die("Out of memory, malloc(%u) at %s:%d failed", + size, file, line); } #ifdef XMALLOC_POISON memset(ret, 0xA5, size); @@ -263,7 +265,8 @@ static inline char *xstrndup(const char *str, size_t len) return xmemdupz(str, p ? p - str : len); } -static inline void *xrealloc(void *ptr, size_t size) +#define xrealloc(ptr,size) xrealloc_((ptr),(size),__FILE__,__LINE__) +static inline void *xrealloc_(void *ptr, size_t size, const char *file, int line) { void *ret = realloc(ptr, size); if (!ret && !size) @@ -274,7 +277,8 @@ static inline void *xrealloc(void *ptr, size_t size) if (!ret && !size) ret = realloc(ptr, 1); if (!ret) - die("Out of memory, realloc failed"); + die("Out of memory, realloc(%u) at %s:%d failed", + size, file, line); } return ret; } ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: testsuite failures in mainline... 2007-12-14 21:45 ` Alex Riesen @ 2007-12-14 22:24 ` David Miller 2007-12-14 23:18 ` Junio C Hamano 0 siblings, 1 reply; 9+ messages in thread From: David Miller @ 2007-12-14 22:24 UTC (permalink / raw) To: raa.lkml; +Cc: gitster, git From: Alex Riesen <raa.lkml@gmail.com> Date: Fri, 14 Dec 2007 22:45:33 +0100 > David Miller, Fri, Dec 14, 2007 20:17:36 +0100: > > ++ git show-ref -q refs/remotes/local/master > > ++ git branch my3 local/master > > fatal: Out of memory, malloc failed > > Something unusual about the system? Like a malloc debugger in > LD_PRELOAD configuration? No, I'm not doing anything fancy like that. > Maybe you could retry with a little bit instrumentation? > (The program last failed (git-branch) is normally very benign...) > > Something like this: Here is the output from the debugging patch: ++ git branch my3 local/master fatal: Out of memory, malloc(4293963242) at git-compat-util.h:256 failed This bogus size value in hex is 0xfff0adea, FWIW. I added similar diags to xmemdupz() and xstrndup() and that gives us: fatal: Out of memory, xstrndup(0x103ebf:4293902657:4293902657) at remote.c:112 failed (the first three values are xstrndup() vars 'str', 'len', and the computed second argument to xmemdupz). That bogus length is being generated via the length argument passed to make_branch() by handle_config() in remote.c: if (!prefixcmp(key, "branch.")) { name = key + 7; subkey = strrchr(name, '.'); branch = make_branch(name, subkey - name); What if 'subkey' is NULL? I bet that's what happening here. I added a debugging check for this and indeed, subkey is NULL in handle_condig() and that's why 'subkey - name' generates that bogus negative length. The string 'key' is "branch.autosetupmerge" in this case. ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: testsuite failures in mainline... 2007-12-14 22:24 ` David Miller @ 2007-12-14 23:18 ` Junio C Hamano 2007-12-15 0:08 ` David Miller 0 siblings, 1 reply; 9+ messages in thread From: Junio C Hamano @ 2007-12-14 23:18 UTC (permalink / raw) To: David Miller; +Cc: raa.lkml, git David Miller <davem@davemloft.net> writes: > if (!prefixcmp(key, "branch.")) { > name = key + 7; > subkey = strrchr(name, '.'); > branch = make_branch(name, subkey - name); > > What if 'subkey' is NULL? I bet that's what happening here. Wow, good eyes. It makes me wonder what my C library has been returning during the tests... --- remote.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-) diff --git a/remote.c b/remote.c index 3fb0f99..0e00680 100644 --- a/remote.c +++ b/remote.c @@ -220,11 +220,11 @@ static int handle_config(const char *key, const char *value) if (!prefixcmp(key, "branch.")) { name = key + 7; subkey = strrchr(name, '.'); - branch = make_branch(name, subkey - name); if (!subkey) return 0; if (!value) return 0; + branch = make_branch(name, subkey - name); if (!strcmp(subkey, ".remote")) { branch->remote_name = xstrdup(value); if (branch == current_branch) ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: testsuite failures in mainline... 2007-12-14 23:18 ` Junio C Hamano @ 2007-12-15 0:08 ` David Miller 2007-12-15 1:18 ` Johannes Schindelin 0 siblings, 1 reply; 9+ messages in thread From: David Miller @ 2007-12-15 0:08 UTC (permalink / raw) To: gitster; +Cc: raa.lkml, git From: Junio C Hamano <gitster@pobox.com> Date: Fri, 14 Dec 2007 15:18:02 -0800 > It makes me wonder what my C library has been returning during the > tests... If the 'name' string is high enough in the address space, the 'NULL - name' is still small enough to keep malloc() from failing. It might be neat to defeat bugs like this by making a pointer_diff(a,b) macro or similar, that abort()'s when one of the arguments is NULL. Otherwise these bugs are so hard to find. I tested your patch and that part of the testsuite passes now. It now fails on t9301-fast-export.sh + eval ' MASTER=$(git rev-parse --verify master) && REIN=$(git rev-parse --verify rein) && WER=$(git rev-parse --verify wer) && MUSS=$(git rev-parse --verify muss) && mkdir new && git --git-dir=new/.git init && git fast-export --all | (cd new && git fast-import && test $MASTER = $(git rev-parse --verify refs/heads/master) && test $REIN = $(git rev-parse --verify refs/tags/rein) && test $WER = $(git rev-parse --verify refs/heads/wer) && test $MUSS = $(git rev-parse --verify refs/tags/muss)) ' +++ git rev-parse --verify master ++ MASTER=e529bca54909ee82f6ed442ef855ff541aec034c +++ git rev-parse --verify rein ++ REIN=e529bca54909ee82f6ed442ef855ff541aec034c +++ git rev-parse --verify wer ++ WER=ce754ded7a378a51278b2ff76d6898ec20093068 +++ git rev-parse --verify muss ++ MUSS=d85ef2305117d94969d4990d3c752752d4719be1 ++ mkdir new ++ git --git-dir=new/.git init Initialized empty Git repository in new/.git/ ++ git fast-export --all ++ cd new ++ git fast-import ./test-lib.sh: line 194: 17409 Bus error (core dumped) git fast-import This usually indicates an unaligned memory access on sparc, which is where I'm running this. The problem is the pool allocator in fast-import.c, it aligned objects on the size of a pointer. But this is insufficient, it needs to be at least "uintmax_t" aligned. Also, mem_pool->space needs to be suitably aligned for a uintmax_t as well. The following patch fixes the bug, and together with your patch all test cases now pass for me on sparc. Signed-off-by: David S. Miller <davem@davemloft.net> diff --git a/fast-import.c b/fast-import.c index 98c2bd5..4646c05 100644 --- a/fast-import.c +++ b/fast-import.c @@ -196,7 +196,7 @@ struct mem_pool struct mem_pool *next_pool; char *next_free; char *end; - char space[FLEX_ARRAY]; /* more */ + uintmax_t space[FLEX_ARRAY]; /* more */ }; struct atom_str @@ -534,15 +534,15 @@ static void *pool_alloc(size_t len) total_allocd += sizeof(struct mem_pool) + mem_pool_alloc; p = xmalloc(sizeof(struct mem_pool) + mem_pool_alloc); p->next_pool = mem_pool; - p->next_free = p->space; + p->next_free = (char *) p->space; p->end = p->next_free + mem_pool_alloc; mem_pool = p; } r = p->next_free; - /* round out to a pointer alignment */ - if (len & (sizeof(void*) - 1)) - len += sizeof(void*) - (len & (sizeof(void*) - 1)); + /* round out to a 'uintmax_t' alignment */ + if (len & (sizeof(uintmax_t) - 1)) + len += sizeof(uintmax_t) - (len & (sizeof(uintmax_t) - 1)); p->next_free += len; return r; } ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: testsuite failures in mainline... 2007-12-15 0:08 ` David Miller @ 2007-12-15 1:18 ` Johannes Schindelin 0 siblings, 0 replies; 9+ messages in thread From: Johannes Schindelin @ 2007-12-15 1:18 UTC (permalink / raw) To: David Miller; +Cc: gitster, raa.lkml, git Hi, On Fri, 14 Dec 2007, David Miller wrote: > - char space[FLEX_ARRAY]; /* more */ > + uintmax_t space[FLEX_ARRAY]; /* more */ Usually, a much better idea is to use union { char cp[FLEX_ARRAY]; uintmax_t up[FLEX_ARRAY]; } because that is exactly the reason union was invented for. Ciao, Dscho ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2007-12-15 1:19 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2007-12-14 18:43 testsuite failures in mainline David Miller 2007-12-14 19:15 ` Junio C Hamano 2007-12-14 19:17 ` David Miller 2007-12-14 20:10 ` Junio C Hamano 2007-12-14 21:45 ` Alex Riesen 2007-12-14 22:24 ` David Miller 2007-12-14 23:18 ` Junio C Hamano 2007-12-15 0:08 ` David Miller 2007-12-15 1:18 ` Johannes Schindelin
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).