diff --git a/src/tcp_reassembly/tcp_reassembly.cpp b/src/tcp_reassembly/tcp_reassembly.cpp index 7883522..c0e180e 100644 --- a/src/tcp_reassembly/tcp_reassembly.cpp +++ b/src/tcp_reassembly/tcp_reassembly.cpp @@ -33,6 +33,15 @@ struct tcp_reassembly struct tcp_segment *tcp_segment_new(uint32_t seq, const void *data, uint32_t len) { struct tcp_segment_private *p = (struct tcp_segment_private *)malloc(sizeof(struct tcp_segment_private) + len); + if (!p) + { + TCP_REASSEMBLY_LOG_ERROR("calloc failed"); + return NULL; + } + + p->ts = 0; + p->id = 0; + p->node.start = seq; p->node.last = (uint64_t)seq + (uint64_t)len - 1; p->data = (char *)p + sizeof(struct tcp_segment_private); @@ -65,8 +74,10 @@ struct tcp_reassembly *tcp_reassembly_new(uint64_t max_timeout, uint64_t max_seg assembler->max_timeout = max_timeout; assembler->max_seg_num = max_seg_num; assembler->cur_seg_num = 0; - assembler->root = RB_ROOT_CACHED; + assembler->sum_seg_num = 0; INIT_LIST_HEAD(&assembler->list); + assembler->root = RB_ROOT_CACHED; + assembler->recv_next = 0; return assembler; } @@ -167,8 +178,6 @@ struct tcp_segment *tcp_reassembly_pop(struct tcp_reassembly *assembler) node = interval_tree_iter_next(node, assembler->recv_next, assembler->recv_next); } - if(oldest==NULL)return NULL; - list_del(&oldest->lru); interval_tree_remove(&oldest->node, &assembler->root);