Fix race condition: Pull from database after add to conversation

Also add some console logs to help us determine whether this ever
happens to people in the wild.

FREEBIE
pull/749/head
Scott Nonnenberg 8 years ago
parent e9152d9d27
commit 10c2874d19

@ -303,6 +303,9 @@
var read = unreadMessages.map(function(m) {
if (this.messageCollection.get(m.id)) {
m = this.messageCollection.get(m.id);
} else {
console.log('Marked a message as read in the database, but ' +
'it was not in messageCollection.');
}
m.markRead();
return {

@ -468,10 +468,23 @@
message.save().then(function() {
conversation.save().then(function() {
conversation.trigger('newmessage', message);
if (message.get('unread')) {
conversation.notify(message);
}
resolve();
// We fetch() here because, between the message.save() above and the previous
// line's trigger() call, we might have marked all messages unread in the
// database. This message might already be read!
var previousUnread = message.get('unread');
message.fetch().then(function() {
if (previousUnread !== message.get('unread')) {
console.log('Caught race condition on new message read state! ' +
'Manually starting timers.');
// We call markRead() even though the message is already marked read
// because we need to start expiration timers, etc.
message.markRead();
}
if (message.get('unread')) {
conversation.notify(message);
}
resolve();
});
});
});
});

Loading…
Cancel
Save