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 <[email protected]>
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: [email protected]
For additional commands, e-mail: [email protected]