Resolve media message race condition

Fixes #6677
Closes #6681
This commit is contained in:
FeuRenard 2017-05-25 17:40:43 +02:00 committed by Moxie Marlinspike
parent 5455bdffb2
commit a9ea672888

View File

@ -700,7 +700,8 @@ public class MmsDatabase extends MessagingDatabase {
MmsAddresses.forTo(request.getRecipients().toNumberStringList(false)), MmsAddresses.forTo(request.getRecipients().toNumberStringList(false)),
request.getBody(), request.getBody(),
attachments, attachments,
contentValues); contentValues,
null);
} catch (NoSuchMessageException e) { } catch (NoSuchMessageException e) {
throw new MmsException(e); throw new MmsException(e);
} }
@ -749,7 +750,7 @@ public class MmsDatabase extends MessagingDatabase {
long messageId = insertMediaMessage(masterSecret, retrieved.getAddresses(), long messageId = insertMediaMessage(masterSecret, retrieved.getAddresses(),
retrieved.getBody(), retrieved.getAttachments(), retrieved.getBody(), retrieved.getAttachments(),
contentValues); contentValues, null);
if (!Types.isExpirationTimerUpdate(mailbox)) { if (!Types.isExpirationTimerUpdate(mailbox)) {
DatabaseFactory.getThreadDatabase(context).setUnread(threadId); DatabaseFactory.getThreadDatabase(context).setUnread(threadId);
@ -921,11 +922,7 @@ public class MmsDatabase extends MessagingDatabase {
contentValues.remove(ADDRESS); contentValues.remove(ADDRESS);
long messageId = insertMediaMessage(masterSecret, addresses, message.getBody(), long messageId = insertMediaMessage(masterSecret, addresses, message.getBody(),
message.getAttachments(), contentValues); message.getAttachments(), contentValues, insertListener);
if (insertListener != null) {
insertListener.onComplete();
}
DatabaseFactory.getThreadDatabase(context).setLastSeen(threadId); DatabaseFactory.getThreadDatabase(context).setLastSeen(threadId);
jobManager.add(new TrimThreadJob(context, threadId)); jobManager.add(new TrimThreadJob(context, threadId));
@ -962,7 +959,8 @@ public class MmsDatabase extends MessagingDatabase {
@NonNull MmsAddresses addresses, @NonNull MmsAddresses addresses,
@Nullable String body, @Nullable String body,
@NonNull List<Attachment> attachments, @NonNull List<Attachment> attachments,
@NonNull ContentValues contentValues) @NonNull ContentValues contentValues,
@Nullable SmsDatabase.InsertListener insertListener)
throws MmsException throws MmsException
{ {
SQLiteDatabase db = databaseHelper.getWritableDatabase(); SQLiteDatabase db = databaseHelper.getWritableDatabase();
@ -991,6 +989,10 @@ public class MmsDatabase extends MessagingDatabase {
} finally { } finally {
db.endTransaction(); db.endTransaction();
if (insertListener != null) {
insertListener.onComplete();
}
notifyConversationListeners(contentValues.getAsLong(THREAD_ID)); notifyConversationListeners(contentValues.getAsLong(THREAD_ID));
DatabaseFactory.getThreadDatabase(context).update(contentValues.getAsLong(THREAD_ID), true); DatabaseFactory.getThreadDatabase(context).update(contentValues.getAsLong(THREAD_ID), true);
} }