Only try to delete address if present.
[gedcom-parse.git] / gom / submission.c
index 3ecee29232686349a6d31381e6ab90d53188eecc..cbdde5624537038d57f5c6845fc830d97168daef 100644 (file)
@@ -55,7 +55,15 @@ void submission_subscribe()
   gedcom_subscribe_to_element(ELT_SUBN_RIN, subn_rin_start, def_elt_end);  
 }
 
-void submission_cleanup()
+void UNREFALLFUNC(submission)()
+{
+  if (gom_submission) {
+    unref_xref_value(gom_submission->submitter);
+    UNREFALLFUNC(user_data)(gom_submission->extra);
+  }
+}
+
+void CLEANFUNC(submission)()
 {
   if (gom_submission) {
     SAFE_FREE(gom_submission->xrefstr);
@@ -66,8 +74,8 @@ void submission_cleanup()
     SAFE_FREE(gom_submission->ordinance_process_flag);
     SAFE_FREE(gom_submission->record_id);
     DESTROY_CHAIN_ELTS(user_data, gom_submission->extra);
-    SAFE_FREE(gom_submission);
   }
+  SAFE_FREE(gom_submission);
 }
 
 struct submission* gom_get_submission()
@@ -95,8 +103,7 @@ void DESTROYFUNC(submission)()
 {
   if (gom_submission) {
     submission_cleanup();
-    free(gom_submission);
-    gom_submission = NULL;
+    SAFE_FREE(gom_submission);
   }
 }
 
@@ -127,8 +134,10 @@ int DELETEFUNC(submission)()
   int result = 1;
   if (gom_submission) {
     result = gedcom_delete_xref(gom_submission->xrefstr);
-    if (result == 0)
+    if (result == 0) {
+      UNREFALLFUNC(submission)();
       DESTROYFUNC(submission)();
+    }
   }
   return result;
 }