This is an automated email from the ASF dual-hosted git repository. gk pushed a commit to branch trunk in repository https://gitbox.apache.org/repos/asf/turbine-core.git
commit b6bd441dc988c839f8063329f84fdd4e3f0b5113 Author: Georg Kallidis <[email protected]> AuthorDate: Mon Aug 14 15:53:23 2023 +0200 Use ReentrantLock instead of synchronized methods + lock for service --- .../apache/turbine/services/BaseServiceBroker.java | 45 ++++++++++++++-------- 1 file changed, 29 insertions(+), 16 deletions(-) diff --git a/src/java/org/apache/turbine/services/BaseServiceBroker.java b/src/java/org/apache/turbine/services/BaseServiceBroker.java index cbdb0c68..1cf50531 100644 --- a/src/java/org/apache/turbine/services/BaseServiceBroker.java +++ b/src/java/org/apache/turbine/services/BaseServiceBroker.java @@ -354,18 +354,24 @@ public abstract class BaseServiceBroker implements ServiceBroker * service was not successful. */ @Override - public synchronized void initService(String name) + public void initService(String name) throws InitializationException { // Calling getServiceInstance(name) assures that the Service // implementation has its name and broker reference set before // initialization. Service instance = getServiceInstance(name); - - if (!instance.getInit()) - { - // this call might result in an indirect recursion - instance.init(); + + serviceLock.lock(); + try { + if (!instance.getInit()) + { + // this call might result in an indirect recursion + instance.init(); + } + + } finally { + serviceLock.unlock(); } } @@ -453,20 +459,25 @@ public abstract class BaseServiceBroker implements ServiceBroker * uninitialized. */ @Override - public synchronized void shutdownService(String name) + public void shutdownService(String name) { try { Service service = getServiceInstance(name); if (service != null && service.getInit()) { - service.shutdown(); - - if (service.getInit() && service instanceof BaseService) - { - // BaseService::shutdown() does this by default, - // but could've been overriden poorly. - ((BaseService) service).setInit(false); + serviceLock.lock(); + try { + service.shutdown(); + + if (service.getInit() && service instanceof BaseService) + { + // BaseService::shutdown() does this by default, + // but could've been overriden poorly. + ((BaseService) service).setInit(false); + } + } finally { + serviceLock.unlock(); } } } @@ -532,14 +543,16 @@ public abstract class BaseServiceBroker implements ServiceBroker service = getServiceInstance(name); if (!service.getInit()) { - synchronized (service.getClass()) - { + serviceLock.lock(); // was synchronized (service.getClass(), but should be equivalent + try { if (!service.getInit()) { log.info("Start Initializing service (late): {}", name); service.init(); log.info("Finish Initializing service (late): {}", name); } + } finally { + serviceLock.unlock(); } } if (!service.getInit())
