Fix freeze due to nested transaction

Not a fan of this solution; we need to clean up display name management
pull/289/head
nielsandriesse 5 years ago
parent 04a960c78c
commit fb7326a3b0

@ -74,6 +74,7 @@ extern const NSUInteger kOWSProfileManager_MaxAvatarDiameter;
- (nullable OWSAES256Key *)profileKeyForRecipientId:(NSString *)recipientId;
- (nullable NSString *)profileNameForRecipientWithID:(NSString *)recipientID avoidWriteTransaction:(BOOL)avoidWriteTransaction;
- (nullable NSString *)profileNameForRecipientWithID:(NSString *)recipientID;
- (nullable NSString *)profileNameForRecipientWithID:(NSString *)recipientID transaction:(YapDatabaseReadWriteTransaction *)transaction;

@ -1025,6 +1025,11 @@ typedef void (^ProfileManagerFailureBlock)(NSError *error);
}
- (nullable NSString *)profileNameForRecipientWithID:(NSString *)recipientID
{
return [self profileNameForRecipientWithID:recipientID avoidingWriteTransaction:NO];
}
- (nullable NSString *)profileNameForRecipientWithID:(NSString *)recipientID avoidingWriteTransaction:(BOOL)avoidWriteTransaction
{
if ([self.tsAccountManager.localNumber isEqualToString:recipientID]) {
return self.localUserProfile.profileName;
@ -1047,6 +1052,7 @@ typedef void (^ProfileManagerFailureBlock)(NSError *error);
}
}
if (!avoidWriteTransaction) {
__block NSString *result;
[LKStorage writeSyncWithBlock:^(YapDatabaseReadWriteTransaction *transaction) {
@ -1060,6 +1066,9 @@ typedef void (^ProfileManagerFailureBlock)(NSError *error);
} else {
return result;
}
} else {
return recipientID;
}
}
- (nullable NSString *)profileNameForRecipientWithID:(NSString *)recipientID transaction:(YapDatabaseReadWriteTransaction *)transaction

@ -13,6 +13,15 @@ public final class UserDisplayNameUtilities : NSObject {
}
// MARK: Sessions
@objc(getPrivateChatDisplayNameAvoidWriteTransaction:)
public static func getPrivateChatDisplayNameAvoidingWriteTransaction(for publicKey: String) -> String? {
if publicKey == userPublicKey {
return userDisplayName
} else {
return SSKEnvironment.shared.profileManager.profileNameForRecipient(withID: publicKey, avoidingWriteTransaction: true)
}
}
@objc public static func getPrivateChatDisplayName(for publicKey: String) -> String? {
if publicKey == userPublicKey {
return userDisplayName

@ -133,7 +133,7 @@ const int32_t kGroupIdLength = 16;
if ([membersWhoLeft count] > 0) {
NSArray *oldMembersNames = [[membersWhoLeft allObjects] map:^NSString*(NSString* item) {
return [LKUserDisplayNameUtilities getPrivateChatDisplayNameFor:item];
return [LKUserDisplayNameUtilities getPrivateChatDisplayNameAvoidWriteTransaction:item];
}];
updatedGroupInfoString = [updatedGroupInfoString
stringByAppendingString:[NSString

@ -14,6 +14,7 @@ NS_ASSUME_NONNULL_BEGIN
- (OWSAES256Key *)localProfileKey;
- (nullable NSString *)localProfileName;
- (nullable NSString *)profileNameForRecipientWithID:(NSString *)recipientID avoidingWriteTransaction:(BOOL)avoidWriteTransaction;
- (nullable NSString *)profileNameForRecipientWithID:(NSString *)recipientID;
- (nullable NSString *)profileNameForRecipientWithID:(NSString *)recipientID transaction:(YapDatabaseReadWriteTransaction *)transaction;
- (nullable NSString *)profilePictureURL;

Loading…
Cancel
Save