BioJulia/XAM.jl

Memory leak

Closed this issue · 1 comments

I've observed a memory leak with the in-place reading/iteration pattern.

using XAM
using ProgressMeter

io = open(file_sam, "r")
reader = XAM.SAM.Reader(io)

p = Progress(filesize(file_sam))

record = XAM.SAM.Record()
while !eof(reader)
    read!(reader, record)
    #...
    ProgressMeter.update!(p, position(reader.state.stream),showvalues = [(:position,position(reader.state.stream))])
end

close(io)

With in-place reading, the record.fields was expanding as the record was not reset between calls to read!. Unfortunately, this means that other fields were potentially mixing with previous data.

The amended in-place reading pattern below.

using XAM
using ProgressMeter

io = open(file_sam, "r")
reader = XAM.SAM.Reader(io)

p = Progress(filesize(file_sam))

record = XAM.SAM.Record()
while !eof(reader)
    empty!(record) # Reset the record for new data!
    read!(reader, record)
    #...
    ProgressMeter.update!(p, position(reader.state.stream), showvalues = [(:position,position(reader.state.stream))])
end

close(io)