fix: fix storage v2 cgo mem leak (#40305)

related: #39173

Signed-off-by: shaoting-huang <shaoting.huang@zilliz.com>
This commit is contained in:
sthuang 2025-03-04 14:16:00 +08:00 committed by GitHub
parent 837ac295fa
commit d77756cf2d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 8 additions and 0 deletions

View File

@ -45,6 +45,7 @@ func NewPackedReader(filePaths []string, schema *arrow.Schema, bufferSize int64)
var cas cdata.CArrowSchema
cdata.ExportArrowSchema(schema, &cas)
cSchema := (*C.struct_ArrowSchema)(unsafe.Pointer(&cas))
defer cdata.ReleaseCArrowSchema(&cas)
cBufferSize := C.int64_t(bufferSize)
@ -71,6 +72,10 @@ func (pr *PackedReader) ReadNext() (arrow.Record, error) {
// Convert ArrowArray to Go RecordBatch using cdata
goCArr := (*cdata.CArrowArray)(unsafe.Pointer(cArr))
goCSchema := (*cdata.CArrowSchema)(unsafe.Pointer(cSchema))
defer func() {
cdata.ReleaseCArrowArray(goCArr)
cdata.ReleaseCArrowSchema(goCSchema)
}()
recordBatch, err := cdata.ImportCRecordBatch(goCArr, goCSchema)
if err != nil {
return nil, fmt.Errorf("failed to convert ArrowArray to Record: %w", err)

View File

@ -47,6 +47,7 @@ func NewPackedWriter(filePaths []string, schema *arrow.Schema, bufferSize int64,
var cas cdata.CArrowSchema
cdata.ExportArrowSchema(schema, &cas)
cSchema := (*C.struct_ArrowSchema)(unsafe.Pointer(&cas))
defer cdata.ReleaseCArrowSchema(&cas)
cBufferSize := C.int64_t(bufferSize)
@ -82,6 +83,8 @@ func (pw *PackedWriter) WriteRecordBatch(recordBatch arrow.Record) error {
cArr := (*C.struct_ArrowArray)(unsafe.Pointer(&caa))
cSchema := (*C.struct_ArrowSchema)(unsafe.Pointer(&cas))
defer cdata.ReleaseCArrowSchema(&cas)
defer cdata.ReleaseCArrowArray(&caa)
status := C.WriteRecordBatch(pw.cPackedWriter, cArr, cSchema)
if err := ConsumeCStatusIntoError(&status); err != nil {