X-Git-Url: https://git.dlugolecki.net.pl/?a=blobdiff_plain;f=gom%2Fsubmission.c;h=cbdde5624537038d57f5c6845fc830d97168daef;hb=3d1822cb295202993c11564f7dd64442d8b67d2f;hp=7e5260f54991e7b9aba53f077bff9912697fc81b;hpb=d2d823fd4fe80162765029e5bc29f9b4f6f968f5;p=gedcom-parse.git diff --git a/gom/submission.c b/gom/submission.c index 7e5260f..cbdde56 100644 --- a/gom/submission.c +++ b/gom/submission.c @@ -32,8 +32,6 @@ struct submission* gom_submission = NULL; -DEFINE_MAKELINKFUNC(submission, XREF_SUBN) - DEFINE_REC_CB(submission, subn_start) DEFINE_XREF_CB(submission, subn_subm_start, submitter, submitter) DEFINE_STRING_CB(submission, subn_famf_start, family_file) @@ -57,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); @@ -68,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() @@ -97,8 +103,7 @@ void DESTROYFUNC(submission)() { if (gom_submission) { submission_cleanup(); - free(gom_submission); - gom_submission = NULL; + SAFE_FREE(gom_submission); } } @@ -129,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; }