mirror of
https://github.com/signalapp/Signal-Desktop.git
synced 2025-12-20 02:08:57 +00:00
Avoid deadlock when processing deletes and edits concurrently
This commit is contained in:
@@ -8758,6 +8758,7 @@ function saveEditedMessages(
|
||||
alreadyInTransaction: true,
|
||||
});
|
||||
|
||||
try {
|
||||
for (const { conversationId, messageId, readStatus, sentAt } of history) {
|
||||
const [query, params] = sql`
|
||||
INSERT INTO edited_messages (
|
||||
@@ -8775,6 +8776,28 @@ function saveEditedMessages(
|
||||
|
||||
db.prepare(query).run(params);
|
||||
}
|
||||
} catch (e) {
|
||||
const [messageExistsQuery, messageExistsParams] = sql`
|
||||
SELECT EXISTS(
|
||||
SELECT 1 FROM messages
|
||||
WHERE messages.id = ${mainMessage.id}
|
||||
);
|
||||
`;
|
||||
const messageExists = db
|
||||
.prepare(messageExistsQuery, {
|
||||
pluck: true,
|
||||
})
|
||||
.get<number>(messageExistsParams);
|
||||
|
||||
if (messageExists !== 1) {
|
||||
logger.warn(
|
||||
'saveEditedMessages: save failed because message does not exist'
|
||||
);
|
||||
} else {
|
||||
// Some other, unknown error
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
})();
|
||||
}
|
||||
|
||||
|
||||
@@ -365,8 +365,8 @@ export async function modifyTargetMessage(
|
||||
if (!isFirstRun && !skipEdits) {
|
||||
const edits = Edits.forMessage(message.attributes);
|
||||
log.info(`${logId}: ${edits.length} edits in second run`);
|
||||
await Promise.all(
|
||||
edits.map(editAttributes =>
|
||||
drop(
|
||||
conversation.queueJob('modifyTargetMessage/edits', () =>
|
||||
handleEditMessage(message.attributes, editAttributes)
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user