[
https://issues.jboss.org/browse/JBOSGI-479?page=com.atlassian.jira.plugin...
]
Thomas Diesler commented on JBOSGI-479:
---------------------------------------
Crafty ;-)
This introduces a synchronisation point for every service registration. Do we have data
about the performance impact of this? Perhaps it'd be easier and more performant to
deal with the rare DuplicateServiceException and redo the controller != null code path.
Race condition when registering services in multiple threads
------------------------------------------------------------
Key: JBOSGI-479
URL:
https://issues.jboss.org/browse/JBOSGI-479
Project: JBoss OSGi
Issue Type: Bug
Security Level: Public(Everyone can see)
Reporter: David Bosschaert
Assignee: David Bosschaert
When registering multiple services with the same service name a race condition occurs.
This is exposed when running the Service Performance tests (e.g.
org.jboss.osgi.test.performance.service.arq.Service100TestCase).
The problem boils down to the fact that two threads race to obtain a service controller
for the same name. One of them wins, the other fails with this exception:
org.jboss.msc.service.DuplicateServiceException: Service
jbosgi.service."org.jboss.osgi.test.performance.service.SvcCls1" is already
registered
at
org.jboss.msc.service.ServiceRegistrationImpl.setInstance(ServiceRegistrationImpl.java:154)
at
org.jboss.msc.service.ServiceControllerImpl.startInstallation(ServiceControllerImpl.java:226)
at org.jboss.msc.service.ServiceContainerImpl.install(ServiceContainerImpl.java:560)
at org.jboss.msc.service.ServiceTargetImpl.install(ServiceTargetImpl.java:201)
at
org.jboss.msc.service.ServiceControllerImpl$ChildServiceTarget.install(ServiceControllerImpl.java:2194)
at org.jboss.msc.service.ServiceBuilderImpl.install(ServiceBuilderImpl.java:307)
at
org.jboss.osgi.framework.internal.ServiceManagerPlugin.registerService(ServiceManagerPlugin.java:180)
at
org.jboss.osgi.framework.internal.AbstractBundleContext.registerService(AbstractBundleContext.java:305)
at
org.jboss.osgi.framework.internal.AbstractBundleContext.registerService(AbstractBundleContext.java:297)
at
org.jboss.osgi.test.performance.service.CreateAndLookupBenchmark.runThread(CreateAndLookupBenchmark.java:79)
at
org.jboss.osgi.test.performance.service.CreateAndLookupBenchmark.runThread(CreateAndLookupBenchmark.java:41)
at
org.jboss.osgi.test.performance.AbstractThreadedBenchmark$1.run(AbstractThreadedBenchmark.java:91)
at java.lang.Thread.run(Thread.java:680)
--
This message is automatically generated by JIRA.
For more information on JIRA, see:
http://www.atlassian.com/software/jira