Skip to content

Commit 10c734f

Browse files
committed
Add @volatile on start field and synchronized block for full thread safety
1 parent b118df4 commit 10c734f

2 files changed

Lines changed: 10 additions & 8 deletions

File tree

iterableapi/src/main/java/com/iterable/iterableapi/EmbeddedImpressionData.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ data class EmbeddedImpressionData(
99
val placementId: Long,
1010
var displayCount: Int = 0,
1111
var duration: Float = 0.0f,
12-
var start: Date? = null
12+
@Volatile var start: Date? = null
1313
) {
1414
constructor(
1515
messageId: String,

iterableapi/src/main/java/com/iterable/iterableapi/EmbeddedSessionManager.kt

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -108,13 +108,15 @@ public class EmbeddedSessionManager {
108108
}
109109

110110
private fun updateDisplayCountAndDuration(impressionData: EmbeddedImpressionData): EmbeddedImpressionData {
111-
val start = impressionData.start
112-
if (start != null) {
113-
impressionData.displayCount = impressionData.displayCount.plus(1)
114-
impressionData.duration =
115-
impressionData.duration.plus((Date().time - start.time) / 1000.0)
116-
.toFloat()
117-
impressionData.start = null
111+
synchronized(impressionData) {
112+
val start = impressionData.start
113+
if (start != null) {
114+
impressionData.displayCount = impressionData.displayCount.plus(1)
115+
impressionData.duration =
116+
impressionData.duration.plus((Date().time - start.time) / 1000.0)
117+
.toFloat()
118+
impressionData.start = null
119+
}
118120
}
119121
return impressionData
120122
}

0 commit comments

Comments
 (0)