mirror of
https://github.com/chhylp123/hifiasm.git
synced 2026-09-15 12:47:57 +08:00
r184: fixed a memory leak in POA
This commit is contained in:
@@ -3,7 +3,7 @@
|
||||
|
||||
#include <pthread.h>
|
||||
|
||||
#define HA_VERSION "0.3.0-dirty-r183"
|
||||
#define HA_VERSION "0.3.0-dirty-r184"
|
||||
|
||||
#define VERBOSE 0
|
||||
#define VERBOSE_GFA 0
|
||||
|
||||
108
POA.cpp
108
POA.cpp
@@ -1,29 +1,27 @@
|
||||
#include "POA.h"
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include "POA.h"
|
||||
#include "Correct.h"
|
||||
#include "Process_Read.h"
|
||||
#define INIT_EDGE_SIZE 50
|
||||
#define INCREASE_EDGE_SIZE 5
|
||||
#define INIT_NODE_SIZE 16000
|
||||
|
||||
|
||||
|
||||
/********
|
||||
* Edge *
|
||||
********/
|
||||
|
||||
void init_Edge_alloc(Edge_alloc* list)
|
||||
{
|
||||
if (list->list == NULL)
|
||||
{
|
||||
if (list->list == NULL) {
|
||||
list->size = INIT_EDGE_SIZE;
|
||||
list->length = 0;
|
||||
list->delete_length = 0;
|
||||
list->list = (Edge*)malloc(sizeof(Edge)*list->size);
|
||||
}
|
||||
else
|
||||
{
|
||||
} else {
|
||||
list->length = 0;
|
||||
list->delete_length = 0;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void clear_Edge_alloc(Edge_alloc* list)
|
||||
@@ -34,15 +32,17 @@ void clear_Edge_alloc(Edge_alloc* list)
|
||||
|
||||
void destory_Edge_alloc(Edge_alloc* list)
|
||||
{
|
||||
if (list && list->list)
|
||||
free(list->list);
|
||||
}
|
||||
|
||||
void append_Edge_alloc(Edge_alloc* list, uint64_t in_node, uint64_t out_node, uint64_t weight, uint64_t length)
|
||||
{
|
||||
if (list->length + 1 > list->size)
|
||||
{
|
||||
if (list->length + 1 > list->size) {
|
||||
uint64_t old_size = list->size;
|
||||
list->size = list->size + INCREASE_EDGE_SIZE;
|
||||
list->list = (Edge*)realloc(list->list, sizeof(Edge)*list->size);
|
||||
memset(&list->list[old_size], 0, (list->size - old_size) * sizeof(Edge));
|
||||
}
|
||||
|
||||
list->list[list->length].in_node = in_node;
|
||||
@@ -55,7 +55,6 @@ void append_Edge_alloc(Edge_alloc* list, uint64_t in_node, uint64_t out_node, u
|
||||
list->length++;
|
||||
}
|
||||
|
||||
|
||||
int add_and_check_bi_direction_edge(Graph* graph, Node* in_node, Node* out_node, uint64_t weight, uint64_t flag)
|
||||
{
|
||||
Edge* e_forward;
|
||||
@@ -81,7 +80,6 @@ int add_and_check_bi_direction_edge(Graph* graph, Node* in_node, Node* out_node,
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void add_bi_direction_edge(Graph* graph, Node* in_node, Node* out_node, uint64_t weight, uint64_t flag)
|
||||
{
|
||||
|
||||
@@ -95,8 +93,6 @@ void add_bi_direction_edge(Graph* graph, Node* in_node, Node* out_node, uint64_t
|
||||
= Output_Edges((*in_node)).length - 1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int remove_and_check_bi_direction_edge_from_nodes(Graph* graph, Node* in_node, Node* out_node)
|
||||
{
|
||||
Edge* e_forward;
|
||||
@@ -135,8 +131,6 @@ int remove_and_check_bi_direction_edge_from_nodes(Graph* graph, Node* in_node, N
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
int remove_and_check_bi_direction_edge_from_edge(Graph* graph, Edge* e)
|
||||
{
|
||||
Edge* e_forward;
|
||||
@@ -171,85 +165,53 @@ int remove_and_check_bi_direction_edge_from_edge(Graph* graph, Edge* e)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
/********
|
||||
* Node *
|
||||
********/
|
||||
|
||||
void init_Node_alloc(Node_alloc* list)
|
||||
{
|
||||
memset(list, 0, sizeof(Node_alloc));
|
||||
list->size = INIT_NODE_SIZE;
|
||||
list->length = 0;
|
||||
list->delete_length = 0;
|
||||
list->list = (Node*)malloc(sizeof(Node)*list->size);
|
||||
list->sort.size = 0;
|
||||
list->sort.list = NULL;
|
||||
list->sort.visit = NULL;
|
||||
|
||||
list->sort.iterative_buffer = NULL;
|
||||
list->sort.iterative_buffer_visit = NULL;
|
||||
|
||||
|
||||
uint64_t i;
|
||||
for (i = 0; i < list->size; i++)
|
||||
{
|
||||
list->list[i].insertion_edges.list=NULL;
|
||||
list->list[i].mismatch_edges.list=NULL;
|
||||
list->list[i].deletion_edges.list=NULL;
|
||||
}
|
||||
list->list = (Node*)calloc(list->size, sizeof(Node));
|
||||
}
|
||||
|
||||
void destory_Node_alloc(Node_alloc* list)
|
||||
{
|
||||
uint64_t i =0;
|
||||
for (i = 0; i < list->length; i++)
|
||||
{
|
||||
uint64_t i;
|
||||
for (i = 0; i < list->size; i++) {
|
||||
destory_Edge_alloc(&list->list[i].deletion_edges);
|
||||
destory_Edge_alloc(&list->list[i].insertion_edges);
|
||||
destory_Edge_alloc(&list->list[i].mismatch_edges);
|
||||
}
|
||||
|
||||
free(list->list);
|
||||
free(list->sort.list);
|
||||
free(list->sort.visit);
|
||||
free(list->sort.iterative_buffer);
|
||||
free(list->sort.iterative_buffer_visit);
|
||||
///free(list->topo_order);
|
||||
}
|
||||
|
||||
void clear_Node_alloc(Node_alloc* list)
|
||||
{
|
||||
uint64_t i =0;
|
||||
for (i = 0; i < list->length; i++)
|
||||
{
|
||||
for (i = 0; i < list->length; i++) { // TODO: is this list->size or list->length? The original version is list->length.
|
||||
clear_Edge_alloc(&list->list[i].insertion_edges);
|
||||
clear_Edge_alloc(&list->list[i].mismatch_edges);
|
||||
clear_Edge_alloc(&list->list[i].deletion_edges);
|
||||
}
|
||||
|
||||
list->length = 0;
|
||||
list->delete_length = 0;
|
||||
}
|
||||
|
||||
|
||||
uint64_t append_Node_alloc(Node_alloc* list, char base)
|
||||
{
|
||||
|
||||
if (list->length + 1 > list->size)
|
||||
{
|
||||
uint64_t i = list->size;
|
||||
|
||||
if (list->length + 1 > list->size) {
|
||||
uint64_t old_size = list->size;
|
||||
list->size = list->size * 2;
|
||||
list->list = (Node*)realloc(list->list, sizeof(Node) * list->size);
|
||||
///list->topo_order = (uint64_t*)realloc(list->topo_order, sizeof(uint64_t)*list->size);
|
||||
|
||||
for (; i < list->size; i++)
|
||||
{
|
||||
list->list[i].deletion_edges.list=NULL;
|
||||
list->list[i].insertion_edges.list=NULL;
|
||||
list->list[i].mismatch_edges.list=NULL;
|
||||
}
|
||||
memset(&list->list[old_size], 0, (list->size - old_size) * sizeof(Node));
|
||||
}
|
||||
|
||||
list->list[list->length].ID = list->length;
|
||||
@@ -265,15 +227,9 @@ uint64_t append_Node_alloc(Node_alloc* list, char base)
|
||||
return list->length - 1;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
/*********
|
||||
* Graph *
|
||||
*********/
|
||||
|
||||
void init_Graph(Graph* g)
|
||||
{
|
||||
@@ -310,12 +266,6 @@ void clear_Graph(Graph* g)
|
||||
clear_Queue(&(g->node_q));
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
void addUnmatchedSeqToGraph(Graph* g, char* g_read_seq, long long g_read_length, long long* startID, long long* endID)
|
||||
{
|
||||
long long firstID, lastID, nodeID, i;
|
||||
@@ -356,8 +306,6 @@ void addUnmatchedSeqToGraph(Graph* g, char* g_read_seq, long long g_read_length,
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
void addmatchedSeqToGraph(Graph* backbone, long long currentNodeID, char* x_string, long long x_length,
|
||||
char* y_string, long long y_length, CIGAR* cigar, long long backbone_start, long long backbone_end)
|
||||
{
|
||||
@@ -422,9 +370,3 @@ void addmatchedSeqToGraph(Graph* backbone, long long currentNodeID, char* x_stri
|
||||
cigar_i++;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user