diff --git a/internal/storagev2/packed/packed_reader.go b/internal/storagev2/packed/packed_reader.go index 15402bc9c7..a3fa48cdbd 100644 --- a/internal/storagev2/packed/packed_reader.go +++ b/internal/storagev2/packed/packed_reader.go @@ -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) diff --git a/internal/storagev2/packed/packed_writer.go b/internal/storagev2/packed/packed_writer.go index 5c666b21ef..3f80212597 100644 --- a/internal/storagev2/packed/packed_writer.go +++ b/internal/storagev2/packed/packed_writer.go @@ -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 {