summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChris Young <chris@unsatisfactorysoftware.co.uk>2015-11-24 23:22:15 +0000
committerChris Young <chris@unsatisfactorysoftware.co.uk>2015-11-24 23:22:15 +0000
commite27525123baa045d2400cfb5133f55d3ed4cb2a8 (patch)
tree2339198d895068fccae1532bf2f48aa57d31c684
parentfa87f197c214620b00bc07c38034b38efa638210 (diff)
downloadnetsurf-e27525123baa045d2400cfb5133f55d3ed4cb2a8.tar.gz
netsurf-e27525123baa045d2400cfb5133f55d3ed4cb2a8.tar.bz2
Make an effort to free resources when a fatal error occurs during initialisation
-rw-r--r--amiga/gui.c27
1 files changed, 26 insertions, 1 deletions
diff --git a/amiga/gui.c b/amiga/gui.c
index 6859143c8..a47ac98ac 100644
--- a/amiga/gui.c
+++ b/amiga/gui.c
@@ -5459,11 +5459,15 @@ int main(int argc, char** argv)
if (ami_open_resources() == false) { /* alloc message ports */
ami_misc_fatal_error("Unable to allocate resources");
+ ami_gui_splash_close(splash_window);
+ ami_libs_close();
return RETURN_FAIL;
}
if(ami_scheduler_process_create(schedulermsgport) != NSERROR_OK) {
ami_misc_fatal_error("Failed to initialise scheduler");
+ ami_gui_splash_close(splash_window);
+ ami_libs_close();
return RETURN_FAIL;
}
@@ -5479,6 +5483,9 @@ int main(int argc, char** argv)
users_dir = ASPrintf("%s", USERS_DIR);
if(users_dir == NULL) {
ami_misc_fatal_error("Failed to allocate memory");
+ ami_scheduler_process_delete();
+ ami_gui_splash_close(splash_window);
+ ami_libs_close();
return RETURN_FAIL;
}
}
@@ -5488,6 +5495,9 @@ int main(int argc, char** argv)
struct InfoData *infodata = AllocDosObject(DOS_INFODATA, 0);
if(infodata == NULL) {
ami_misc_fatal_error("Failed to allocate memory");
+ ami_scheduler_process_delete();
+ ami_gui_splash_close(splash_window);
+ ami_libs_close();
return RETURN_FAIL;
}
GetDiskInfoTags(GDI_StringNameInput, users_dir,
@@ -5495,7 +5505,10 @@ int main(int argc, char** argv)
TAG_DONE);
if(infodata->id_DiskState == ID_DISKSTATE_WRITE_PROTECTED) {
FreeDosObject(DOS_INFODATA, infodata);
- ami_misc_fatal_error("Cannot run with user dir on a write-protected volume");
+ ami_misc_fatal_error("User directory MUST be on a writeable volume");
+ ami_scheduler_process_delete();
+ ami_gui_splash_close(splash_window);
+ ami_libs_close();
return RETURN_FAIL;
}
FreeDosObject(DOS_INFODATA, infodata);
@@ -5514,6 +5527,9 @@ int main(int argc, char** argv)
current_user_dir = AllocVecTags(len, NULL);
if(current_user_dir == NULL) {
ami_misc_fatal_error("Failed to allocate memory");
+ ami_scheduler_process_delete();
+ ami_gui_splash_close(splash_window);
+ ami_libs_close();
return RETURN_FAIL;
}
@@ -5545,6 +5561,9 @@ int main(int argc, char** argv)
ret = nsoption_init(ami_set_options, &nsoptions, &nsoptions_default);
if (ret != NSERROR_OK) {
ami_misc_fatal_error("Options failed to initialise");
+ ami_scheduler_process_delete();
+ ami_gui_splash_close(splash_window);
+ ami_libs_close();
return RETURN_FAIL;
}
nsoption_read(current_user_options, NULL);
@@ -5552,6 +5571,9 @@ int main(int argc, char** argv)
if (ami_locate_resource(messages, "Messages") == false) {
ami_misc_fatal_error("Cannot open Messages file");
+ ami_scheduler_process_delete();
+ ami_gui_splash_close(splash_window);
+ ami_libs_close();
return RETURN_FAIL;
}
@@ -5560,6 +5582,9 @@ int main(int argc, char** argv)
ret = netsurf_init(current_user_cache);
if (ret != NSERROR_OK) {
ami_misc_fatal_error("NetSurf failed to initialise");
+ ami_scheduler_process_delete();
+ ami_gui_splash_close(splash_window);
+ ami_libs_close();
return RETURN_FAIL;
}