static void nodes_free(node_t *node) { if(node->child != NULL) nodes_free(node->child); if(node->next != NULL) nodes_free(node->next); free(node->name); free(node); }
void tree_free(tree_t tree) { if(tree != NULL_TREE) { nodes_free(&tree->node); } }
END_TEST START_TEST(job_nodes_test) { job *pjob = (job *)calloc(1, sizeof(job)); pjob->ji_usages = new std::map<std::string, job_host_data>(); pjob->ji_wattr[JOB_ATR_exec_host].at_val.at_str = strdup("napali/0-9+waimea/0-9"); pjob->ji_wattr[JOB_ATR_exec_port].at_val.at_str = strdup("15002+15002"); fail_unless(job_nodes(*pjob) != PBSE_NONE); // nothing should've happened since the flag isn't set fail_unless(pjob->ji_numnodes == 0); pjob->ji_wattr[JOB_ATR_exec_host].at_flags = ATR_VFLAG_SET; // Force it to not resolve the hostname addr_fail = true; int rc = job_nodes(*pjob); fail_unless(rc == PBSE_CANNOT_RESOLVE, "Error is %d", rc); addr_fail = false; // allow things to work normally fail_unless(job_nodes(*pjob) == PBSE_NONE); fail_unless(pjob->ji_numnodes == 2); fail_unless(pjob->ji_numvnod == 20); fail_unless(!strcmp(pjob->ji_hosts[0].hn_host, "napali")); fail_unless(!strcmp(pjob->ji_hosts[1].hn_host, "waimea")); fail_unless(pjob->ji_hosts[2].hn_node == TM_ERROR_NODE); fail_unless(pjob->ji_vnods[20].vn_node == TM_ERROR_NODE); for (int i = 0; i < 2; i++) { fail_unless(pjob->ji_hosts[i].hn_node == i); fail_unless(pjob->ji_hosts[i].hn_sister == SISTER_OKAY); fail_unless(pjob->ji_hosts[i].hn_port == 15002); fail_unless(GET_NEXT(pjob->ji_hosts[i].hn_events) == NULL); } for (int i = 0; i < 20; i++) { fail_unless(pjob->ji_vnods[i].vn_node == i); fail_unless(pjob->ji_vnods[i].vn_index == i % 10); fail_unless(pjob->ji_vnods[i].vn_host == &pjob->ji_hosts[i/10]); } nodes_free(pjob); fail_unless(pjob->ji_vnods == NULL); fail_unless(pjob->ji_hosts == NULL); }
void job_free( job *pj) /* I (modified) */ { int i; if (LOGLEVEL >= 8) { sprintf(log_buffer, "freeing job"); log_record(PBSEVENT_DEBUG, PBS_EVENTCLASS_JOB, pj->ji_qs.ji_jobid, log_buffer); } /* remove any malloc working attribute space */ for (i = 0;i < JOB_ATR_LAST;i++) { job_attr_def[i].at_free(&pj->ji_wattr[i]); } if (pj->ji_grpcache) free(pj->ji_grpcache); assert(pj->ji_preq == NULL); nodes_free(pj); tasks_free(pj); if (pj->ji_resources) { free(pj->ji_resources); pj->ji_resources = NULL; } if (pj->ji_globid) { free(pj->ji_globid); pj->ji_globid = NULL; } /* now free the main structure */ free((char *)pj); return; } /* END job_free() */
END_TEST START_TEST(job_nodes_test) { job *pjob = (job *)calloc(1, sizeof(job)); pjob->ji_wattr[JOB_ATR_exec_host].at_val.at_str = strdup("napali/0-9+waimea/0-9"); pjob->ji_wattr[JOB_ATR_exec_port].at_val.at_str = strdup("15002+15002"); job_nodes(*pjob); // nothing should've happened since the flag isn't set fail_unless(pjob->ji_numnodes == 0); pjob->ji_wattr[JOB_ATR_exec_host].at_flags = ATR_VFLAG_SET; job_nodes(*pjob); fail_unless(pjob->ji_numnodes == 2); fail_unless(pjob->ji_numvnod == 20); fail_unless(!strcmp(pjob->ji_hosts[0].hn_host, "napali")); fail_unless(!strcmp(pjob->ji_hosts[1].hn_host, "waimea")); fail_unless(pjob->ji_hosts[2].hn_node == TM_ERROR_NODE); fail_unless(pjob->ji_vnods[20].vn_node == TM_ERROR_NODE); for (int i = 0; i < 2; i++) { fail_unless(pjob->ji_hosts[i].hn_node == i); fail_unless(pjob->ji_hosts[i].hn_sister == SISTER_OKAY); fail_unless(pjob->ji_hosts[i].hn_port == 15002); fail_unless(GET_NEXT(pjob->ji_hosts[i].hn_events) == NULL); } for (int i = 0; i < 20; i++) { fail_unless(pjob->ji_vnods[i].vn_node == i); fail_unless(pjob->ji_vnods[i].vn_index == i % 10); fail_unless(pjob->ji_vnods[i].vn_host == &pjob->ji_hosts[i/10]); } nodes_free(pjob); fail_unless(pjob->ji_vnods == NULL); fail_unless(pjob->ji_hosts == NULL); }
void kitsune_heaplist_free(kitsune_heaplist* list) { nodes_free(list->begin); free(list); }
static void nodes_free(struct kitsune_heaplist_node* list_node) { if(list_node) { nodes_free(list_node->next); free(list_node); } }