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);
  }
}
Beispiel #2
0
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;
      }
}