diff options
author | Michael Mann <mmann78@netscape.net> | 2012-08-18 02:55:18 +0000 |
---|---|---|
committer | Michael Mann <mmann78@netscape.net> | 2012-08-18 02:55:18 +0000 |
commit | 14a6d40267c759a1ed35435ffbf52f73d4349a6c (patch) | |
tree | 51f641c42cec4c4ac7478cb6c976ab3597a8b552 /epan/dissectors/packet-sctp.c | |
parent | db98d944e5012bf619af807c2183a3c2530b01d6 (diff) |
Use capture scoped memory for hash table functionality
svn path=/trunk/; revision=44559
Diffstat (limited to 'epan/dissectors/packet-sctp.c')
-rw-r--r-- | epan/dissectors/packet-sctp.c | 64 |
1 files changed, 6 insertions, 58 deletions
diff --git a/epan/dissectors/packet-sctp.c b/epan/dissectors/packet-sctp.c index a2c835c73a..36e4ff4b10 100644 --- a/epan/dissectors/packet-sctp.c +++ b/epan/dissectors/packet-sctp.c @@ -2128,58 +2128,11 @@ frag_hash(gconstpointer k) key->stream_id ^ key->stream_seq_num; } - - -static void -frag_free_msgs(sctp_frag_msg *msg) -{ - sctp_frag_be *beginend; - sctp_fragment *fragment; - - /* free all begins */ - while (msg->begins) { - beginend = msg->begins; - msg->begins = msg->begins->next; - g_free(beginend); - } - - /* free all ends */ - while (msg->ends) { - beginend = msg->ends; - msg->ends = msg->ends->next; - g_free(beginend); - } - - /* free all fragments */ - while (msg->fragments) { - fragment = msg->fragments; - msg->fragments = msg->fragments->next; - g_free(fragment->data); - g_free(fragment); - } - - /* msg->messages is se_ allocated, no need to free it */ - - g_free(msg); -} - -static gboolean -free_table_entry(gpointer key, gpointer value, gpointer user_data _U_) -{ - sctp_frag_msg *msg = value; - frag_key *fkey = key; - - frag_free_msgs(msg); - g_free(fkey); - return TRUE; -} - static void frag_table_init(void) { /* destroy an existing hash table and create a new one */ if (frag_table) { - g_hash_table_foreach_remove(frag_table, free_table_entry, NULL); g_hash_table_destroy(frag_table); frag_table=NULL; } @@ -2237,14 +2190,14 @@ add_fragment(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 tsn, msg = find_message(stream_id, stream_seq_num); if (!msg) { - msg = g_malloc (sizeof (sctp_frag_msg)); + msg = se_alloc (sizeof (sctp_frag_msg)); msg->begins = NULL; msg->ends = NULL; msg->fragments = NULL; msg->messages = NULL; msg->next = NULL; - key = g_malloc(sizeof (frag_key)); + key = se_alloc(sizeof (frag_key)); key->sport = sctp_info.sport; key->dport = sctp_info.dport; key->verification_tag = sctp_info.verification_tag; @@ -2284,12 +2237,12 @@ add_fragment(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 tsn, return NULL; /* create new fragment */ - fragment = g_malloc (sizeof (sctp_fragment)); + fragment = se_alloc (sizeof (sctp_fragment)); fragment->frame_num = pinfo->fd->num; fragment->tsn = tsn; fragment->len = tvb_length(tvb); fragment->next = NULL; - fragment->data = g_malloc (fragment->len); + fragment->data = se_alloc (fragment->len); tvb_memcpy(tvb, fragment->data, 0, fragment->len); /* add new fragment to linked list. sort ascending by tsn */ @@ -2313,7 +2266,7 @@ add_fragment(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 tsn, /* save begin or end if neccessary */ if (b_bit && !e_bit) { - beginend = g_malloc (sizeof (sctp_frag_be)); + beginend = se_alloc (sizeof (sctp_frag_be)); beginend->fragment = fragment; beginend->next = NULL; @@ -2338,7 +2291,7 @@ add_fragment(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, guint32 tsn, } if (!b_bit && e_bit) { - beginend = g_malloc (sizeof (sctp_frag_be)); + beginend = se_alloc (sizeof (sctp_frag_be)); beginend->fragment = fragment; beginend->next = NULL; @@ -2572,7 +2525,6 @@ fragment_reassembly(tvbuff_t *tvb, sctp_fragment* fragment, offset += frag_i->len; /* release fragment data */ - g_free(frag_i->data); frag_i->data = NULL; } @@ -2585,7 +2537,6 @@ fragment_reassembly(tvbuff_t *tvb, sctp_fragment* fragment, offset += frag_i->len; /* release fragment data */ - g_free(frag_i->data); frag_i->data = NULL; } @@ -2599,7 +2550,6 @@ fragment_reassembly(tvbuff_t *tvb, sctp_fragment* fragment, offset += frag_i->len; /* release fragment data */ - g_free(frag_i->data); frag_i->data = NULL; } } @@ -2625,7 +2575,6 @@ fragment_reassembly(tvbuff_t *tvb, sctp_fragment* fragment, if (beginend && beginend->next == begin) beginend->next = begin->next; } - g_free(begin); if (msg->ends == end) { msg->ends = end->next; @@ -2636,7 +2585,6 @@ fragment_reassembly(tvbuff_t *tvb, sctp_fragment* fragment, if (beginend && beginend->next == end) beginend->next = end->next; } - g_free(end); /* create data source */ new_tvb = tvb_new_child_real_data(tvb, message->data, len, len); |