Fix thread update race for draft update.

This commit is contained in:
Clark 2023-05-30 10:44:52 -04:00 committed by GitHub
parent c503df5eec
commit 05edc715ef
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -1389,6 +1389,8 @@ class ThreadTable(context: Context, databaseHelper: SignalDatabase) : DatabaseTa
return false return false
} }
writableDatabase.beginTransaction()
try {
val meaningfulMessages = messages.hasMeaningfulMessage(threadId) val meaningfulMessages = messages.hasMeaningfulMessage(threadId)
val isPinned by lazy { getPinnedThreadIds().contains(threadId) } val isPinned by lazy { getPinnedThreadIds().contains(threadId) }
@ -1398,6 +1400,7 @@ class ThreadTable(context: Context, databaseHelper: SignalDatabase) : DatabaseTa
if (shouldDelete) { if (shouldDelete) {
Log.d(TAG, "Deleting thread $threadId because it has no meaningful messages.") Log.d(TAG, "Deleting thread $threadId because it has no meaningful messages.")
deleteConversation(threadId) deleteConversation(threadId)
writableDatabase.setTransactionSuccessful()
return true return true
} else if (!isPinned) { } else if (!isPinned) {
return false return false
@ -1413,9 +1416,8 @@ class ThreadTable(context: Context, databaseHelper: SignalDatabase) : DatabaseTa
Log.w(TAG, "Failed to get a conversation snippet for thread $threadId") Log.w(TAG, "Failed to get a conversation snippet for thread $threadId")
if (shouldDelete) { if (shouldDelete) {
deleteConversation(threadId) deleteConversation(threadId)
} writableDatabase.setTransactionSuccessful()
} else if (isPinned) {
if (isPinned) {
updateThread( updateThread(
threadId = threadId, threadId = threadId,
meaningfulMessages = meaningfulMessages, meaningfulMessages = meaningfulMessages,
@ -1431,6 +1433,7 @@ class ThreadTable(context: Context, databaseHelper: SignalDatabase) : DatabaseTa
expiresIn = 0, expiresIn = 0,
readReceiptCount = 0 readReceiptCount = 0
) )
writableDatabase.setTransactionSuccessful()
} }
return true return true
} else { } else {
@ -1471,8 +1474,11 @@ class ThreadTable(context: Context, databaseHelper: SignalDatabase) : DatabaseTa
if (notifyListeners) { if (notifyListeners) {
notifyConversationListListeners() notifyConversationListListeners()
} }
writableDatabase.setTransactionSuccessful()
return false return false
} finally {
writableDatabase.endTransaction()
}
} }
fun updateSnippetTypeSilently(threadId: Long) { fun updateSnippetTypeSilently(threadId: Long) {