diff options
Diffstat (limited to 'epan/dissectors/packet-rpc.c')
-rw-r--r-- | epan/dissectors/packet-rpc.c | 14 |
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", |