Fix race between sync messages and receipts
Previously, when processing a backlog of sync messages and their delivery receipts, we would fail to mark some messages as delivered even though we got a receipt. This was due to an async race condition between saving a sync message and fetching it after the receipt arrives. Fix by re-ordering idb requests such that we save the message first and fetch it after. Fixes #479 // FREEBIE
This commit is contained in:
parent
077cba284f
commit
63135a2337
2 changed files with 4 additions and 6 deletions
|
@ -238,8 +238,8 @@
|
|||
return;
|
||||
}
|
||||
|
||||
messages.fetchSentAt(timestamp).then(function() {
|
||||
groups.fetchGroups(pushMessage.source).then(function() {
|
||||
groups.fetchGroups(pushMessage.source).then(function() {
|
||||
messages.fetchSentAt(timestamp).then(function() {
|
||||
var found = false;
|
||||
messages.where({type: 'outgoing'}).forEach(function(message) {
|
||||
var deliveries = message.get('delivered') || 0;
|
||||
|
@ -264,8 +264,6 @@
|
|||
receipts.add({ timestamp: timestamp, source: pushMessage.source });
|
||||
return;
|
||||
});
|
||||
}).fail(function() {
|
||||
console.log('got delivery receipt for unknown message', pushMessage.source, timestamp);
|
||||
});
|
||||
}
|
||||
})();
|
||||
|
|
|
@ -352,8 +352,8 @@
|
|||
});
|
||||
}
|
||||
|
||||
conversation.save().then(function() {
|
||||
message.save().then(function() {
|
||||
message.save().then(function() {
|
||||
conversation.save().then(function() {
|
||||
conversation.trigger('newmessage', message);
|
||||
conversation.notify(message);
|
||||
});
|
||||
|
|
Loading…
Reference in a new issue