summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Young <chris@unsatisfactorysoftware.co.uk>2016-01-29 00:24:15 +0000
committerChris Young <chris@unsatisfactorysoftware.co.uk>2016-01-29 00:24:15 +0000
commitb3c524cea10d636bd7e657d274ba9f94c1d1e433 (patch)
tree7233f12bd72eaf8ee907e778f24ef0caceea2650
parent0ce170c18e971121e54ac60c863b523bc5874516 (diff)
downloadnetsurf-b3c524cea10d636bd7e657d274ba9f94c1d1e433.tar.gz
netsurf-b3c524cea10d636bd7e657d274ba9f94c1d1e433.tar.bz2
Move some things around to try and prevent invalid pointer accesses on exit
-rw-r--r--amiga/bitmap.c9
-rw-r--r--amiga/gui.c41
-rw-r--r--amiga/theme.c3
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;
}