Skip to content

Commit 7f75a00

Browse files
author
Vysheng
committed
Fixed rare crush in case of multiple query answers
1 parent 8c20695 commit 7f75a00

File tree

1 file changed

+23
-10
lines changed

1 file changed

+23
-10
lines changed

queries.c

+23-10
Original file line numberDiff line numberDiff line change
@@ -826,7 +826,9 @@ static int msg_send_on_answer (struct query *q UU) {
826826
assert (x == CODE_messages_sent_message || x == CODE_messages_sent_message_link);
827827
int id = fetch_int (); // id
828828
struct tgl_message *M = q->extra;
829-
bl_do_set_msg_id (M, id);
829+
if (M->id != id) {
830+
bl_do_set_msg_id (M, id);
831+
}
830832
int date = fetch_int ();
831833
int pts = fetch_int ();
832834
//tglu_fetch_seq ();
@@ -837,8 +839,10 @@ static int msg_send_on_answer (struct query *q UU) {
837839
bl_do_set_pts (pts);
838840
bl_do_msg_seq_update (id);
839841
} else {
840-
vlogprintf (E_NOTICE, "Hole in seq\n");
841-
tgl_do_get_difference (0, 0, 0);
842+
if (seq > tgl_state.seq + 1) {
843+
vlogprintf (E_NOTICE, "Hole in seq\n");
844+
tgl_do_get_difference (0, 0, 0);
845+
}
842846
}
843847
if (x == CODE_messages_sent_message_link) {
844848
assert (skip_type_any (TYPE_TO_PARAM_1 (vector, TYPE_TO_PARAM (contacts_link))) >= 0);
@@ -1066,7 +1070,10 @@ static int mark_read_on_receive (struct query *q UU) {
10661070
bl_do_set_pts (pts);
10671071
bl_do_set_seq (seq);
10681072
} else {
1069-
tgl_do_get_difference (0, 0, 0);
1073+
if (seq > tgl_state.seq + 1) {
1074+
vlogprintf (E_NOTICE, "Hole in seq\n");
1075+
tgl_do_get_difference (0, 0, 0);
1076+
}
10701077
}
10711078

10721079
int offset = fetch_int (); // offset
@@ -1394,8 +1401,10 @@ static int send_file_on_answer (struct query *q UU) {
13941401
bl_do_set_pts (pts);
13951402
bl_do_msg_seq_update (M->id);
13961403
} else {
1397-
vlogprintf (E_NOTICE, "Hole in seq\n");
1398-
tgl_do_get_difference (0, 0, 0);
1404+
if (seq > tgl_state.seq + 1) {
1405+
vlogprintf (E_NOTICE, "Hole in seq\n");
1406+
tgl_do_get_difference (0, 0, 0);
1407+
}
13991408
}
14001409

14011410
if (q->callback) {
@@ -1814,8 +1823,10 @@ static int fwd_msg_on_answer (struct query *q UU) {
18141823
bl_do_set_pts (pts);
18151824
bl_do_msg_seq_update (M->id);
18161825
} else {
1817-
vlogprintf (E_NOTICE, "Hole in seq\n");
1818-
tgl_do_get_difference (0, 0, 0);
1826+
if (seq > tgl_state.seq + 1) {
1827+
vlogprintf (E_NOTICE, "Hole in seq\n");
1828+
tgl_do_get_difference (0, 0, 0);
1829+
}
18191830
}
18201831
//print_message (M);
18211832
if (q->callback) {
@@ -1952,8 +1963,10 @@ static int rename_chat_on_answer (struct query *q UU) {
19521963
bl_do_set_pts (pts);
19531964
bl_do_msg_seq_update (M->id);
19541965
} else {
1955-
vlogprintf (E_NOTICE, "Hole in seq\n");
1956-
tgl_do_get_difference (0, 0, 0);
1966+
if (seq > tgl_state.seq + 1) {
1967+
vlogprintf (E_NOTICE, "Hole in seq\n");
1968+
tgl_do_get_difference (0, 0, 0);
1969+
}
19571970
}
19581971
//print_message (M);
19591972
if (q->callback) {

0 commit comments

Comments
 (0)