/* * cleanup_list * * helper function to remove scamper_fd_poll structures from any lists. */ static void cleanup_list(dlist_t *list) { scamper_fd_poll_t *poll; if(list == NULL) return; while((poll = dlist_head_pop(list)) != NULL) { poll->list = NULL; poll->node = NULL; } dlist_free(list); return; }
void scamper_rtsock_cleanup() { #ifndef _WIN32 rtsock_pair_t *pair; if(pairs != NULL) { while((pair = dlist_head_pop(pairs)) != NULL) { pair->node = NULL; rtsock_pair_free(pair); } dlist_free(pairs); pairs = NULL; } #endif return; }
/* * scamper_task_free * * free a task structure. * this involves freeing the task using the free pointer provided, * freeing the queue data structure, unholding any tasks blocked, and * finally freeing the task structure itself. */ void scamper_task_free(scamper_task_t *task) { scamper_task_anc_t *anc; task_onhold_t *toh; int i; if(task->funcs != NULL) task->funcs->task_free(task); if(task->queue != NULL) { scamper_queue_free(task->queue); task->queue = NULL; } if(task->onhold != NULL) { while((toh = dlist_head_pop(task->onhold)) != NULL) { toh->unhold(toh->param); free(toh); } dlist_free(task->onhold); } if(task->cyclemon != NULL) { scamper_cyclemon_unuse(task->cyclemon); task->cyclemon = NULL; } if(task->sourcetask != NULL) { scamper_sourcetask_free(task->sourcetask); task->sourcetask = NULL; } if(task->siglist != NULL) { scamper_task_sig_deinstall(task); slist_free(task->siglist); } if(task->ancillary != NULL) { while((anc = dlist_head_pop(task->ancillary)) != NULL) { anc->node = NULL; anc->freedata(anc->data); free(anc); } dlist_free(task->ancillary); } if(task->fds != NULL) { for(i=0; i<task->fdc; i++) scamper_fd_free(task->fds[i]); free(task->fds); } free(task); return; }