Index: plugins/rt_topo/crbs_route.c =================================================================== --- plugins/rt_topo/crbs_route.c (revision 1389) +++ plugins/rt_topo/crbs_route.c (revision 1390) @@ -194,7 +194,6 @@ crbs_grbs_draw(crbs, tmp); } - froma = grbs_reattach_addr(&crbs->grbs, curr); if (froma == NULL) { printf(" Neigh: can't reattach curr\n"); @@ -206,6 +205,8 @@ crbs_grbs_draw(crbs, tmp); } + if ((froma->type != ADDR_POINT) && (froma->obj.arc != NULL)) { assert(froma->obj.arc->link_point.parent != NULL); } + toa = grbs_path_next(&crbs->grbs, gtn, froma, pt->gpt, adir); if (toa != NULL) { grbs_addr_key_t key; @@ -361,6 +362,17 @@ printf("DET get: key: "); print_detkey(grbs_det_addr_to_key(det)); printf(" | det: ");print_det(det); printf(" {%d}\n", dcnt); }*/ e = htad_getentry(&crbs->addrs, grbs_det_addr_to_key(det)); + if (e == NULL) { /* this may happen if we land on a different orbit since the last try (e.g. in legit spiral case) */ + htad_value_t val = {0}; + + val.valid = 1; +#warning TODO: allocate this with ualloc stacks + val.det = calloc(sizeof(grbs_detached_addr_t), 1); + memcpy(val.det, det, sizeof(grbs_detached_addr_t)); +/* printf("\nDET SET: key: "); print_detkey(key); printf(" | det: ");print_det(res); printf("\n");*/ + htad_set(&crbs->addrs, grbs_det_addr_to_key(val.det), val); + e = htad_getentry(&crbs->addrs, grbs_det_addr_to_key(det)); + } /* printf("DET res: e=%p\n", e);*/ fflush(stdout); assert(e != NULL);