mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-31 21:05:37 +02:00
Bug 499696 - add synchronization to service maps
Change-Id: I64775d4976c96a20bee934cf024064ef18896be9 Signed-off-by: Greg Watson <g.watson@computer.org>
This commit is contained in:
parent
707299e380
commit
a50bad7272
1 changed files with 58 additions and 42 deletions
|
@ -148,29 +148,33 @@ public class RemoteConnectionType implements IRemoteConnectionType {
|
||||||
* @see org.eclipse.remote.core.IRemoteConnectionType#getService(java.lang.Class)
|
* @see org.eclipse.remote.core.IRemoteConnectionType#getService(java.lang.Class)
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public <T extends Service> T getService(Class<T> service) {
|
public <T extends Service> T getService(Class<T> service) {
|
||||||
@SuppressWarnings("unchecked")
|
synchronized (serviceDefinitionMap) {
|
||||||
T obj = (T) serviceMap.get(service);
|
@SuppressWarnings("unchecked")
|
||||||
if (obj == null) {
|
T obj = (T) serviceMap.get(service);
|
||||||
IConfigurationElement ce = serviceDefinitionMap.get(service.getName());
|
if (obj == null) {
|
||||||
if (ce != null) {
|
IConfigurationElement ce = serviceDefinitionMap.get(service.getName());
|
||||||
try {
|
if (ce != null) {
|
||||||
Service.Factory factory = (Service.Factory) ce.createExecutableExtension("factory"); //$NON-NLS-1$
|
try {
|
||||||
if (factory != null) {
|
Service.Factory factory = (Service.Factory) ce.createExecutableExtension("factory"); //$NON-NLS-1$
|
||||||
obj = factory.getService(this, service);
|
if (factory != null) {
|
||||||
serviceMap.put(service, obj);
|
obj = factory.getService(this, service);
|
||||||
|
serviceMap.put(service, obj);
|
||||||
|
}
|
||||||
|
} catch (CoreException e) {
|
||||||
|
RemoteCorePlugin.log(e.getStatus());
|
||||||
}
|
}
|
||||||
} catch (CoreException e) {
|
|
||||||
RemoteCorePlugin.log(e.getStatus());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return obj;
|
||||||
}
|
}
|
||||||
return obj;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<String> getServices() {
|
public List<String> getServices() {
|
||||||
return new ArrayList<>(serviceDefinitionMap.keySet());
|
synchronized (serviceDefinitionMap) {
|
||||||
|
return new ArrayList<>(serviceDefinitionMap.keySet());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -180,7 +184,9 @@ public class RemoteConnectionType implements IRemoteConnectionType {
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public <T extends Service> boolean hasService(Class<T> service) {
|
public <T extends Service> boolean hasService(Class<T> service) {
|
||||||
return serviceDefinitionMap.get(service.getName()) != null;
|
synchronized (serviceDefinitionMap) {
|
||||||
|
return serviceDefinitionMap.get(service.getName()) != null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -194,25 +200,28 @@ public class RemoteConnectionType implements IRemoteConnectionType {
|
||||||
* @throws CoreException
|
* @throws CoreException
|
||||||
*/
|
*/
|
||||||
public <T extends IRemoteConnection.Service> T getConnectionService(IRemoteConnection connection, Class<T> service) {
|
public <T extends IRemoteConnection.Service> T getConnectionService(IRemoteConnection connection, Class<T> service) {
|
||||||
IConfigurationElement ce = connectionServiceDefinitionMap.get(service.getName());
|
synchronized (connectionServiceDefinitionMap) {
|
||||||
if (ce != null) {
|
IConfigurationElement ce = connectionServiceDefinitionMap.get(service.getName());
|
||||||
try {
|
if (ce != null) {
|
||||||
IRemoteConnection.Service.Factory factory = (IRemoteConnection.Service.Factory) ce
|
try {
|
||||||
.createExecutableExtension("factory"); //$NON-NLS-1$
|
IRemoteConnection.Service.Factory factory = (IRemoteConnection.Service.Factory) ce
|
||||||
if (factory != null) {
|
.createExecutableExtension("factory"); //$NON-NLS-1$
|
||||||
return factory.getService(connection, service);
|
if (factory != null) {
|
||||||
|
return factory.getService(connection, service);
|
||||||
|
}
|
||||||
|
} catch (CoreException e) {
|
||||||
|
RemoteCorePlugin.log(e.getStatus());
|
||||||
}
|
}
|
||||||
} catch (CoreException e) {
|
|
||||||
RemoteCorePlugin.log(e.getStatus());
|
|
||||||
}
|
}
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<String> getConnectionServices() {
|
public List<String> getConnectionServices() {
|
||||||
return new ArrayList<>(connectionServiceDefinitionMap.keySet());
|
synchronized (connectionServiceDefinitionMap) {
|
||||||
|
return new ArrayList<>(connectionServiceDefinitionMap.keySet());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -222,7 +231,9 @@ public class RemoteConnectionType implements IRemoteConnectionType {
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public <T extends IRemoteConnection.Service> boolean hasConnectionService(Class<T> service) {
|
public <T extends IRemoteConnection.Service> boolean hasConnectionService(Class<T> service) {
|
||||||
return connectionServiceDefinitionMap.get(service.getName()) != null;
|
synchronized (connectionServiceDefinitionMap) {
|
||||||
|
return connectionServiceDefinitionMap.get(service.getName()) != null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -236,24 +247,27 @@ public class RemoteConnectionType implements IRemoteConnectionType {
|
||||||
* @throws CoreException
|
* @throws CoreException
|
||||||
*/
|
*/
|
||||||
public <T extends IRemoteProcess.Service> T getProcessService(IRemoteProcess process, Class<T> service) {
|
public <T extends IRemoteProcess.Service> T getProcessService(IRemoteProcess process, Class<T> service) {
|
||||||
IConfigurationElement ce = processServiceDefinitionMap.get(service.getName());
|
synchronized (processServiceDefinitionMap) {
|
||||||
if (ce != null) {
|
IConfigurationElement ce = processServiceDefinitionMap.get(service.getName());
|
||||||
try {
|
if (ce != null) {
|
||||||
IRemoteProcess.Service.Factory factory = (IRemoteProcess.Service.Factory) ce.createExecutableExtension("factory"); //$NON-NLS-1$
|
try {
|
||||||
if (factory != null) {
|
IRemoteProcess.Service.Factory factory = (IRemoteProcess.Service.Factory) ce.createExecutableExtension("factory"); //$NON-NLS-1$
|
||||||
return factory.getService(process, service);
|
if (factory != null) {
|
||||||
|
return factory.getService(process, service);
|
||||||
|
}
|
||||||
|
} catch (CoreException e) {
|
||||||
|
RemoteCorePlugin.log(e.getStatus());
|
||||||
}
|
}
|
||||||
} catch (CoreException e) {
|
|
||||||
RemoteCorePlugin.log(e.getStatus());
|
|
||||||
}
|
}
|
||||||
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<String> getProcessServices() {
|
public List<String> getProcessServices() {
|
||||||
return new ArrayList<>(processServiceDefinitionMap.keySet());
|
synchronized (processServiceDefinitionMap) {
|
||||||
|
return new ArrayList<>(processServiceDefinitionMap.keySet());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -263,7 +277,9 @@ public class RemoteConnectionType implements IRemoteConnectionType {
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public <T extends IRemoteProcess.Service> boolean hasProcessService(Class<T> service) {
|
public <T extends IRemoteProcess.Service> boolean hasProcessService(Class<T> service) {
|
||||||
return processServiceDefinitionMap.get(service.getName()) != null;
|
synchronized (processServiceDefinitionMap) {
|
||||||
|
return processServiceDefinitionMap.get(service.getName()) != null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -301,7 +317,7 @@ public class RemoteConnectionType implements IRemoteConnectionType {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Signal a connnection is about to be removed.
|
* Signal a connection is about to be removed.
|
||||||
*
|
*
|
||||||
* @since 2.0
|
* @since 2.0
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Add table
Reference in a new issue