diff options
author | Ben Wiederhake <BenWiederhake.GitHub@gmx.de> | 2016-04-14 18:59:17 +0300 |
---|---|---|
committer | Ben Wiederhake <BenWiederhake.GitHub@gmx.de> | 2016-08-02 00:11:50 +0300 |
commit | 8213472ea8bd6509ab20fdcb851a70008da185c7 (patch) | |
tree | 1c5802e99eeeb88287681d06c910e578927d5a60 /structures.c | |
parent | 46334cf15fbc3a42beb21c4a4c4f1daeea49eb02 (diff) |
Free messages exactly once
Diffstat (limited to 'structures.c')
-rw-r--r-- | structures.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/structures.c b/structures.c index 4b2fde0..9a2f798 100644 --- a/structures.c +++ b/structures.c @@ -2570,11 +2570,22 @@ void tgls_free_message_gw (struct tgl_message *M, void *TLS) { tgls_free_message (TLS, M); } +void tgls_remove_message_gw (struct tgl_state *TLS, struct tgl_message *M) { + if (tree_lookup_message (TLS->message_unsent_tree, M)) { + tglm_message_remove_unsent (TLS, M); + } +} + +void tgls_remove_and_free_message_gw (struct tgl_message *M, void *TLS) { + tgls_remove_message_gw (TLS, M); + tgls_free_message (TLS, M); +} + void tgl_free_all (struct tgl_state *TLS) { tree_act_ex_peer (TLS->peer_tree, tgls_free_peer_gw, TLS); TLS->peer_tree = tree_clear_peer (TLS->peer_tree); TLS->peer_by_name_tree = tree_clear_peer_by_name (TLS->peer_by_name_tree); - tree_act_ex_message (TLS->message_tree, tgls_free_message_gw, TLS); + tree_act_ex_message (TLS->message_tree, tgls_remove_and_free_message_gw, TLS); TLS->message_tree = tree_clear_message (TLS->message_tree); tree_act_ex_message (TLS->message_unsent_tree, tgls_free_message_gw, TLS); TLS->message_unsent_tree = tree_clear_message (TLS->message_unsent_tree); |