git@vger.kernel.org mailing list mirror (one of many)
 help / color / mirror / code / Atom feed
* Recent gits corrupts repository
@ 2011-10-27  6:50 Øyvind A. Holm
  2011-10-27  7:00 ` Matthieu Moy
  0 siblings, 1 reply; 3+ messages in thread
From: Øyvind A. Holm @ 2011-10-27  6:50 UTC (permalink / raw
  To: git

Something really weird is happening to a repository I'm working on, and
it's only a problem in recent Gits. A bisect shows that from
v1.7.6-1-g2548183 ("fix phantom untracked files when core.ignorecase is
set") and newer, this happens:

  $ git clone git://gitorious.org/tz/tzfiles.git
  Cloning into tzfiles...
  remote: Counting objects: 358, done.
  remote: Compressing objects: 100% (352/352), done.
  remote: Total 358 (delta 8), reused 343 (delta 3)
  Receiving objects: 100% (358/358), 44.15 MiB | 3.76 MiB/s, done.
  Resolving deltas: 100% (8/8), done.

  $ cd tzfiles/

  $ git status
  git: malloc.c:3096: sYSMALLOc: Assertion `(old_top == (((mbinptr)
(((char *) &((av)->bins[((1) - 1) * 2])) - __builtin_offsetof (struct
malloc_chunk, fd)))) && old_size == 0) || ((unsigned long) (old_size)
>= (unsigned long)((((__builtin_offsetof (struct malloc_chunk,
fd_nextsize))+((2 * (sizeof(size_t))) - 1)) & ~((2 * (sizeof(size_t)))
- 1))) && ((old_top)->size & 0x1) && ((unsigned long)old_end &
pagemask) == 0)' failed.
  Aborted

  $ git status
  *** glibc detected *** git: free(): invalid next size (normal): 0x089f5588 ***
  ======= Backtrace: =========
  /lib/tls/i686/cmov/libc.so.6(+0x6b591)[0xb74d3591]
  /lib/tls/i686/cmov/libc.so.6(+0x6cde8)[0xb74d4de8]
  /lib/tls/i686/cmov/libc.so.6(cfree+0x6d)[0xb74d7ecd]
  /lib/tls/i686/cmov/libc.so.6(+0x5c410)[0xb74c4410]
  /lib/tls/i686/cmov/libc.so.6(fopen64+0x2c)[0xb74c69ec]
  git[0x80c1fdd]
  git[0x811b82b]
  git[0x80637ea]
  git[0x804bc87]
  git[0x804be93]
  /lib/tls/i686/cmov/libc.so.6(__libc_start_main+0xe6)[0xb747ebd6]
  git[0x804b521]
  ======= Memory map: ========
  08048000-08160000 r-xp 00000000 ca:00 2474445
/usr/local/varprg/git.master.v1.7.7-419-g87009ed/bin/git
  08160000-08161000 r--p 00117000 ca:00 2474445
/usr/local/varprg/git.master.v1.7.7-419-g87009ed/bin/git
  08161000-08166000 rw-p 00118000 ca:00 2474445
/usr/local/varprg/git.master.v1.7.7-419-g87009ed/bin/git
  08166000-081b0000 rw-p 00000000 00:00 0
  089ec000-08a0d000 rw-p 00000000 00:00 0          [heap]
  b7300000-b7321000 rw-p 00000000 00:00 0
  b7321000-b7400000 ---p 00000000 00:00 0
  b7444000-b7461000 r-xp 00000000 ca:00 24591      /lib/libgcc_s.so.1
  b7461000-b7462000 r--p 0001c000 ca:00 24591      /lib/libgcc_s.so.1
  b7462000-b7463000 rw-p 0001d000 ca:00 24591      /lib/libgcc_s.so.1
  b7463000-b7464000 rw-p 00000000 00:00 0
  b7464000-b7466000 r-xp 00000000 ca:00 1679643
/lib/tls/i686/cmov/libdl-2.11.1.so
  b7466000-b7467000 r--p 00001000 ca:00 1679643
/lib/tls/i686/cmov/libdl-2.11.1.so
  b7467000-b7468000 rw-p 00002000 ca:00 1679643
/lib/tls/i686/cmov/libdl-2.11.1.so
  b7468000-b75bb000 r-xp 00000000 ca:00 25961
/lib/tls/i686/cmov/libc-2.11.1.so
  b75bb000-b75bc000 ---p 00153000 ca:00 25961
/lib/tls/i686/cmov/libc-2.11.1.so
  b75bc000-b75be000 r--p 00153000 ca:00 25961
/lib/tls/i686/cmov/libc-2.11.1.so
  b75be000-b75bf000 rw-p 00155000 ca:00 25961
/lib/tls/i686/cmov/libc-2.11.1.so
  b75bf000-b75c3000 rw-p 00000000 00:00 0
  b75c3000-b75d8000 r-xp 00000000 ca:00 1679654
/lib/tls/i686/cmov/libpthread-2.11.1.so
  b75d8000-b75d9000 r--p 00014000 ca:00 1679654
/lib/tls/i686/cmov/libpthread-2.11.1.so
  b75d9000-b75da000 rw-p 00015000 ca:00 1679654
/lib/tls/i686/cmov/libpthread-2.11.1.so
  b75da000-b75dc000 rw-p 00000000 00:00 0
  b75dc000-b7714000 r-xp 00000000 ca:00 2007508
/lib/i686/cmov/libcrypto.so.0.9.8
  b7714000-b771c000 r--p 00137000 ca:00 2007508
/lib/i686/cmov/libcrypto.so.0.9.8
  b771c000-b772a000 rw-p 0013f000 ca:00 2007508
/lib/i686/cmov/libcrypto.so.0.9.8
  b772a000-b772e000 rw-p 00000000 00:00 0
  b772e000-b7741000 r-xp 00000000 ca:00 24635      /lib/libz.so.1.2.3.3
  b7741000-b7742000 r--p 00012000 ca:00 24635      /lib/libz.so.1.2.3.3
  b7742000-b7743000 rw-p 00013000 ca:00 24635      /lib/libz.so.1.2.3.3
  b774b000-b774f000 rw-p 00000000 00:00 0
  b774f000-b776a000 r-xp 00000000 ca:00 25083      /lib/ld-2.11.1.so
  b776a000-b776b000 r--p 0001a000 ca:00 25083      /lib/ld-2.11.1.so
  b776b000-b776c000 rw-p 0001b000 ca:00 25083      /lib/ld-2.11.1.so
  bfc1b000-bfc3c000 rw-p 00000000 00:00 0          [stack]
  f57fe000-f57ff000 r-xp 00000000 00:00 0          [vdso]
  Aborted

  $

Reverting 2548183 fixes the problem.

It also seems that the behaviour is not consistent. Sometimes, after
running the second "git status", this happens:

  $ git st
  error: index uses  extension, which we do not understand
  fatal: index file corrupt

And no, this is not memory corruption or something like that, the same
thing happens on my laptop.

Another curious thing: When using an earlier git (for example v1.7.6 in
the example below) on this repo after a "git status" with a recent git,
it segfaults. This indicates that recents Gits messes up something so
even old gits won't work in that repo anymore. This is the last lines of
an strace:

  open(".git/objects/pack",
O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_CLOEXEC) = 3
  getdents64(3, /* 4 entries */, 32768)   = 192
  access(".git/objects/pack/pack-b9b05d1e8fed49138c1ffda8f0f2b7d7a8d31c6a.keep",
F_OK) = -1 ENOENT (No such file or directory)
  stat64(".git/objects/pack/pack-b9b05d1e8fed49138c1ffda8f0f2b7d7a8d31c6a.pack",
{st_mode=S_IFREG|0444, st_size=46297839, ...}) = 0
  getdents64(3, /* 0 entries */, 32768)   = 0
  close(3)                                = 0
  open(".git/objects/info/alternates", O_RDONLY|O_LARGEFILE|O_NOATIME)
= -1 ENOENT (No such file or directory)
  open(".git/objects/pack/pack-b9b05d1e8fed49138c1ffda8f0f2b7d7a8d31c6a.idx",
O_RDONLY|O_LARGEFILE|O_NOATIME) = 3
  fstat64(3, {st_mode=S_IFREG|0444, st_size=11096, ...}) = 0
  mmap2(NULL, 11096, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb76e1000
  close(3)                                = 0
  getrlimit(RLIMIT_NOFILE, {rlim_cur=1024, rlim_max=1024}) = 0
  open(".git/objects/pack/pack-b9b05d1e8fed49138c1ffda8f0f2b7d7a8d31c6a.pack",
O_RDONLY|O_LARGEFILE|O_NOATIME) = 3
  fstat64(3, {st_mode=S_IFREG|0444, st_size=46297839, ...}) = 0
  fcntl64(3, F_GETFD)                     = 0
  fcntl64(3, F_SETFD, FD_CLOEXEC)         = 0
  read(3, "PACK\0\0\0\2\0\0\1f", 12)      = 12
  _llseek(3, 46297819, [46297819], SEEK_SET) = 0
  read(3, ",j\212\0375c\335\0k\244)\256\376\24\v\344\6]0\230", 20) = 20
  mmap2(NULL, 33554432, PROT_READ, MAP_PRIVATE, 3, 0) = 0xb53fc000
  open(".git/info/grafts", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such
file or directory)
  open(".git/shallow", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file
or directory)
  brk(0x977e000)                          = 0x977e000
  open("/proc/meminfo", O_RDONLY)         = 4
  fstat64(4, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0
  mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS,
-1, 0) = 0xb76e0000
  read(4, "MemTotal:        1028684 kB\nMemF"..., 1024) = 1024
  close(4)                                = 0
  munmap(0xb76e0000, 4096)                = 0
  access(".git/info/exclude", R_OK)       = 0
  open(".git/info/exclude", O_RDONLY|O_LARGEFILE) = 4
  fstat64(4, {st_mode=S_IFREG|0644, st_size=240, ...}) = 0
  read(4, "# git ls-files --others --exclud"..., 240) = 240
  close(4)                                = 0
  access("/home/sunny/src/git/home-sunny/.gitexclude", R_OK) = 0
  open("/home/sunny/src/git/home-sunny/.gitexclude", O_RDONLY|O_LARGEFILE) = 4
  fstat64(4, {st_mode=S_IFREG|0644, st_size=86, ...}) = 0
  read(4, "\n# ~/.gitexclude\n# File ID: bcf6"..., 86) = 86
  close(4)                                = 0
  open(".", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY|O_CLOEXEC) = 4
  getdents64(4, /* 7 entries */, 32768)   = 216
  open(".gitignore", O_RDONLY|O_LARGEFILE) = -1 ENOENT (No such file
or directory)
  --- SIGSEGV (Segmentation fault) @ 0 (0) ---
  +++ killed by SIGSEGV +++

Complete strace dump is stored at https://gist.github.com/1318830 .

I'm currently using 1.7.7.419.g87009 , compiled with a regular "make"
from the master branch. A quick test with newest master
(v1.7.7.1-475-g997a194) shows the same error. Not installed properly,
though, as I haven't run the test suite yet.

System info:

  Ubuntu 10.04.3 LTS
  gcc (Ubuntu 4.4.3-4ubuntu5) 4.4.3
  GNU ld (GNU Binutils for Ubuntu) 2.20.1-system.20100303

Same thing happens with Ubuntu 10.10 on my laptop.

Even when creating a bundle and recloning, this happens. Also when
initialising a new, clean repo and fetching from the original local
clone, same story.

The repository was created on 2011-10-08 06:54:00 +0200, and because I
create a tag everytime I compile (using
<https://github.com/sunny256/utils/blob/master/build-git>), I know the
repository was created with git v1.7.7-138-g7f41b6b.

Because Gmail probably will wrap long lines, a copy of this message is
stored at <https://gist.github.com/1318935>.

Regards,
Øyvind

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: Recent gits corrupts repository
  2011-10-27  6:50 Recent gits corrupts repository Øyvind A. Holm
@ 2011-10-27  7:00 ` Matthieu Moy
  2011-10-27  7:30   ` Øyvind A. Holm
  0 siblings, 1 reply; 3+ messages in thread
From: Matthieu Moy @ 2011-10-27  7:00 UTC (permalink / raw
  To: Øyvind A. Holm; +Cc: git

Øyvind A. Holm <sunny@sunbase.org> writes:

>   $ git status
>   git: malloc.c:3096: sYSMALLOc: Assertion `(old_top == (((mbinptr)
> (((char *) &((av)->bins[((1) - 1) * 2])) - __builtin_offsetof (struct
> malloc_chunk, fd)))) && old_size == 0) || ((unsigned long) (old_size)
>>= (unsigned long)((((__builtin_offsetof (struct malloc_chunk,
> fd_nextsize))+((2 * (sizeof(size_t))) - 1)) & ~((2 * (sizeof(size_t)))
> - 1))) && ((old_top)->size & 0x1) && ((unsigned long)old_end &
> pagemask) == 0)' failed.
>   Aborted

This looks very much like

  http://thread.gmane.org/gmane.comp.version-control.git/184094

for which a patch is pending in "next":

  8f41c07 read-cache.c: fix index memory allocation

-- 
Matthieu Moy
http://www-verimag.imag.fr/~moy/

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: Recent gits corrupts repository
  2011-10-27  7:00 ` Matthieu Moy
@ 2011-10-27  7:30   ` Øyvind A. Holm
  0 siblings, 0 replies; 3+ messages in thread
From: Øyvind A. Holm @ 2011-10-27  7:30 UTC (permalink / raw
  To: Matthieu Moy; +Cc: git

On 27 October 2011 09:00, Matthieu Moy <Matthieu.Moy@grenoble-inp.fr> wrote:
> Øyvind A. Holm <sunny@sunbase.org> writes:
> >   $ git status
> >   git: malloc.c:3096: sYSMALLOc: Assertion `(old_top == (((mbinptr)
> > (((char *) &((av)->bins[((1) - 1) * 2])) - __builtin_offsetof (struct
> > malloc_chunk, fd)))) && old_size == 0) || ((unsigned long) (old_size)
> > >= (unsigned long)((((__builtin_offsetof (struct malloc_chunk,
> > fd_nextsize))+((2 * (sizeof(size_t))) - 1)) & ~((2 * (sizeof(size_t)))
> > - 1))) && ((old_top)->size & 0x1) && ((unsigned long)old_end &
> > pagemask) == 0)' failed.
> >   Aborted
>
> This looks very much like
>
>  http://thread.gmane.org/gmane.comp.version-control.git/184094
>
> for which a patch is pending in "next":
>
>  8f41c07 read-cache.c: fix index memory allocation

Argh, that was some wasted hours, should have searched the mailing list
first. But hey, I'm not complaining. :) Glad there's a fix coming up. I
cherry-picked 8f41c07, and it seems to work nicely. Thanks.

Regards,
Øyvind

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2011-10-27  7:31 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-10-27  6:50 Recent gits corrupts repository Øyvind A. Holm
2011-10-27  7:00 ` Matthieu Moy
2011-10-27  7:30   ` Øyvind A. Holm

Code repositories for project(s) associated with this public inbox

	https://80x24.org/mirrors/git.git

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 read-only IMAP folder(s) and NNTP newsgroup(s).