What feature or improvement would you like to see?
Following up on the discussion in #4206 (comment)
Embedders integrating the C driver manager (e.g., StarRocks, DuckDB) currently have to discover this through the Rust manager's changelog or by debugging hangs at process shutdown.
Proposal: add a section to the C driver manager (maybe for JNI part as well) documentation covering:
dlclose must not be called on Go-based driver handles. Driver handles should stay resident until process exit.
- Cleanup should go through the ADBC API only:
AdbcStatementRelease -> AdbcConnectionRelease -> AdbcDatabaseRelease.
- Multiple Go-based drivers can be
dlopen-ed in the same process on Linux and ARM macOS, but not on Intel macOS (due to an unresolved Go runtime bug).
What feature or improvement would you like to see?
Following up on the discussion in #4206 (comment)
dlclosehangs or crashes because the Go runtime does not support clean unload (runtime: support dlclose with -buildmode=c-shared golang/go#11100). The Rust driver manager already works around this by skippingdlclose(fix(rust/driver_manager): don't dlclose drivers #3844, fix(csharp/src/Apache.Arrow.Adbc/C): Stop trying to unload dynamic libraries #3291), but this is not documented in the C API.Embedders integrating the C driver manager (e.g., StarRocks, DuckDB) currently have to discover this through the Rust manager's changelog or by debugging hangs at process shutdown.
Proposal: add a section to the C driver manager (maybe for JNI part as well) documentation covering:
dlclosemust not be called on Go-based driver handles. Driver handles should stay resident until process exit.AdbcStatementRelease->AdbcConnectionRelease->AdbcDatabaseRelease.dlopen-ed in the same process on Linux and ARM macOS, but not on Intel macOS (due to an unresolved Go runtime bug).