Closed junhwong closed 1 year ago
Describe the bug Stack overflow caused by too many dependencies or too deep nested dependencies
To Reproduce Pseudo code:
// cmd.go app:=dig.New() controller.Provide(app) app.Run(controller.Run) // controller.go Provide(app){ app.Provide(NewControllerA) app.Provide(NewControllerB) app.Provide(NewControllerC) app.Provide(NewControllerD) // ... } Run(ControllerA,ControllerB...ControllerD, ...){ // run }
Additional context stack trace:
runtime: goroutine stack exceeds 1000000000-byte limit runtime: sp=0xc020d50348 stack=[0xc020d50000, 0xc040d50000] fatal error: stack overflow runtime stack: runtime.throw({0x1373560?, 0x1dc8b40?}) go1.19.3/src/runtime/panic.go:1047 +0x5d fp=0x7f3ad4f0acb8 sp=0x7f3ad4f0ac88 pc=0x43bb9d runtime.newstack() go1.19.3/src/runtime/stack.go:1103 +0x5cc fp=0x7f3ad4f0ae70 sp=0x7f3ad4f0acb8 pc=0x455e6c runtime.morestack() go1.19.3/src/runtime/asm_amd64.s:570 +0x8b fp=0x7f3ad4f0ae78 sp=0x7f3ad4f0ae70 pc=0x46dc2b goroutine 218 [running]: mypkg/myrunner.checkReady-fm() <autogenerated>:1 +0x35 fp=0xc020d50358 sp=0xc020d50350 pc=0x10846f5 mypkg/*Controller.Register.func1(0x0, 0x0) worker.go:28 +0x8a fp=0xc020d503d0 sp=0xc020d50358 pc=0x1093daa mypkg/*Controller.Register.func1(0x0, 0x0) worker.go:33 +0x159 fp=0xc020d50448 sp=0xc020d503d0 pc=0x1093e79 ... over 800 lines mypkg/*Controller.Register.func1(0x0, 0x0) worker.go:33 +0x159 fp=0xc020d531c0 sp=0xc020d53148 pc=0x1093e79 ...additional frames elided... created by mypkg/bootstrap.(*Bootstrap).serve bootstrap.go:126 +0x3a5 goroutine 1 [semacquire, 1 minutes]: runtime.gopark(0xc000407380?, 0x46db2e?, 0x20?, 0x5f?, 0xc000931b20?) go1.19.3/src/runtime/proc.go:363 +0xd6 fp=0xc000225b00 sp=0xc000225ae0 pc=0x43e7b6 runtime.goparkunlock(...) go1.19.3/src/runtime/proc.go:369 runtime.semacquire1(0xc0003d16a8, 0xa0?, 0x1, 0x0) go1.19.3/src/runtime/sema.go:150 +0x1fe fp=0xc000225b68 sp=0xc000225b00 pc=0x44f71e sync.runtime_Semacquire(0xc00018e8d0?) go1.19.3/src/runtime/sema.go:62 +0x25 fp=0xc000225b98 sp=0xc000225b68 pc=0x46b985 sync.(*WaitGroup).Wait(0xc00050ed00?) go1.19.3/src/sync/waitgroup.go:139 +0x52 fp=0xc000225bc0 sp=0xc000225b98 pc=0x487d52 app.Wait(0xc0001197c0) app.go:143 +0x185 fp=0xc000225c48 sp=0xc000225bc0 pc=0x7db905 cmd.run(0xc0001b6280) run.go:73 +0x286 fp=0xc000225c98 sp=0xc000225c48 pc=0x1093786 cmd.NewMainCommand.func1(0x0?, {0x0?, 0x0?, 0x0?}) cmd.go:88 +0x3e fp=0xc000225cb8 sp=0xc000225c98 pc=0x108cbbe cmd.FlushRunE.func1(0xc00041c300?, {0x1e639a8?, 0x0?, 0x0?}) cmd.go:28 +0x26 fp=0xc000225d20 sp=0xc000225cb8 pc=0x108c2e6 github.com/spf13/cobra.(*Command).execute(0xc00041c300, {0xc000040220, 0x0, 0x0}) cobra@v1.6.1/command.go:916 +0x862 fp=0xc000225e58 sp=0xc000225d20 pc=0x5bd002 github.com/spf13/cobra.(*Command).ExecuteC(0xc00041c300) cobra@v1.6.1/command.go:1044 +0x3bd fp=0xc000225f10 sp=0xc000225e58 pc=0x5bd87d github.com/spf13/cobra.(*Command).Execute(...) cobra@v1.6.1/command.go:968 main.main() main.go:14 +0x8f fp=0xc000225f80 sp=0xc000225f10 pc=0x10946cf runtime.main() go1.19.3/src/runtime/proc.go:250 +0x212 fp=0xc000225fe0 sp=0xc000225f80 pc=0x43e3f2 runtime.goexit() go1.19.3/src/runtime/asm_amd64.s:1594 +0x1 fp=0xc000225fe8 sp=0xc000225fe0 pc=0x46fd01 goroutine 2 [force gc (idle), 1 minutes]: runtime.gopark(0x0?, 0x0?, 0x0?, 0x0?, 0x0?) go1.19.3/src/runtime/proc.go:363 +0xd6 fp=0xc000076fb0 sp=0xc000076f90 pc=0x43e7b6 runtime.goparkunlock(...) go1.19.3/src/runtime/proc.go:369 runtime.forcegchelper() go1.19.3/src/runtime/proc.go:302 +0xad fp=0xc000076fe0 sp=0xc000076fb0 pc=0x43e64d runtime.goexit() go1.19.3/src/runtime/asm_amd64.s:1594 +0x1 fp=0xc000076fe8 sp=0xc000076fe0 pc=0x46fd01 created by runtime.init.6 go1.19.3/src/runtime/proc.go:290 +0x25 goroutine 3 [GC sweep wait]: runtime.gopark(0x1?, 0x0?, 0x0?, 0x0?, 0x0?) go1.19.3/src/runtime/proc.go:363 +0xd6 fp=0xc000077790 sp=0xc000077770 pc=0x43e7b6 runtime.goparkunlock(...) go1.19.3/src/runtime/proc.go:369 runtime.bgsweep(0x0?) go1.19.3/src/runtime/mgcsweep.go:297 +0xd7 fp=0xc0000777c8 sp=0xc000077790 pc=0x428cf7 runtime.gcenable.func1() go1.19.3/src/runtime/mgc.go:178 +0x26 fp=0xc0000777e0 sp=0xc0000777c8 pc=0x41d966 runtime.goexit() go1.19.3/src/runtime/asm_amd64.s:1594 +0x1 fp=0xc0000777e8 sp=0xc0000777e0 pc=0x46fd01 created by runtime.gcenable go1.19.3/src/runtime/mgc.go:178 +0x6b ... goroutine 676 [chan receive, 1 minutes]: ...
ps: no dead-loop when the code runs
... is a problem for me to register
Describe the bug Stack overflow caused by too many dependencies or too deep nested dependencies
To Reproduce Pseudo code:
Additional context stack trace: