Fixed rare crush in case of multiple query answers
This commit is contained in:
parent
8c20695284
commit
7f75a00442
13
queries.c
13
queries.c
@ -826,7 +826,9 @@ static int msg_send_on_answer (struct query *q UU) {
|
|||||||
assert (x == CODE_messages_sent_message || x == CODE_messages_sent_message_link);
|
assert (x == CODE_messages_sent_message || x == CODE_messages_sent_message_link);
|
||||||
int id = fetch_int (); // id
|
int id = fetch_int (); // id
|
||||||
struct tgl_message *M = q->extra;
|
struct tgl_message *M = q->extra;
|
||||||
|
if (M->id != id) {
|
||||||
bl_do_set_msg_id (M, id);
|
bl_do_set_msg_id (M, id);
|
||||||
|
}
|
||||||
int date = fetch_int ();
|
int date = fetch_int ();
|
||||||
int pts = fetch_int ();
|
int pts = fetch_int ();
|
||||||
//tglu_fetch_seq ();
|
//tglu_fetch_seq ();
|
||||||
@ -837,9 +839,11 @@ static int msg_send_on_answer (struct query *q UU) {
|
|||||||
bl_do_set_pts (pts);
|
bl_do_set_pts (pts);
|
||||||
bl_do_msg_seq_update (id);
|
bl_do_msg_seq_update (id);
|
||||||
} else {
|
} else {
|
||||||
|
if (seq > tgl_state.seq + 1) {
|
||||||
vlogprintf (E_NOTICE, "Hole in seq\n");
|
vlogprintf (E_NOTICE, "Hole in seq\n");
|
||||||
tgl_do_get_difference (0, 0, 0);
|
tgl_do_get_difference (0, 0, 0);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if (x == CODE_messages_sent_message_link) {
|
if (x == CODE_messages_sent_message_link) {
|
||||||
assert (skip_type_any (TYPE_TO_PARAM_1 (vector, TYPE_TO_PARAM (contacts_link))) >= 0);
|
assert (skip_type_any (TYPE_TO_PARAM_1 (vector, TYPE_TO_PARAM (contacts_link))) >= 0);
|
||||||
}
|
}
|
||||||
@ -1066,8 +1070,11 @@ static int mark_read_on_receive (struct query *q UU) {
|
|||||||
bl_do_set_pts (pts);
|
bl_do_set_pts (pts);
|
||||||
bl_do_set_seq (seq);
|
bl_do_set_seq (seq);
|
||||||
} else {
|
} else {
|
||||||
|
if (seq > tgl_state.seq + 1) {
|
||||||
|
vlogprintf (E_NOTICE, "Hole in seq\n");
|
||||||
tgl_do_get_difference (0, 0, 0);
|
tgl_do_get_difference (0, 0, 0);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
int offset = fetch_int (); // offset
|
int offset = fetch_int (); // offset
|
||||||
int *t = q->extra;
|
int *t = q->extra;
|
||||||
@ -1394,9 +1401,11 @@ static int send_file_on_answer (struct query *q UU) {
|
|||||||
bl_do_set_pts (pts);
|
bl_do_set_pts (pts);
|
||||||
bl_do_msg_seq_update (M->id);
|
bl_do_msg_seq_update (M->id);
|
||||||
} else {
|
} else {
|
||||||
|
if (seq > tgl_state.seq + 1) {
|
||||||
vlogprintf (E_NOTICE, "Hole in seq\n");
|
vlogprintf (E_NOTICE, "Hole in seq\n");
|
||||||
tgl_do_get_difference (0, 0, 0);
|
tgl_do_get_difference (0, 0, 0);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (q->callback) {
|
if (q->callback) {
|
||||||
((void (*)(void *, int, struct tgl_message *))q->callback)(q->callback_extra, 1, M);
|
((void (*)(void *, int, struct tgl_message *))q->callback)(q->callback_extra, 1, M);
|
||||||
@ -1814,9 +1823,11 @@ static int fwd_msg_on_answer (struct query *q UU) {
|
|||||||
bl_do_set_pts (pts);
|
bl_do_set_pts (pts);
|
||||||
bl_do_msg_seq_update (M->id);
|
bl_do_msg_seq_update (M->id);
|
||||||
} else {
|
} else {
|
||||||
|
if (seq > tgl_state.seq + 1) {
|
||||||
vlogprintf (E_NOTICE, "Hole in seq\n");
|
vlogprintf (E_NOTICE, "Hole in seq\n");
|
||||||
tgl_do_get_difference (0, 0, 0);
|
tgl_do_get_difference (0, 0, 0);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
//print_message (M);
|
//print_message (M);
|
||||||
if (q->callback) {
|
if (q->callback) {
|
||||||
((void (*)(void *, int, struct tgl_message *))q->callback) (q->callback_extra, 1, M);
|
((void (*)(void *, int, struct tgl_message *))q->callback) (q->callback_extra, 1, M);
|
||||||
@ -1952,9 +1963,11 @@ static int rename_chat_on_answer (struct query *q UU) {
|
|||||||
bl_do_set_pts (pts);
|
bl_do_set_pts (pts);
|
||||||
bl_do_msg_seq_update (M->id);
|
bl_do_msg_seq_update (M->id);
|
||||||
} else {
|
} else {
|
||||||
|
if (seq > tgl_state.seq + 1) {
|
||||||
vlogprintf (E_NOTICE, "Hole in seq\n");
|
vlogprintf (E_NOTICE, "Hole in seq\n");
|
||||||
tgl_do_get_difference (0, 0, 0);
|
tgl_do_get_difference (0, 0, 0);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
//print_message (M);
|
//print_message (M);
|
||||||
if (q->callback) {
|
if (q->callback) {
|
||||||
((void (*)(void *, int, struct tgl_message *))q->callback) (q->callback_extra, 1, M);
|
((void (*)(void *, int, struct tgl_message *))q->callback) (q->callback_extra, 1, M);
|
||||||
|
Loading…
Reference in New Issue
Block a user