Skip to content

Commit e531526

Browse files
authored
Merge pull request #2738 from DataDog/nogorodnikov/rum-10413/mark-corefeature-properties-participating-in-datadogcontext-as-volatile
RUM-10413: Mark `CoreFeature` properties used to create `DatadogContext` as volatile
2 parents 1b90579 + 4505d3b commit e531526

File tree

4 files changed

+21
-19
lines changed

4 files changed

+21
-19
lines changed

dd-sdk-android-core/src/main/kotlin/com/datadog/android/core/internal/CoreFeature.kt

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -127,24 +127,41 @@ internal class CoreFeature(
127127
internal var userInfoProvider: MutableUserInfoProvider = NoOpMutableUserInfoProvider()
128128
internal var accountInfoProvider: MutableAccountInfoProvider = NoOpMutableAccountInfoProvider()
129129
internal var contextProvider: ContextProvider = NoOpContextProvider()
130+
internal var packageVersionProvider: AppVersionProvider = NoOpAppVersionProvider()
131+
internal var androidInfoProvider: AndroidInfoProvider = NoOpAndroidInfoProvider()
130132

131133
internal lateinit var okHttpClient: OkHttpClient
132134
internal var kronosClock: KronosClock? = null
133135

136+
@Volatile
134137
internal var clientToken: String = ""
135-
internal var packageName: String = ""
136-
internal var packageVersionProvider: AppVersionProvider = NoOpAppVersionProvider()
138+
139+
@Volatile
137140
internal var serviceName: String = ""
141+
142+
@Volatile
138143
internal var sourceName: String = DEFAULT_SOURCE_NAME
144+
145+
@Volatile
139146
internal var sdkVersion: String = DEFAULT_SDK_VERSION
147+
148+
@Volatile
140149
internal var isMainProcess: Boolean = true
150+
151+
@Volatile
141152
internal var envName: String = ""
153+
154+
@Volatile
142155
internal var variant: String = ""
143156
internal var batchSize: BatchSize = BatchSize.MEDIUM
144157
internal var uploadFrequency: UploadFrequency = UploadFrequency.AVERAGE
145158
internal var batchProcessingLevel: BatchProcessingLevel = BatchProcessingLevel.MEDIUM
146159
internal var ndkCrashHandler: NdkCrashHandler = NoOpNdkCrashHandler()
160+
161+
@Volatile
147162
internal var site: DatadogSite = DatadogSite.US1
163+
164+
@Volatile
148165
internal var appBuildId: String? = null
149166
internal var customUploadSchedulerStrategy: UploadSchedulerStrategy? = null
150167

@@ -156,7 +173,6 @@ internal class CoreFeature(
156173
internal var localDataEncryption: Encryption? = null
157174
internal var persistenceStrategyFactory: PersistenceStrategy.Factory? = null
158175
internal lateinit var storageDir: File
159-
internal lateinit var androidInfoProvider: AndroidInfoProvider
160176

161177
internal val appStartTimeNs: Long
162178
get() = appStartTimeProvider.appStartTimeNs
@@ -440,7 +456,6 @@ internal class CoreFeature(
440456
}
441457

442458
private fun readApplicationInformation(appContext: Context, configuration: Configuration) {
443-
packageName = appContext.packageName
444459
packageVersionProvider = DefaultAppVersionProvider(
445460
getPackageInfo(appContext)?.let {
446461
// we need to use the deprecated method because getLongVersionCode method is only
@@ -460,6 +475,7 @@ internal class CoreFeature(
460475

461476
private fun getPackageInfo(appContext: Context): PackageInfo? {
462477
return try {
478+
val packageName = appContext.packageName
463479
with(appContext.packageManager) {
464480
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
465481
getPackageInfo(packageName, PackageManager.PackageInfoFlags.of(0))
@@ -682,7 +698,6 @@ internal class CoreFeature(
682698

683699
private fun cleanupApplicationInfo() {
684700
clientToken = ""
685-
packageName = ""
686701
packageVersionProvider = NoOpAppVersionProvider()
687702
serviceName = ""
688703
sourceName = DEFAULT_SOURCE_NAME

dd-sdk-android-core/src/main/kotlin/com/datadog/android/core/internal/system/DefaultAppVersionProvider.kt

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,11 @@ import java.util.concurrent.atomic.AtomicReference
1010

1111
internal class DefaultAppVersionProvider(initialVersion: String) : AppVersionProvider {
1212

13-
private val value: AtomicReference<String>
13+
private val value = AtomicReference(initialVersion)
1414

1515
override var version: String
1616
get() = value.get()
1717
set(value) {
1818
this.value.set(value)
1919
}
20-
21-
init {
22-
this.value = AtomicReference(initialVersion)
23-
}
2420
}

dd-sdk-android-core/src/test/kotlin/com/datadog/android/core/internal/CoreFeatureTest.kt

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -321,7 +321,6 @@ internal class CoreFeatureTest {
321321

322322
// Then
323323
assertThat(testedFeature.clientToken).isEqualTo(fakeConfig.clientToken)
324-
assertThat(testedFeature.packageName).isEqualTo(appContext.fakePackageName)
325324
assertThat(testedFeature.packageVersionProvider.version).isEqualTo(appContext.fakeVersionName)
326325
assertThat(testedFeature.serviceName).isEqualTo(fakeConfig.service)
327326
assertThat(testedFeature.envName).isEqualTo(fakeConfig.env)
@@ -344,7 +343,6 @@ internal class CoreFeatureTest {
344343

345344
// Then
346345
assertThat(testedFeature.clientToken).isEqualTo(fakeConfig.clientToken)
347-
assertThat(testedFeature.packageName).isEqualTo(appContext.fakePackageName)
348346
assertThat(testedFeature.packageVersionProvider.version)
349347
.isEqualTo(appContext.fakeVersionName)
350348
assertThat(testedFeature.serviceName).isEqualTo(fakeConfig.service)
@@ -367,7 +365,6 @@ internal class CoreFeatureTest {
367365

368366
// Then
369367
assertThat(testedFeature.clientToken).isEqualTo(fakeConfig.clientToken)
370-
assertThat(testedFeature.packageName).isEqualTo(appContext.fakePackageName)
371368
assertThat(testedFeature.packageVersionProvider.version)
372369
.isEqualTo(appContext.fakeVersionName)
373370
assertThat(testedFeature.serviceName).isEqualTo(appContext.fakePackageName)
@@ -395,7 +392,6 @@ internal class CoreFeatureTest {
395392

396393
// Then
397394
assertThat(testedFeature.clientToken).isEqualTo(fakeConfig.clientToken)
398-
assertThat(testedFeature.packageName).isEqualTo(appContext.fakePackageName)
399395
assertThat(testedFeature.packageVersionProvider.version)
400396
.isEqualTo(appContext.fakeVersionCode.toString())
401397
assertThat(testedFeature.serviceName).isEqualTo(fakeConfig.service)
@@ -425,7 +421,6 @@ internal class CoreFeatureTest {
425421

426422
// Then
427423
assertThat(testedFeature.clientToken).isEqualTo(fakeConfig.clientToken)
428-
assertThat(testedFeature.packageName).isEqualTo(appContext.fakePackageName)
429424
assertThat(testedFeature.packageVersionProvider.version)
430425
.isEqualTo(CoreFeature.DEFAULT_APP_VERSION)
431426
assertThat(testedFeature.serviceName).isEqualTo(fakeConfig.service)
@@ -460,7 +455,6 @@ internal class CoreFeatureTest {
460455

461456
// Then
462457
assertThat(testedFeature.clientToken).isEqualTo(fakeConfig.clientToken)
463-
assertThat(testedFeature.packageName).isEqualTo(appContext.fakePackageName)
464458
assertThat(testedFeature.packageVersionProvider.version).isEqualTo(
465459
CoreFeature.DEFAULT_APP_VERSION
466460
)
@@ -695,7 +689,6 @@ internal class CoreFeatureTest {
695689

696690
// Then
697691
assertThat(testedFeature.clientToken).isEqualTo(fakeConfig.clientToken)
698-
assertThat(testedFeature.packageName).isEqualTo(appContext.fakePackageName)
699692
assertThat(testedFeature.packageVersionProvider.version)
700693
.isEqualTo(appContext.fakeVersionName)
701694
assertThat(testedFeature.serviceName).isEqualTo(fakeConfig.service)
@@ -1251,7 +1244,6 @@ internal class CoreFeatureTest {
12511244

12521245
// Then
12531246
assertThat(testedFeature.clientToken).isEqualTo("")
1254-
assertThat(testedFeature.packageName).isEqualTo("")
12551247
assertThat(testedFeature.packageVersionProvider.version).isEqualTo("")
12561248
assertThat(testedFeature.serviceName).isEqualTo("")
12571249
assertThat(testedFeature.envName).isEqualTo("")

dd-sdk-android-core/src/test/kotlin/com/datadog/android/utils/config/CoreFeatureTestConfiguration.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,6 @@ internal class CoreFeatureTestConfiguration<T : Context>(
126126
whenever(mockInstance.isMainProcess) doReturn true
127127
whenever(mockInstance.envName) doReturn fakeEnvName
128128
whenever(mockInstance.serviceName) doReturn fakeServiceName
129-
whenever(mockInstance.packageName) doReturn appContext.fakePackageName
130129
whenever(mockInstance.packageVersionProvider) doReturn mockAppVersionProvider
131130
whenever(mockInstance.variant) doReturn appContext.fakeVariant
132131
whenever(mockInstance.sourceName) doReturn fakeSourceName

0 commit comments

Comments
 (0)