From b3c524cea10d636bd7e657d274ba9f94c1d1e433 Mon Sep 17 00:00:00 2001 From: Chris Young Date: Fri, 29 Jan 2016 00:24:15 +0000 Subject: Move some things around to try and prevent invalid pointer accesses on exit --- amiga/bitmap.c | 9 +++++---- amiga/gui.c | 41 ++++++++++++++++++++--------------------- amiga/theme.c | 3 ++- 3 files changed, 27 insertions(+), 26 deletions(-) diff --git a/amiga/bitmap.c b/amiga/bitmap.c index b98d95f5a..986f4261f 100644 --- a/amiga/bitmap.c +++ b/amiga/bitmap.c @@ -112,11 +112,12 @@ void amiga_bitmap_destroy(void *bitmap) if(bm) { - if((bm->nativebm) && (bm->dto == NULL)) { + if((bm->nativebm) && (bm->native == AMI_NSBM_TRUECOLOUR)) { ami_rtg_freebitmap(bm->nativebm); } - + if(bm->dto) { + /**\todo find out why this crashes on exit but not during normal program execution */ DisposeDTObject(bm->dto); } @@ -163,7 +164,7 @@ void amiga_bitmap_modified(void *bitmap) { struct bitmap *bm = bitmap; - if((bm->nativebm) && (bm->dto == NULL)) + if((bm->nativebm) && (bm->native == AMI_NSBM_TRUECOLOUR)) ami_rtg_freebitmap(bm->nativebm); if(bm->dto) DisposeDTObject(bm->dto); @@ -516,7 +517,7 @@ static inline struct BitMap *ami_bitmap_get_palettemapped(struct bitmap *bitmap, if(bitmap->dto == NULL) { bitmap->dto = ami_datatype_object_from_bitmap(bitmap); - + SetDTAttrs(bitmap->dto, NULL, NULL, PDTA_Screen, scrn, PDTA_ScaleQuality, nsoption_bool(scale_quality), diff --git a/amiga/gui.c b/amiga/gui.c index fab5d14d5..c73f0d117 100644 --- a/amiga/gui.c +++ b/amiga/gui.c @@ -3001,6 +3001,10 @@ void ami_try_quit(void) static void gui_quit(void) { + LOG("Closing screen"); + ami_gui_close_screen(scrn, locked_screen, FALSE); + if(nsscreentitle) FreeVec(nsscreentitle); + ami_theme_throbber_free(); urldb_save(nsoption_charp(url_file)); @@ -3019,39 +3023,18 @@ static void gui_quit(void) ami_font_fini(); ami_help_free(); - LOG("Closing screen"); - ami_gui_close_screen(scrn, locked_screen, FALSE); - if(nsscreentitle) FreeVec(nsscreentitle); - LOG("Freeing menu items"); ami_ctxmenu_free(); ami_menu_free_glyphs(); LOG("Freeing mouse pointers"); ami_mouse_pointers_free(); - LOG("Freeing clipboard"); - ami_clipboard_free(); - LOG("Freeing scheduler resources"); - ami_schedule_free(); - - FreeSysObject(ASOT_PORT, appport); - FreeSysObject(ASOT_PORT, sport); - FreeSysObject(ASOT_PORT, schedulermsgport); ami_file_req_free(); ami_openurl_close(); FreeStringClass(urlStringClass); FreeObjList(window_list); - - FreeVec(current_user_options); - FreeVec(current_user_dir); - FreeVec(current_user_faviconcache); - FreeVec(current_user); - - ami_object_fini(); - - ami_libs_close(); } char *ami_gui_get_cache_favicon_name(nsurl *url, bool only_if_avail) @@ -5684,6 +5667,22 @@ int main(int argc, char** argv) ami_mime_free(); netsurf_exit(); + + FreeVec(current_user_options); + FreeVec(current_user_dir); + FreeVec(current_user_faviconcache); + FreeVec(current_user); + + ami_clipboard_free(); + ami_schedule_free(); + + FreeSysObject(ASOT_PORT, appport); + FreeSysObject(ASOT_PORT, sport); + FreeSysObject(ASOT_PORT, schedulermsgport); + + ami_object_fini(); + ami_libs_close(); + return RETURN_OK; } diff --git a/amiga/theme.c b/amiga/theme.c index 0b77dc560..6a0d5dac0 100644 --- a/amiga/theme.c +++ b/amiga/theme.c @@ -168,7 +168,7 @@ void ami_theme_throbber_setup(void) bm = ami_bitmap_from_datatype(throbberfile); throbber = ami_bitmap_get_native(bm, bm->width, bm->height, NULL); - + throbber_width = bm->width / throbber_frames; throbber_height = bm->height; throbber_nsbm = bm; @@ -177,6 +177,7 @@ void ami_theme_throbber_setup(void) void ami_theme_throbber_free(void) { amiga_bitmap_destroy(throbber_nsbm); + throbber_nsbm = NULL; throbber = NULL; } -- cgit v1.2.3