g_free(c);
c=n;
}
- g_free(this);
+ this->in_use--;
+ if (!this->in_use)
+ g_free(this);
if (!recurse)
break;
this=next;
struct attr route_status;
struct route_info *prev_dst;
route_status.type=attr_route_status;
- if (this->path2 && this->path2->in_use) {
+ if (this->path2 && (this->path2->in_use>1)) {
this->path2->update_required=1+new_graph;
return;
}
struct route_path *ret;
ret=g_new0(struct route_path, 1);
+ ret->in_use=1;
ret->path_hash=item_hash_new();
route_path_add_line(ret, &pos->c, &dst->c, pos->lenextra+dst->lenextra);
ret->updated=1;
s=s2;
}
ret=g_new0(struct route_path, 1);
+ ret->in_use=1;
ret->updated=1;
if (pos->lenextra)
route_path_add_line(ret, &pos->c, &pos->lp, pos->lenextra);
}
if (mr->path) {
mr->path->in_use--;
- if (mr->path->update_required && !mr->path->in_use)
+ if (mr->path->update_required && (mr->path->in_use==1))
route_path_update_done(mr->mpriv->route, mr->path->update_required-1);
+ else if (!mr->path->in_use)
+ g_free(mr->path);
}
g_free(mr);
mr->item.type=type_street_route;
mr->seg=mr->seg_next;
if (!mr->seg && mr->path && mr->path->next) {
+ struct route_path *p=NULL;
mr->path->in_use--;
+ if (!mr->path->in_use)
+ p=mr->path;
mr->path=mr->path->next;
mr->path->in_use++;
mr->seg=mr->path->path;
+ if (p)
+ g_free(p);
}
if (mr->seg) {
mr->seg_next=mr->seg->next;