From 43b910643d9189a7d7cc39737da59ad41c5c0812 Mon Sep 17 00:00:00 2001 From: martin-s Date: Sun, 10 Jul 2011 10:02:49 +0000 Subject: [PATCH] Fix:maptool:Avoid ref counting multiple times in case of restart git-svn-id: https://navit.svn.sourceforge.net/svnroot/navit/trunk@4615 ffa7fe5e-494d-0410-b361-a75ebd5db220 --- navit/navit/maptool/maptool.c | 6 ++++-- navit/navit/maptool/maptool.h | 1 + navit/navit/maptool/osm.c | 10 ++++++++++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/navit/navit/maptool/maptool.c b/navit/navit/maptool/maptool.c index da9684a..a8ff840 100644 --- a/navit/navit/maptool/maptool.c +++ b/navit/navit/maptool/maptool.c @@ -412,7 +412,7 @@ osm_collect_data(struct maptool_params *p, char *suffix) int debug_ref=0; static void -osm_count_references(struct maptool_params *p, char *suffix) +osm_count_references(struct maptool_params *p, char *suffix, int clear) { int i,first=1; fprintf(stderr,"%d slices\n",slices); @@ -421,6 +421,8 @@ osm_count_references(struct maptool_params *p, char *suffix) if (!first) { FILE *ways=tempfile(suffix,"ways",0); load_buffer("coords.tmp",&node_buffer, i*slice_size, slice_size); + if (clear) + clear_node_item_buffer(); ref_ways(ways); save_buffer("coords.tmp",&node_buffer, i*slice_size); fclose(ways); @@ -768,7 +770,7 @@ int main(int argc, char **argv) if (p.start <= phase && p.end >= phase) { maptool_load_node_table(&p,1); fprintf(stderr,"PROGRESS: Phase %d: counting references and resolving ways\n",phase); - osm_count_references(&p, suffix); + osm_count_references(&p, suffix, p.start == phase); } phase++; if (p.start <= phase && p.end >= phase) { diff --git a/navit/navit/maptool/maptool.h b/navit/navit/maptool/maptool.h index 4a2c231..7c498e9 100644 --- a/navit/navit/maptool/maptool.h +++ b/navit/navit/maptool/maptool.h @@ -256,6 +256,7 @@ long long item_bin_get_id(struct item_bin *ib); void flush_nodes(int final); void sort_countries(int keep_tmpfiles); void process_turn_restrictions(FILE *in, FILE *coords, FILE *ways, FILE *ways_index, FILE *out); +void clear_node_item_buffer(void); void ref_ways(FILE *in); void resolve_ways(FILE *in, FILE *out); FILE *resolve_ways_file(FILE *in, char *suffix, char *filename); diff --git a/navit/navit/maptool/osm.c b/navit/navit/maptool/osm.c index e8713d0..1b4a628 100644 --- a/navit/navit/maptool/osm.c +++ b/navit/navit/maptool/osm.c @@ -1253,6 +1253,16 @@ osm_add_node(osmid id, double lat, double lon) } +void +clear_node_item_buffer(void) +{ + int j,count=node_buffer.size/sizeof(struct node_item); + struct node_item *ni=(struct node_item *)(node_buffer.base); + for (j = 0 ; j < count ; j++) { + ni[j].ref_way=0; + } +} + static struct node_item * node_item_get(int id) { -- 2.7.4