void destroy_hmmer_wrapper() { int index; if(models != NULL) { for(index = 0;index < num_models;index++) { p7_oprofile_Destroy(models[index]); p7_profile_Destroy(gmodels[index]); } free(models); free(gmodels); } if(wrapper_results != NULL) { for(index = 0;index < num_models;index++) { destroy_result(wrapper_results[index]); } free(wrapper_results); } if(bg != NULL) { p7_bg_Destroy(bg); } if(hmm_fp != NULL) { p7_hmmfile_Close(hmm_fp); } if(oxf) { p7_omx_Destroy(oxf); } if(oxb) { p7_omx_Destroy(oxb); } if(gxf) { p7_gmx_Destroy(gxf); } if(gxb) { p7_gmx_Destroy(gxb); } if(abc) { esl_alphabet_Destroy(abc); } if(tr) { p7_trace_Destroy(tr); } }
void destroy_result (RESULT_NODE *node) { int argc; if (node) { if (node-> scope) destroy_result (node-> scope); if (node-> name) destroy_result (node-> name); if (node-> op1) destroy_result (node-> op1); if (node-> op2) destroy_result (node-> op2); if (node-> as) destroy_result (node-> as); if (node-> to) destroy_result (node-> to); if (node-> before) destroy_result (node-> before); if (node-> after) destroy_result (node-> after); if (node-> operand) destroy_result (node-> operand); if (node-> culprit) mem_free (node-> culprit); argc = node-> argc; if (argc) { while (argc--) if (node-> argv [argc]) destroy_result (node-> argv [argc]); mem_free (node-> argv); } if (node-> value. s) mem_free (node-> value. s); if (node-> value. b) mem_free (node-> value. b); if (node-> value. c && node-> value. c-> destroy) node-> value. c-> destroy (node-> value. i); /* Clean up link from parent to avoid multiple frees */ if (node-> parent) { if (node == node-> parent-> scope) node-> parent-> scope = NULL; if (node == node-> parent-> name) node-> parent-> name = NULL; if (node == node-> parent-> op1) node-> parent-> op1 = NULL; if (node == node-> parent-> op2) node-> parent-> op2 = NULL; if (node == node-> parent-> as) node-> parent-> as = NULL; if (node == node-> parent-> to) node-> parent-> to = NULL; if (node == node-> parent-> before) node-> parent-> before = NULL; if (node == node-> parent-> after) node-> parent-> after = NULL; if (node == node-> parent-> operand) node-> parent-> operand = NULL; argc = node-> parent-> argc; while (argc--) if (node == node-> parent-> argv [argc]) node-> parent-> argv [argc] = NULL; } node-> next = result_node_cache; result_node_cache = node; } }