Skip to content

Commit 85ca3cb

Browse files
authored
Make a copy of sessionDetails to avoid the risk of losing object during acting on notification of sessionID change. (#8189)
1 parent 42a6f54 commit 85ca3cb

File tree

4 files changed

+9
-2
lines changed

4 files changed

+9
-2
lines changed

FirebasePerformance/CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# Version 8.2.0
22
* Update log messages with proper log levels.
3+
* Fix a crash on FPRSessionDetails. (#8139)
34

45
# Version 8.1.0
56
* Firebase Performance logs now contain URLs to see the performance data on the Firebase console.

FirebasePerformance/Sources/AppActivity/FPRSessionDetails.m

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,12 @@ - (instancetype)initWithSessionId:(NSString *)sessionId options:(FPRSessionOptio
3333
return self;
3434
}
3535

36+
- (FPRSessionDetails *)copyWithZone:(NSZone *)zone {
37+
FPRSessionDetails *detailsCopy = [[[self class] allocWithZone:zone] initWithSessionId:_sessionId
38+
options:_options];
39+
return detailsCopy;
40+
}
41+
3642
- (NSUInteger)sessionLengthInMinutes {
3743
NSTimeInterval sessionLengthInSeconds = ABS([self.sessionCreationTime timeIntervalSinceNow]);
3844
return (sessionLengthInSeconds / 60);

FirebasePerformance/Sources/Instrumentation/FPRNetworkTrace.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -141,7 +141,7 @@ - (void)updateTraceWithCurrentSession {
141141
if (self.traceStarted && !self.traceCompleted) {
142142
dispatch_async(self.sessionIdSerialQueue, ^{
143143
FPRSessionManager *sessionManager = [FPRSessionManager sharedInstance];
144-
FPRSessionDetails *sessionDetails = sessionManager.sessionDetails;
144+
FPRSessionDetails *sessionDetails = [sessionManager.sessionDetails copy];
145145
if (sessionDetails) {
146146
[self.activeSessions addObject:sessionDetails];
147147
}

FirebasePerformance/Sources/Timer/FIRTrace.m

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -404,7 +404,7 @@ - (void)updateTraceWithSessionId {
404404
if ([self isTraceActive]) {
405405
dispatch_async(self.sessionIdSerialQueue, ^{
406406
FPRSessionManager *sessionManager = [FPRSessionManager sharedInstance];
407-
FPRSessionDetails *sessionDetails = sessionManager.sessionDetails;
407+
FPRSessionDetails *sessionDetails = [sessionManager.sessionDetails copy];
408408
if (sessionDetails) {
409409
[self.activeSessions addObject:sessionDetails];
410410
}

0 commit comments

Comments
 (0)