diff --git a/align.c b/align.c index d6b7dc5..a0d58af 100644 --- a/align.c +++ b/align.c @@ -242,7 +242,7 @@ static void mm_align1(void *km, const mm_mapopt_t *opt, const mm_idx_t *mi, int if (r->cnt - (j + 1) >= opt->min_cnt) { mm_split_reg(r, r2, j + 1, qlen, a); if (j + 1 < opt->min_cnt) - r2->id = r->id, r->id = -1; + r2->id = r->id, r2->parent = r2->id, r->id = -1, r->parent = MM_PARENT_TMP_PRI; } break; } else r->p->dp_score += ez->score; @@ -305,6 +305,7 @@ mm_reg1_t *mm_align_skeleton(void *km, const mm_mapopt_t *opt, const mm_idx_t *m } } *n_regs_ = n_regs; + mm_sync_regs(km, n_regs, regs); kfree(km, qseq0[0]); kfree(km, qseq0[1]); kfree(km, ez.cigar); mm_filter_regs(km, opt, n_regs_, regs); diff --git a/hit.c b/hit.c index 1222fba..fd0adfd 100644 --- a/hit.c +++ b/hit.c @@ -85,7 +85,7 @@ void mm_update_parent(void *km, float mask_level, int n, mm_reg1_t *r) // due to if (n <= 0) return; for (i = 0; i < n; ++i) if (r[i].id == r[i].parent || r[i].parent < 0) ++n_pri; - if (n_pri <= 1) return; + if (n_pri <= 1) return; // FIXME: this is not right w = (int*)kmalloc(km, n_pri * sizeof(int)); for (i = j = 0; i < n; ++i) // find the first primary if (r[i].id == r[i].parent) break;