You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by im...@apache.org on 2004/08/26 18:36:41 UTC
cvs commit: jakarta-commons-sandbox/vfs/src/java/org/apache/commons/vfs/provider AbstractFileProvider.java AbstractFileSystem.java AbstractLayeredFileProvider.java AbstractOriginatingFileProvider.java
imario 2004/08/26 09:36:41
Modified: vfs/src/java/org/apache/commons/vfs/provider
AbstractFileProvider.java AbstractFileSystem.java
AbstractLayeredFileProvider.java
AbstractOriginatingFileProvider.java
Log:
first steps to make vfs more thread-safe
Revision Changes Path
1.15 +33 -18 jakarta-commons-sandbox/vfs/src/java/org/apache/commons/vfs/provider/AbstractFileProvider.java
Index: AbstractFileProvider.java
===================================================================
RCS file: /home/cvs/jakarta-commons-sandbox/vfs/src/java/org/apache/commons/vfs/provider/AbstractFileProvider.java,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- AbstractFileProvider.java 9 Jul 2004 21:02:51 -0000 1.14
+++ AbstractFileProvider.java 26 Aug 2004 16:36:41 -0000 1.15
@@ -52,8 +52,11 @@
*/
public void close()
{
- fileSystems.clear();
- super.close();
+ synchronized (fileSystems)
+ {
+ fileSystems.clear();
+ super.close();
+ }
}
/**
@@ -73,12 +76,15 @@
protected void addFileSystem(final Comparable key, final FileSystem fs)
throws FileSystemException
{
- // Add to the cache
- addComponent(fs);
+ synchronized (fileSystems)
+ {
+ // Add to the cache
+ addComponent(fs);
- FileSystemKey treeKey = new FileSystemKey(key, fs.getFileSystemOptions());
- ((AbstractFileSystem) fs).setCacheKey(treeKey);
- fileSystems.put(treeKey, fs);
+ FileSystemKey treeKey = new FileSystemKey(key, fs.getFileSystemOptions());
+ ((AbstractFileSystem) fs).setCacheKey(treeKey);
+ fileSystems.put(treeKey, fs);
+ }
}
/**
@@ -88,9 +94,12 @@
*/
protected FileSystem findFileSystem(final Comparable key, final FileSystemOptions fileSystemProps)
{
- FileSystemKey treeKey = new FileSystemKey(key, fileSystemProps);
+ synchronized (fileSystems)
+ {
+ FileSystemKey treeKey = new FileSystemKey(key, fileSystemProps);
- return (FileSystem) fileSystems.get(treeKey);
+ return (FileSystem) fileSystems.get(treeKey);
+ }
}
public FileSystemConfigBuilder getConfigBuilder()
@@ -100,23 +109,29 @@
public void freeUnusedResources()
{
- Iterator iterFileSystems = fileSystems.values().iterator();
- while (iterFileSystems.hasNext())
+ synchronized (fileSystems)
{
- AbstractFileSystem fs = (AbstractFileSystem) iterFileSystems.next();
- if (fs.isReleaseable())
+ Iterator iterFileSystems = fileSystems.values().iterator();
+ while (iterFileSystems.hasNext())
{
- fs.closeCommunicationLink();
+ AbstractFileSystem fs = (AbstractFileSystem) iterFileSystems.next();
+ if (fs.isReleaseable())
+ {
+ fs.closeCommunicationLink();
+ }
}
}
}
public void closeFileSystem(final FileSystem filesystem)
{
- AbstractFileSystem fs = (AbstractFileSystem) filesystem;
+ synchronized (fileSystems)
+ {
+ AbstractFileSystem fs = (AbstractFileSystem) filesystem;
- fileSystems.remove(fs.getCacheKey());
- removeComponent(fileSystems);
- fs.close();
+ fileSystems.remove(fs.getCacheKey());
+ removeComponent(fileSystems);
+ fs.close();
+ }
}
}
1.31 +32 -23 jakarta-commons-sandbox/vfs/src/java/org/apache/commons/vfs/provider/AbstractFileSystem.java
Index: AbstractFileSystem.java
===================================================================
RCS file: /home/cvs/jakarta-commons-sandbox/vfs/src/java/org/apache/commons/vfs/provider/AbstractFileSystem.java,v
retrieving revision 1.30
retrieving revision 1.31
diff -u -r1.30 -r1.31
--- AbstractFileSystem.java 9 Jul 2004 21:02:51 -0000 1.30
+++ AbstractFileSystem.java 26 Aug 2004 16:36:41 -0000 1.31
@@ -248,7 +248,7 @@
/**
* Finds a file in this file system.
*/
- public FileObject resolveFile(final FileName name) throws FileSystemException
+ public synchronized FileObject resolveFile(final FileName name) throws FileSystemException
{
if (!rootName.getRootURI().equals(name.getRootURI()))
{
@@ -362,13 +362,16 @@
public void addListener(final FileObject file,
final FileListener listener)
{
- ArrayList listeners = (ArrayList) listenerMap.get(file.getName());
- if (listeners == null)
+ synchronized (listenerMap)
{
- listeners = new ArrayList();
- listenerMap.put(file.getName(), listeners);
+ ArrayList listeners = (ArrayList) listenerMap.get(file.getName());
+ if (listeners == null)
+ {
+ listeners = new ArrayList();
+ listenerMap.put(file.getName(), listeners);
+ }
+ listeners.add(listener);
}
- listeners.add(listener);
}
/**
@@ -377,10 +380,13 @@
public void removeListener(final FileObject file,
final FileListener listener)
{
- final ArrayList listeners = (ArrayList) listenerMap.get(file.getName());
- if (listeners != null)
+ synchronized (listenerMap)
{
- listeners.remove(listener);
+ final ArrayList listeners = (ArrayList) listenerMap.get(file.getName());
+ if (listeners != null)
+ {
+ listeners.remove(listener);
+ }
}
}
@@ -418,23 +424,26 @@
*/
private void fireEvent(final ChangeEvent event)
{
- final FileObject file = event.getFile();
- final ArrayList listeners = (ArrayList) listenerMap.get(file.getName());
- if (listeners != null)
+ synchronized (listenerMap)
{
- final int count = listeners.size();
- for (int i = 0; i < count; i++)
+ final FileObject file = event.getFile();
+ final ArrayList listeners = (ArrayList) listenerMap.get(file.getName());
+ if (listeners != null)
{
- final FileListener listener = (FileListener) listeners.get(i);
- try
- {
- event.notify(listener);
- }
- catch (final Exception e)
+ final int count = listeners.size();
+ for (int i = 0; i < count; i++)
{
- final String message = Messages.getString("vfs.provider/notify-listener.warn", file);
- // getLogger().warn(message, e);
- VfsLog.warn(getLogger(), log, message, e);
+ final FileListener listener = (FileListener) listeners.get(i);
+ try
+ {
+ event.notify(listener);
+ }
+ catch (final Exception e)
+ {
+ final String message = Messages.getString("vfs.provider/notify-listener.warn", file);
+ // getLogger().warn(message, e);
+ VfsLog.warn(getLogger(), log, message, e);
+ }
}
}
}
1.15 +4 -4 jakarta-commons-sandbox/vfs/src/java/org/apache/commons/vfs/provider/AbstractLayeredFileProvider.java
Index: AbstractLayeredFileProvider.java
===================================================================
RCS file: /home/cvs/jakarta-commons-sandbox/vfs/src/java/org/apache/commons/vfs/provider/AbstractLayeredFileProvider.java,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -r1.14 -r1.15
--- AbstractLayeredFileProvider.java 10 May 2004 20:09:42 -0000 1.14
+++ AbstractLayeredFileProvider.java 26 Aug 2004 16:36:41 -0000 1.15
@@ -63,9 +63,9 @@
/**
* Creates a layered file system.
*/
- public FileObject createFileSystem(final String scheme,
- final FileObject file,
- final FileSystemOptions fileSystemOptions)
+ public synchronized FileObject createFileSystem(final String scheme,
+ final FileObject file,
+ final FileSystemOptions fileSystemOptions)
throws FileSystemException
{
// Check if cached
1.19 +2 -2 jakarta-commons-sandbox/vfs/src/java/org/apache/commons/vfs/provider/AbstractOriginatingFileProvider.java
Index: AbstractOriginatingFileProvider.java
===================================================================
RCS file: /home/cvs/jakarta-commons-sandbox/vfs/src/java/org/apache/commons/vfs/provider/AbstractOriginatingFileProvider.java,v
retrieving revision 1.18
retrieving revision 1.19
diff -u -r1.18 -r1.19
--- AbstractOriginatingFileProvider.java 10 May 2004 20:09:42 -0000 1.18
+++ AbstractOriginatingFileProvider.java 26 Aug 2004 16:36:41 -0000 1.19
@@ -64,7 +64,7 @@
/**
* Locates a file from its parsed URI.
*/
- private FileObject findFile(final FileName name, final FileSystemOptions fileSystemOptions)
+ private synchronized FileObject findFile(final FileName name, final FileSystemOptions fileSystemOptions)
throws FileSystemException
{
// Check in the cache for the file system
---------------------------------------------------------------------
To unsubscribe, e-mail: commons-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-dev-help@jakarta.apache.org