[Analysis] fix race in registering services in test
This commit is contained in:
+8
-7
@@ -55,24 +55,25 @@ abstract class AnalysisApiTestConfigurator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private object ApplicationServiceRegistrar {
|
object ApplicationServiceRegistrar {
|
||||||
fun register(application: MockApplication, registrars: List<AnalysisApiTestServiceRegistrar>, testServices: TestServices) {
|
fun register(application: MockApplication, registrars: List<AnalysisApiTestServiceRegistrar>, testServices: TestServices) {
|
||||||
|
val lock = application.lock
|
||||||
for (registrar in registrars) {
|
for (registrar in registrars) {
|
||||||
val registered = application.lock.readLock().withLock {
|
if (lock.readLock().withLock { application.isRegistrarRegistered(registrar) }) {
|
||||||
application.serviceRegistered[registrar::class] == true
|
|
||||||
}
|
|
||||||
|
|
||||||
if (registered) {
|
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
application.lock.writeLock().withLock {
|
lock.writeLock().withLock {
|
||||||
|
if (application.isRegistrarRegistered(registrar)) return@withLock
|
||||||
registrar.registerApplicationServices(application, testServices)
|
registrar.registerApplicationServices(application, testServices)
|
||||||
application.serviceRegistered[registrar::class] = true
|
application.serviceRegistered[registrar::class] = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun Application.isRegistrarRegistered(registrar: AnalysisApiTestServiceRegistrar): Boolean =
|
||||||
|
serviceRegistered[registrar::class] == true
|
||||||
|
|
||||||
private val Application.lock
|
private val Application.lock
|
||||||
by NotNullableUserDataProperty<Application, ReadWriteLock>(
|
by NotNullableUserDataProperty<Application, ReadWriteLock>(
|
||||||
Key("TestApplicationServicesRegistrarLock"),
|
Key("TestApplicationServicesRegistrarLock"),
|
||||||
|
|||||||
Reference in New Issue
Block a user