segmentation violation on submodule update #334

Closed
opened 2016-08-20 11:16:52 -05:00 by dealloc · 2 comments
dealloc commented 2016-08-20 11:16:52 -05:00 (Migrated from github.com)

I'm trying to add a submodule to an existing Git repository, using Git I'd do this

git submodule add <url>

After searching through the documentation and scarce examples this is what I came up with

repo, err := git.OpenRepository(".")
if err != nil {
    panic(err)
}

sub, _ := repo.Submodules.Add("https://github.com/dealloc/ioc.git", "ioc", true)
sub.Init(true)
err = sub.Update(true, &git.SubmoduleUpdateOptions{
    &git.CheckoutOpts{},
    &git.FetchOptions{},
    git.CheckoutForce | git.CheckoutUpdateSubmodules,
})
fmt.Println("Submodule:", sub.Name())

If I run this code however the program panics

fatal error: unexpected signal during runtime execution
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x7f405eb0c728]

runtime stack:
runtime.throw(0x6606d0, 0x2a)
    /usr/lib/go/src/runtime/panic.go:566 +0x95
runtime.sigpanic()
    /usr/lib/go/src/runtime/sigpanic_unix.go:12 +0x2cc

goroutine 1 [syscall, locked to thread]:
runtime.cgocall(0x5dd520, 0xc42004b5f8, 0xc400000000)
    /usr/lib/go/src/runtime/cgocall.go:131 +0x110 fp=0xc42004b5b0 sp=0xc42004b570
github.com/dealloc/governor/vendor/gopkg.in/libgit2/git2go%2ev24._Cfunc_git_submodule_update(0x26acac0, 0xc400000001, 0xc420098c80, 0x0)
    ??:0 +0x4d fp=0xc42004b5f8 sp=0xc42004b5b0
github.com/dealloc/governor/vendor/gopkg.in/libgit2/git2go%2ev24.(*Submodule).Update(0xc42002a0b8, 0xc42007c501, 0xc42004b6e8, 0x0, 0x0)
    /home/dealloc/Documents/Projects/Personal/Go/src/github.com/dealloc/governor/vendor/gopkg.in/libgit2/git2go.v24/submodule.go:322 +0x26b fp=0xc42004b670 sp=0xc42004b5f8
main.addCommand(0xc4200b01b0)
    /home/dealloc/Documents/Projects/Personal/Go/src/github.com/dealloc/governor/add.go:19 +0x182 fp=0xc42004b730 sp=0xc42004b670
runtime.call32(0xc4200152c0, 0x672718, 0xc42002a0a8, 0x800000008)
    /usr/lib/go/src/runtime/asm_amd64.s:479 +0x4c fp=0xc42004b760 sp=0xc42004b730
reflect.Value.call(0x6078a0, 0x672718, 0x13, 0x6575a1, 0x4, 0xc42000cbc0, 0x1, 0x1, 0xd, 0xc42007a650, ...)
    /usr/lib/go/src/reflect/value.go:434 +0x5c8 fp=0xc42004bab0 sp=0xc42004b760
reflect.Value.Call(0x6078a0, 0x672718, 0x13, 0xc42000cbc0, 0x1, 0x1, 0xc42004bc70, 0x670c70, 0x647c20)
    /usr/lib/go/src/reflect/value.go:302 +0xa4 fp=0xc42004bb18 sp=0xc42004bab0
github.com/dealloc/governor/vendor/gopkg.in/ukautz/clif%2ev1.(*Cli).call(0xc420096dc0, 0x6078a0, 0x672718, 0x13, 0xc4200b01b0, 0x4, 0x6576bd, 0x4, 0xc420061601, 0x0)
    /home/dealloc/Documents/Projects/Personal/Go/src/github.com/dealloc/governor/vendor/gopkg.in/ukautz/clif.v1/cli.go:175 +0x73b fp=0xc42004bcc0 sp=0xc42004bb18
github.com/dealloc/governor/vendor/gopkg.in/ukautz/clif%2ev1.(*Cli).Call(0xc420096dc0, 0xc4200b01b0, 0x4, 0x96b6c0, 0x0, 0x0, 0x99c9c8)
    /home/dealloc/Documents/Projects/Personal/Go/src/github.com/dealloc/governor/vendor/gopkg.in/ukautz/clif.v1/cli.go:130 +0xd9 fp=0xc42004bd38 sp=0xc42004bcc0
github.com/dealloc/governor/vendor/gopkg.in/ukautz/clif%2ev1.(*Cli).RunWith(0xc420096dc0, 0xc42000c290, 0x1, 0x1)
    /home/dealloc/Documents/Projects/Personal/Go/src/github.com/dealloc/governor/vendor/gopkg.in/ukautz/clif.v1/cli.go:285 +0x524 fp=0xc42004be90 sp=0xc42004bd38
github.com/dealloc/governor/vendor/gopkg.in/ukautz/clif%2ev1.(*Cli).Run(0xc420096dc0)
    /home/dealloc/Documents/Projects/Personal/Go/src/github.com/dealloc/governor/vendor/gopkg.in/ukautz/clif.v1/cli.go:243 +0x70 fp=0xc42004bec0 sp=0xc42004be90
main.main()
    /home/dealloc/Documents/Projects/Personal/Go/src/github.com/dealloc/governor/main.go:16 +0x22b fp=0xc42004bf48 sp=0xc42004bec0
runtime.main()
    /usr/lib/go/src/runtime/proc.go:183 +0x1f4 fp=0xc42004bfa0 sp=0xc42004bf48
runtime.goexit()
    /usr/lib/go/src/runtime/asm_amd64.s:2086 +0x1 fp=0xc42004bfa8 sp=0xc42004bfa0

goroutine 17 [syscall, locked to thread]:
runtime.goexit()
    /usr/lib/go/src/runtime/asm_amd64.s:2086 +0x1

goroutine 5 [syscall]:
os/signal.signal_recv(0x0)
    /usr/lib/go/src/runtime/sigqueue.go:116 +0x157
os/signal.loop()
    /usr/lib/go/src/os/signal/signal_unix.go:22 +0x22
created by os/signal.init.1
    /usr/lib/go/src/os/signal/signal_unix.go:28 +0x41

Am I just doing something wrong or is this an actual bug? because I can't figure it out, no matter what I pass to the Update function gives the same result.

I'm trying to add a submodule to an existing Git repository, using Git I'd do this ``` sh git submodule add <url> ``` After searching through the documentation and scarce examples this is what I came up with ``` go repo, err := git.OpenRepository(".") if err != nil { panic(err) } sub, _ := repo.Submodules.Add("https://github.com/dealloc/ioc.git", "ioc", true) sub.Init(true) err = sub.Update(true, &git.SubmoduleUpdateOptions{ &git.CheckoutOpts{}, &git.FetchOptions{}, git.CheckoutForce | git.CheckoutUpdateSubmodules, }) fmt.Println("Submodule:", sub.Name()) ``` If I run this code however the program panics ``` fatal error: unexpected signal during runtime execution [signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x7f405eb0c728] runtime stack: runtime.throw(0x6606d0, 0x2a) /usr/lib/go/src/runtime/panic.go:566 +0x95 runtime.sigpanic() /usr/lib/go/src/runtime/sigpanic_unix.go:12 +0x2cc goroutine 1 [syscall, locked to thread]: runtime.cgocall(0x5dd520, 0xc42004b5f8, 0xc400000000) /usr/lib/go/src/runtime/cgocall.go:131 +0x110 fp=0xc42004b5b0 sp=0xc42004b570 github.com/dealloc/governor/vendor/gopkg.in/libgit2/git2go%2ev24._Cfunc_git_submodule_update(0x26acac0, 0xc400000001, 0xc420098c80, 0x0) ??:0 +0x4d fp=0xc42004b5f8 sp=0xc42004b5b0 github.com/dealloc/governor/vendor/gopkg.in/libgit2/git2go%2ev24.(*Submodule).Update(0xc42002a0b8, 0xc42007c501, 0xc42004b6e8, 0x0, 0x0) /home/dealloc/Documents/Projects/Personal/Go/src/github.com/dealloc/governor/vendor/gopkg.in/libgit2/git2go.v24/submodule.go:322 +0x26b fp=0xc42004b670 sp=0xc42004b5f8 main.addCommand(0xc4200b01b0) /home/dealloc/Documents/Projects/Personal/Go/src/github.com/dealloc/governor/add.go:19 +0x182 fp=0xc42004b730 sp=0xc42004b670 runtime.call32(0xc4200152c0, 0x672718, 0xc42002a0a8, 0x800000008) /usr/lib/go/src/runtime/asm_amd64.s:479 +0x4c fp=0xc42004b760 sp=0xc42004b730 reflect.Value.call(0x6078a0, 0x672718, 0x13, 0x6575a1, 0x4, 0xc42000cbc0, 0x1, 0x1, 0xd, 0xc42007a650, ...) /usr/lib/go/src/reflect/value.go:434 +0x5c8 fp=0xc42004bab0 sp=0xc42004b760 reflect.Value.Call(0x6078a0, 0x672718, 0x13, 0xc42000cbc0, 0x1, 0x1, 0xc42004bc70, 0x670c70, 0x647c20) /usr/lib/go/src/reflect/value.go:302 +0xa4 fp=0xc42004bb18 sp=0xc42004bab0 github.com/dealloc/governor/vendor/gopkg.in/ukautz/clif%2ev1.(*Cli).call(0xc420096dc0, 0x6078a0, 0x672718, 0x13, 0xc4200b01b0, 0x4, 0x6576bd, 0x4, 0xc420061601, 0x0) /home/dealloc/Documents/Projects/Personal/Go/src/github.com/dealloc/governor/vendor/gopkg.in/ukautz/clif.v1/cli.go:175 +0x73b fp=0xc42004bcc0 sp=0xc42004bb18 github.com/dealloc/governor/vendor/gopkg.in/ukautz/clif%2ev1.(*Cli).Call(0xc420096dc0, 0xc4200b01b0, 0x4, 0x96b6c0, 0x0, 0x0, 0x99c9c8) /home/dealloc/Documents/Projects/Personal/Go/src/github.com/dealloc/governor/vendor/gopkg.in/ukautz/clif.v1/cli.go:130 +0xd9 fp=0xc42004bd38 sp=0xc42004bcc0 github.com/dealloc/governor/vendor/gopkg.in/ukautz/clif%2ev1.(*Cli).RunWith(0xc420096dc0, 0xc42000c290, 0x1, 0x1) /home/dealloc/Documents/Projects/Personal/Go/src/github.com/dealloc/governor/vendor/gopkg.in/ukautz/clif.v1/cli.go:285 +0x524 fp=0xc42004be90 sp=0xc42004bd38 github.com/dealloc/governor/vendor/gopkg.in/ukautz/clif%2ev1.(*Cli).Run(0xc420096dc0) /home/dealloc/Documents/Projects/Personal/Go/src/github.com/dealloc/governor/vendor/gopkg.in/ukautz/clif.v1/cli.go:243 +0x70 fp=0xc42004bec0 sp=0xc42004be90 main.main() /home/dealloc/Documents/Projects/Personal/Go/src/github.com/dealloc/governor/main.go:16 +0x22b fp=0xc42004bf48 sp=0xc42004bec0 runtime.main() /usr/lib/go/src/runtime/proc.go:183 +0x1f4 fp=0xc42004bfa0 sp=0xc42004bf48 runtime.goexit() /usr/lib/go/src/runtime/asm_amd64.s:2086 +0x1 fp=0xc42004bfa8 sp=0xc42004bfa0 goroutine 17 [syscall, locked to thread]: runtime.goexit() /usr/lib/go/src/runtime/asm_amd64.s:2086 +0x1 goroutine 5 [syscall]: os/signal.signal_recv(0x0) /usr/lib/go/src/runtime/sigqueue.go:116 +0x157 os/signal.loop() /usr/lib/go/src/os/signal/signal_unix.go:22 +0x22 created by os/signal.init.1 /usr/lib/go/src/os/signal/signal_unix.go:28 +0x41 ``` Am I just doing something wrong or is this an actual bug? because I can't figure it out, no matter what I pass to the Update function gives the same result.
carlosmn commented 2017-07-07 13:01:24 -05:00 (Migrated from github.com)

I suspect this has the same root cause as #373 and #356 where Go's GC decides to free the managed object before we're done with it.

I suspect this has the same root cause as #373 and #356 where Go's GC decides to free the managed object before we're done with it.
carlosmn commented 2017-09-03 09:45:26 -05:00 (Migrated from github.com)

This should be fixed with #393 which adds a lot more hints to the garbage collector.

This should be fixed with #393 which adds a lot more hints to the garbage collector.
Sign in to join this conversation.
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: jcarr/git2go#334
No description provided.