diff options
author | mdankov <mdankov@ffa7fe5e-494d-0410-b361-a75ebd5db220> | 2012-02-10 22:51:55 +0000 |
---|---|---|
committer | mdankov <mdankov@ffa7fe5e-494d-0410-b361-a75ebd5db220> | 2012-02-10 22:51:55 +0000 |
commit | 52afa5e955540d63d8387c166202ac7bd0c18ccb (patch) | |
tree | 5f7ea916fb7e16123f74a97a35567ba483ddada4 /navit/graphics.c | |
parent | 705290c5e6b3f80811051b597686def2b900ca53 (diff) | |
download | navit-52afa5e955540d63d8387c166202ac7bd0c18ccb.tar.gz |
Fix:core:Fix reference to already freed object in displaylist->dc.transform. Was causing a crash when entering Map Point information if both menu_on_map_click is on and osd button firing gui.menu() is enabled.
git-svn-id: http://svn.code.sf.net/p/navit/code/trunk/navit@4930 ffa7fe5e-494d-0410-b361-a75ebd5db220
Diffstat (limited to 'navit/graphics.c')
-rw-r--r-- | navit/graphics.c | 19 |
1 files changed, 17 insertions, 2 deletions
diff --git a/navit/graphics.c b/navit/graphics.c index 2040e72d9..3b6a7fc8e 100644 --- a/navit/graphics.c +++ b/navit/graphics.c @@ -2179,7 +2179,10 @@ do_draw(struct displaylist *displaylist, int cancel, int flags) void graphics_displaylist_draw(struct graphics *gra, struct displaylist *displaylist, struct transformation *trans, struct layout *l, int flags) { int order=transform_get_order(trans); - displaylist->dc.trans=trans; + if(displaylist->dc.trans && displaylist->dc.trans!=trans) + transform_destroy(displaylist->dc.trans); + if(displaylist->dc.trans!=trans) + displaylist->dc.trans=transform_dup(trans); displaylist->dc.gra=gra; displaylist->dc.mindist=transform_get_scale(trans)/2; // FIXME find a better place to set the background color @@ -2217,7 +2220,10 @@ static void graphics_load_mapset(struct graphics *gra, struct displaylist *displ displaylist->dc.gra=gra; displaylist->ms=mapset; - displaylist->dc.trans=trans; + if(displaylist->dc.trans && displaylist->dc.trans!=trans) + transform_destroy(displaylist->dc.trans); + if(displaylist->dc.trans!=trans) + displaylist->dc.trans=transform_dup(trans); displaylist->workload=async ? 100 : 0; displaylist->cb=cb; displaylist->seq++; @@ -2335,6 +2341,15 @@ struct displaylist * graphics_displaylist_new(void) return ret; } +void graphics_displaylist_destroy(struct displaylist *displaylist) +{ + if(displaylist->dc.trans) + transform_destroy(displaylist->dc.trans); + g_free(displaylist); + +} + + /** * Get the map item which given displayitem is based on. * NOTE: returned structure doesn't contain any attributes or coordinates. type, map, idhi and idlow seem to be the only useable members. |