This is an automated email from the ASF dual-hosted git repository.

remm pushed a commit to branch 10.1.x
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/10.1.x by this push:
     new 0d9e23d911 Fix services sync
0d9e23d911 is described below

commit 0d9e23d9114f8c4a8a3a0623d952b194f4245d73
Author: remm <r...@apache.org>
AuthorDate: Tue Jan 16 16:13:47 2024 +0100

    Fix services sync
    
    Found by coverity.
---
 java/org/apache/catalina/core/StandardServer.java | 32 +++++++++++++++--------
 1 file changed, 21 insertions(+), 11 deletions(-)

diff --git a/java/org/apache/catalina/core/StandardServer.java 
b/java/org/apache/catalina/core/StandardServer.java
index e66d32063f..e4ca5ec3d7 100644
--- a/java/org/apache/catalina/core/StandardServer.java
+++ b/java/org/apache/catalina/core/StandardServer.java
@@ -705,18 +705,22 @@ public final class StandardServer extends 
LifecycleMBeanBase implements Server {
      */
     @Override
     public Service[] findServices() {
-        return services;
+        synchronized (servicesLock) {
+            return services.clone();
+        }
     }
 
     /**
      * @return the JMX service names.
      */
     public ObjectName[] getServiceNames() {
-        ObjectName[] onames = new ObjectName[services.length];
-        for (int i = 0; i < services.length; i++) {
-            onames[i] = ((StandardService) services[i]).getObjectName();
+        synchronized (servicesLock) {
+            ObjectName[] onames = new ObjectName[services.length];
+            for (int i = 0; i < services.length; i++) {
+                onames[i] = ((StandardService) services[i]).getObjectName();
+            }
+            return onames;
         }
-        return onames;
     }
 
 
@@ -965,8 +969,10 @@ public final class StandardServer extends 
LifecycleMBeanBase implements Server {
         fireLifecycleEvent(CONFIGURE_STOP_EVENT, null);
 
         // Stop our defined Services
-        for (Service service : services) {
-            service.stop();
+        synchronized (servicesLock) {
+            for (Service service : services) {
+                service.stop();
+            }
         }
 
         synchronized (utilityExecutorLock) {
@@ -1006,16 +1012,20 @@ public final class StandardServer extends 
LifecycleMBeanBase implements Server {
         globalNamingResources.init();
 
         // Initialize our defined Services
-        for (Service service : services) {
-            service.init();
+        synchronized (servicesLock) {
+            for (Service service : services) {
+                service.init();
+            }
         }
     }
 
     @Override
     protected void destroyInternal() throws LifecycleException {
         // Destroy our defined Services
-        for (Service service : services) {
-            service.destroy();
+        synchronized (servicesLock) {
+            for (Service service : services) {
+                service.destroy();
+            }
         }
 
         globalNamingResources.destroy();


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to