Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/majn/tgl.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Wiederhake <BenWiederhake.GitHub@gmx.de>2016-04-14 18:59:17 +0300
committerBen Wiederhake <BenWiederhake.GitHub@gmx.de>2016-08-02 00:11:50 +0300
commit8213472ea8bd6509ab20fdcb851a70008da185c7 (patch)
tree1c5802e99eeeb88287681d06c910e578927d5a60 /structures.c
parent46334cf15fbc3a42beb21c4a4c4f1daeea49eb02 (diff)
Free messages exactly once
Diffstat (limited to 'structures.c')
-rw-r--r--structures.c13
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);