aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-rpc.c
diff options
context:
space:
mode:
Diffstat (limited to 'epan/dissectors/packet-rpc.c')
-rw-r--r--epan/dissectors/packet-rpc.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/epan/dissectors/packet-rpc.c b/epan/dissectors/packet-rpc.c
index e775e23a49..3e79a0a874 100644
--- a/epan/dissectors/packet-rpc.c
+++ b/epan/dissectors/packet-rpc.c
@@ -3797,18 +3797,19 @@ dissect_rpc_tcp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void* data)
static void
rpc_init_protocol(void)
{
- if (rpc_reassembly_table != NULL) {
- g_hash_table_destroy(rpc_reassembly_table);
- rpc_reassembly_table = NULL;
- }
-
rpc_reassembly_table = g_hash_table_new(rpc_fragment_hash,
rpc_fragment_equal);
-
reassembly_table_init(&rpc_fragment_table,
&addresses_ports_reassembly_table_functions);
}
+static void
+rpc_cleanup_protocol(void)
+{
+ reassembly_table_destroy(&rpc_fragment_table);
+ g_hash_table_destroy(rpc_reassembly_table);
+}
+
/* will be called once from register.c at startup time */
void
proto_register_rpc(void)
@@ -4083,6 +4084,7 @@ proto_register_rpc(void)
expert_rpc = expert_register_protocol(proto_rpc);
expert_register_field_array(expert_rpc, ei, array_length(ei));
register_init_routine(&rpc_init_protocol);
+ register_cleanup_routine(&rpc_cleanup_protocol);
rpc_module = prefs_register_protocol(proto_rpc, NULL);
prefs_register_bool_preference(rpc_module, "desegment_rpc_over_tcp",