Fix memory leak in mappy.aligner.map.
This commit is contained in:
parent
e026e18439
commit
238b6bb3ea
|
|
@ -188,7 +188,9 @@ cdef class Aligner:
|
||||||
_seq2 = seq2 if isinstance(seq2, bytes) else seq2.encode()
|
_seq2 = seq2 if isinstance(seq2, bytes) else seq2.encode()
|
||||||
regs = cmappy.mm_map_aux(self._idx, _seq, _seq2, &n_regs, b._b, &map_opt)
|
regs = cmappy.mm_map_aux(self._idx, _seq, _seq2, &n_regs, b._b, &map_opt)
|
||||||
|
|
||||||
for i in range(n_regs):
|
try:
|
||||||
|
i = 0
|
||||||
|
while i < n_regs:
|
||||||
cmappy.mm_reg2hitpy(self._idx, ®s[i], &h)
|
cmappy.mm_reg2hitpy(self._idx, ®s[i], &h)
|
||||||
cigar, _cs, _MD = [], '', ''
|
cigar, _cs, _MD = [], '', ''
|
||||||
for k in range(h.n_cigar32): # convert the 32-bit CIGAR encoding to Python array
|
for k in range(h.n_cigar32): # convert the 32-bit CIGAR encoding to Python array
|
||||||
|
|
@ -203,6 +205,11 @@ cdef class Aligner:
|
||||||
_MD = cs_str[:l_cs_str] if isinstance(cs_str, str) else cs_str[:l_cs_str].decode()
|
_MD = cs_str[:l_cs_str] if isinstance(cs_str, str) else cs_str[:l_cs_str].decode()
|
||||||
yield Alignment(h.ctg, h.ctg_len, h.ctg_start, h.ctg_end, h.strand, h.qry_start, h.qry_end, h.mapq, cigar, h.is_primary, h.mlen, h.blen, h.NM, h.trans_strand, h.seg_id, _cs, _MD)
|
yield Alignment(h.ctg, h.ctg_len, h.ctg_start, h.ctg_end, h.strand, h.qry_start, h.qry_end, h.mapq, cigar, h.is_primary, h.mlen, h.blen, h.NM, h.trans_strand, h.seg_id, _cs, _MD)
|
||||||
cmappy.mm_free_reg1(®s[i])
|
cmappy.mm_free_reg1(®s[i])
|
||||||
|
i += 1
|
||||||
|
finally:
|
||||||
|
while i < n_regs:
|
||||||
|
cmappy.mm_free_reg1(®s[i])
|
||||||
|
i += 1
|
||||||
free(regs)
|
free(regs)
|
||||||
free(cs_str)
|
free(cs_str)
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue