-
Notifications
You must be signed in to change notification settings - Fork 106
Description
Describe the bug
When running multiple queries in parallel, godror sometimes hits a SIGABRT double free or corruption error attempting to create a connection during cgo execution with the godror._Cfunc_dpiConn_create
function.
Note: I've only been noticing this on Oracle Linux 8. Doesn't seem to matter if it's amd64 or arm architecture.
To Reproduce
I reproduced this error in a sample repo: https://github.com/anders-swanson/godror-sample.
After you download the sample, run it like so (requires docker compatible container runtime, docker-compose):
docker build . -t container-registry.oracle.com/database/godror-sample:latest && docker-compose up
I see the error every time with the default settings in the compose.yaml
file.
Expected behavior
cgo errors of this type either don't occur or are handled better by godror.
Error output
sample | double free or corruption (out)
sample | SIGABRT: abort
sample | PC=0x7f249fcad5ef m=0 sigcode=18446744073709551610
sample | signal arrived during cgo execution
sample |
sample | goroutine 1574 gp=0xc00031bc00 m=0 mp=0xaafec0 [syscall, locked to thread]:
sample | runtime.cgocall(0x644580, 0xc0004940c8)
sample | /usr/local/go/src/runtime/cgocall.go:157 +0x4b fp=0xc0004940a0 sp=0xc000494068 pc=0x4135eb
sample | github.com/godror/godror._Cfunc_dpiConn_create(0x2b30000, 0x2bb54a0, 0x8, 0x2b9a360, 0xc, 0x2b705a0, 0x18, 0xc00040caf0, 0xc000419d40, 0xc000412980)
sample | _cgo_gotypes.go:2672 +0x4b fp=0xc0004940c8 sp=0xc0004940a0 pc=0x5c2f6b
sample | github.com/godror/godror.(*drv).acquireConn.func8.1(0xc000494198?, 0x5c97c8?, {0xc00001e032?, 0x8}, 0x7f24a0640108?, {0xc00001e012?, 0xc}, 0xc000412980?, 0x0?, 0xc00040caf0, ...)
sample | /root/go/pkg/mod/github.com/godror/godror@v0.46.0/drv.go:680 +0x146 fp=0xc000494158 sp=0xc0004940c8 pc=0x5d6606
sample | github.com/godror/godror.(*drv).acquireConn.func8()
sample | /root/go/pkg/mod/github.com/godror/godror@v0.46.0/drv.go:680 +0x51 fp=0xc0004941c8 sp=0xc000494158 pc=0x5d64b1
sample | github.com/godror/godror.(*drv).checkExecNoLOT(0xaaf5c0, 0x2b70501?)
sample | /root/go/pkg/mod/github.com/godror/godror@v0.46.0/drv.go:279 +0x1b fp=0xc0004941e0 sp=0xc0004941c8 pc=0x5d321b
sample | github.com/godror/godror.(*drv).checkExec(0xaaf5c0, 0xc000494498)
sample | /root/go/pkg/mod/github.com/godror/godror@v0.46.0/drv.go:273 +0x2c fp=0xc000494200 sp=0xc0004941e0 pc=0x5d318c
sample | github.com/godror/godror.(*drv).acquireConn(_, _, {{0x0, 0x0, {0x0, 0x0, 0x0}, {0x0, 0x0, 0x0}, ...}, ...})
sample | /root/go/pkg/mod/github.com/godror/godror@v0.46.0/drv.go:671 +0xa87 fp=0xc0004945b0 sp=0xc000494200 pc=0x5d5a67
sample | github.com/godror/godror.(*drv).createConn(_, _, {{0x0, 0x0, {0x0, 0x0, 0x0}, {0x0, 0x0, 0x0}, ...}, ...})
sample | /root/go/pkg/mod/github.com/godror/godror@v0.46.0/drv.go:425 +0x91 fp=0xc000494ae0 sp=0xc0004945b0 pc=0x5d3f71
sample | github.com/godror/godror.(*drv).createConnFromParams(_, {_, _}, {{0x0, 0x0, {0x0, 0x0, 0x0}, {0x0, 0x0, ...}, ...}, ...})
sample | /root/go/pkg/mod/github.com/godror/godror@v0.46.0/drv.go:715 +0x2db fp=0xc000495068 sp=0xc000494ae0 pc=0x5d701b
sample | github.com/godror/godror.connector.Connect({0xaaf5c0, {{0x0, 0x0, {0x0, 0x0, 0x0}, {0x0, 0x0, 0x0}, {0x0, ...}}, ...}}, ...)
sample | /root/go/pkg/mod/github.com/godror/godror@v0.46.0/drv.go:1306 +0x64e fp=0xc000495880 sp=0xc000495068 pc=0x5dac2e
sample | github.com/godror/godror.(*connector).Connect(0x0?, {0x714440?, 0xc00040aa80?})
sample | <autogenerated>:1 +0x86 fp=0xc000495be0 sp=0xc000495880 pc=0x619326
sample | database/sql.(*DB).conn(0xc00007c680, {0x714440, 0xc00040aa80}, 0x1)
sample | /usr/local/go/src/database/sql/sql.go:1415 +0x71e fp=0xc000495d68 sp=0xc000495be0 pc=0x4df17e
sample | database/sql.(*DB).query(0xc00007c680, {0x714440, 0xc00040aa80}, {0x6c7f75, 0x2c1}, {0x0, 0x0, 0x0}, 0xc8?)
sample | /usr/local/go/src/database/sql/sql.go:1749 +0x57 fp=0xc000495de0 sp=0xc000495d68 pc=0x4dff77
sample | database/sql.(*DB).QueryContext.func1(0x48?)
sample | /usr/local/go/src/database/sql/sql.go:1732 +0x4f fp=0xc000495e48 sp=0xc000495de0 pc=0x4dfeaf
sample | database/sql.(*DB).retry(0xc00040aa80?, 0xc000495eb8)
sample | /usr/local/go/src/database/sql/sql.go:1566 +0x42 fp=0xc000495e90 sp=0xc000495e48 pc=0x4dfc82
sample | database/sql.(*DB).QueryContext(0x714360?, {0x714440?, 0xc00040aa80?}, {0x6c7f75?, 0x4968be?}, {0x0?, 0xc0003567d0?, 0x5f3cf4?})
sample | /usr/local/go/src/database/sql/sql.go:1731 +0xc5 fp=0xc000495f20 sp=0xc000495e90 pc=0x4dfdc5
sample | main.query(0xc00023c300, 0xc00007c680, {0x6c7f75, 0x2c1})
sample | /go/src/godror-sample/main.go:90 +0xab fp=0xc000495fb0 sp=0xc000495f20 pc=0x61b60b
sample | main.main.gowrap1()
sample | /go/src/godror-sample/main.go:53 +0x2c fp=0xc000495fe0 sp=0xc000495fb0 pc=0x61b32c
sample | runtime.goexit({})
sample | /usr/local/go/src/runtime/asm_amd64.s:1695 +0x1 fp=0xc000495fe8 sp=0xc000495fe0 pc=0x47a761
sample | created by main.main in goroutine 1
sample | /go/src/godror-sample/main.go:53 +0x218
Your oracle client version
oracle-instantclient-release-23ai-el8
Your godror version
v0.46.0
Your go version
1.22.7
Your gcc version
gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-23.0.1)
Machine (please complete the following information):
- OS: Oracle Linux
- Architecture: amd64
- Version: 8
Additional context
Add any other context about the problem here.