[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [outreachy] Walk through the Git history (guix git {authenticate,log
From: |
Magali |
Subject: |
Re: [outreachy] Walk through the Git history (guix git {authenticate,log}) |
Date: |
Sat, 19 Dec 2020 00:18:18 -0300 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 |
Hi!
On 18/12/2020 12:34, Ludovic Courtès wrote:
> Hi Magali,
>
> Magali <magalilemes00@gmail.com> skribis:
>
>> scheme@(guix-user)> (let* ((repo (repository-open cache))
>> (latest-commit
>> (commit-lookup repo (reference-target (repository-head repo)))))
>> (let loop ((commit latest-commit)
>> (res (list latest-commit)))
>> (match (commit-parents commit)
>> (() (reverse res))
>> ((head . tail)
>> (loop head (cons head res))))))
>> Segmentation fault (core dumped)
> I can reproduce the bug; the C backtrace looks like this:
>
> --8<---------------cut here---------------start------------->8---
> (gdb) bt
> #0 0x00007fabfa9d31ee in git_oidmap_get ()
> from
> /gnu/store/zchrrs2zf4l06cszbadqsk18329q78sg-libgit2-1.1.0/lib/libgit2.so
> #1 0x00007fabfa98d516 in cache_get () from
> /gnu/store/zchrrs2zf4l06cszbadqsk18329q78sg-libgit2-1.1.0/lib/libgit2.so
> #2 0x00007fabfa9cbef7 in git_object_lookup_prefix ()
> from
> /gnu/store/zchrrs2zf4l06cszbadqsk18329q78sg-libgit2-1.1.0/lib/libgit2.so
> #3 0x00007fac01b8866d in ffi_call_unix64 ()
> from /gnu/store/bw15z9kh9c65ycc2vbhl2izwfwfva7p1-libffi-3.3/lib/libffi.so.7
> #4 0x00007fac01b86ac0 in ffi_call_int () from
> /gnu/store/bw15z9kh9c65ycc2vbhl2izwfwfva7p1-libffi-3.3/lib/libffi.so.7
> #5 0x00007fac01e54f2e in scm_i_foreign_call (cif_scm=<optimized out>,
> pointer_scm=<optimized out>,
> errno_ret=errno_ret@entry=0x7ffe5fc1f95c, argv=0x7fabfe2e4980) at
> foreign.c:1073
> #6 0x00007fac01ec3a84 in foreign_call (thread=0x7fac014a8d80, cif=<optimized
> out>, pointer=<optimized out>)
> at vm.c:1282
> --8<---------------cut here---------------end--------------->8---
>
> Could it be that, if you keep ‘repo’ in a global variable like in the
> example zimoun posted, segfault no longer occurs?
Yes, this seems to work just fine.
> I believe that what happens is a bug in Guile-Git: ‘repo’ is “finalized”
> (freed) before Guile inspects the commit objects to print them, and when
> Guile gets around to printing those commit objects, they now refer to a
> repo that has been freed, hence the crash.
>
> Until the bug is fixed, the workaround is to arrange your code so that
> the repository object outlives commit objects. We can discuss this
> further here or on IRC if you want.
Nice! Thanks.
> Hope this helps!
It sure did :-)
Magali
- [outreachy] Walk through the Git history (guix git {authenticate, log}), zimoun, 2020/12/11
- Re: [outreachy] Walk through the Git history (guix git {authenticate,log}), Magali, 2020/12/11
- Re: [outreachy] Walk through the Git history (guix git {authenticate,log}), Magali, 2020/12/15
- Re: [outreachy] Walk through the Git history (guix git {authenticate,log}), zimoun, 2020/12/16
- Re: [outreachy] Walk through the Git history (guix git {authenticate,log}), Ludovic Courtès, 2020/12/18
- Re: [outreachy] Walk through the Git history (guix git {authenticate,log}),
Magali <=
Re: [outreachy] Walk through the Git history (guix git {authenticate,log}), Mathieu Othacehe, 2020/12/12