r146: in filtering, drop children if parent out

This has been causing several segfaults.
This commit is contained in:
Heng Li 2017-07-03 00:28:12 -04:00
parent 51cfb60520
commit e06c342659
2 changed files with 12 additions and 4 deletions

14
hit.c
View File

@ -84,7 +84,7 @@ void mm_update_parent(void *km, float mask_level, int n, mm_reg1_t *r) // due to
int i, j, k, *w, n_pri = 0; int i, j, k, *w, n_pri = 0;
if (n <= 0) return; if (n <= 0) return;
for (i = 0; i < n; ++i) for (i = 0; i < n; ++i)
if (r[i].id == r[i].parent) ++n_pri; if (r[i].id == r[i].parent || r[i].parent < 0) ++n_pri;
if (n_pri <= 1) return; if (n_pri <= 1) return;
w = (int*)kmalloc(km, n_pri * sizeof(int)); w = (int*)kmalloc(km, n_pri * sizeof(int));
for (i = j = 0; i < n; ++i) // find the first primary for (i = j = 0; i < n; ++i) // find the first primary
@ -175,7 +175,7 @@ void mm_select_sub(void *km, float mask_level, float pri_ratio, int best_n, int
void mm_filter_regs(void *km, const mm_mapopt_t *opt, int *n_regs, mm_reg1_t *regs) void mm_filter_regs(void *km, const mm_mapopt_t *opt, int *n_regs, mm_reg1_t *regs)
{ // NB: after this call, mm_reg1_t::parent can be -1 if its parent filtered out { // NB: after this call, mm_reg1_t::parent can be -1 if its parent filtered out
int i, k; int i, k;
for (i = k = 0; i < *n_regs; ++i) { for (i = 0; i < *n_regs; ++i) {
mm_reg1_t *r = &regs[i]; mm_reg1_t *r = &regs[i];
int flt = 0; int flt = 0;
if (r->cnt < opt->min_cnt) flt = 1; if (r->cnt < opt->min_cnt) flt = 1;
@ -188,7 +188,15 @@ void mm_filter_regs(void *km, const mm_mapopt_t *opt, int *n_regs, mm_reg1_t *re
else if (r->p->dp_max < opt->min_dp_max) flt = 1; else if (r->p->dp_max < opt->min_dp_max) flt = 1;
if (flt) free(r->p); if (flt) free(r->p);
} }
if (!flt) { if (flt) r->cnt = 0;
}
for (i = 0; i < *n_regs; ++i) {
mm_reg1_t *r = &regs[i];
if (r->parent >= 0 && r->id != r->parent && regs[r->parent].cnt == 0)
r->cnt = 0;
}
for (i = k = 0; i < *n_regs; ++i) {
if (regs[i].cnt) {
if (k < i) regs[k++] = regs[i]; if (k < i) regs[k++] = regs[i];
else ++k; else ++k;
} }

2
main.c
View File

@ -10,7 +10,7 @@
#include "minimap.h" #include "minimap.h"
#include "mmpriv.h" #include "mmpriv.h"
#define MM_VERSION "2.0-r145-pre" #define MM_VERSION "2.0-r146-pre"
void liftrlimit() void liftrlimit()
{ {