static void remove_old_requests(ipmi_packet_data_t * data, const nstime_t * curr_time) { wmem_list_frame_t * iter = wmem_list_head(data->request_list); while (iter) { ipmi_request_t * rq = (ipmi_request_t *) wmem_list_frame_data(iter); ipmi_frame_data_t * frame = get_frame_data(data, rq->frame_num); nstime_t delta; /* calculate time delta */ nstime_delta(&delta, curr_time, &frame->ts); if (nstime_to_msec(&delta) > response_after_req) { wmem_list_frame_t * del = iter; /* proceed to next request */ iter = wmem_list_frame_next(iter); /* free request data */ wmem_free(wmem_file_scope(), rq); /* remove list item */ wmem_list_remove_frame(data->request_list, del); } else { break; } } }
void wmem_list_remove(wmem_list_t *list, void *data) { wmem_list_frame_t *frame; frame = list->head; while (frame && frame->data != data) { frame = frame->next; } if (frame == NULL) { return; } wmem_list_remove_frame(list, frame); }